当前位置:   article > 正文

2024.7.19学习c语言的第三天

2024.7.19学习c语言的第三天

1.昨日作业:

输入一个字符串“12\x08\12\x003\08abc”,请测试sizefo(串)和strlen(串)都是什么值。为什么?

  1. #include <stdio.h>
  2. #include <string.h>
  3. int main(){
  4. printf("%d\n",sizeof("12\x08\12\x003\08abc"));//8
  5. printf("%d\n",strlen("12\x08\12\x003\08abc"));//7
  6. }

输出结果:

2.基本类型

%d    十进制有符号整数

%u     十进制无符号整数

%x      无符号以十六进制表示的整数

%o      无符号以八进制表示的整数

%f       浮点数

%e     标准科学计数

%c        单个字符  读入时,任意字符都是有效字符

%s       字符串   读入或者输出都是地址

%ld     表示输出long整数

%lf    表示输出double浮点

3.char有两个身份

  1. 一个字节整型数的数据类型,可以有负数
  2. 存放字符 ascll码值

4.关于数组

  1. 数组的定义:数目固定,类型相同连续存放一组有序数的集合
  2. c语言规定:数组名就是内存块的首地址,他是一个指针常量
  3. 部分元素赋初始值,其中未赋初始值的值都为0.
  4. 全部元素赋初始值,长度才可以省略
  5. 使用元素用【n】运算符:表示某个地址后下标为n的内存块,下标的范围【0,长度】
  6. Sizeof(数组名)就是数组所占空间大小。
  7. 数据名作为函数形参,要退化成指针变量。

5.While循环和for循环

while 练习

  1. #include <stdio.h>
  2. #include <string.h>
  3. int main(){
  4. char str[1000] = {0};
  5. int cnt = 0;
  6. scanf("%s",str);
  7. int len = strlen(str);
  8. int i = 0;
  9. while(i<len){
  10. if(str[i]>='0' && str[i]<='9'){
  11. cnt =cnt+1;
  12. }
  13. i = i+1;
  14. }
  15. printf("数字字符的个数是%d",cnt);
  16. return 0;

for循环练习

  1. #include <string.h>
  2. #include <stdio.h>
  3. int main(){
  4. char str[1000] = {0};
  5. int cnt = 0;
  6. scanf("%s",str);
  7. int len = strlen(str);
  8. int i = 0;
  9. for(i=0;i<len;i++){
  10. if(str[i]>='0' && str[i]<='9'){
  11. cnt++;
  12. }
  13. }
  14. printf("数字字符的个数是%d",cnt);
  15. return 0;
  16. }

 循环的本质是执行相同的事情,也就是我们面对一个需求,
    //(1)我们要分享出来反复执行的事情,反复执行的事情就是循环体要写的代码。
    //(2)什么条件退出,这就是退出条件,也是循环条件。


    while和for循环有啥区别:


   // 1.相同点,都是循环条件为真,进入循环体,为假的时候,退出循环
   //2.不同点:for循环应用已知开始值,已知结束值,并且知道步长。
   //         while循环应用于循环未知,循环次数是根据中间运算结果决定

6.学习一个函数,要关注函数原型

知道函数的功能是什么,这样我们才能在实现功能时,使用这个函数。

我们要知道函数形参个数,类型和意义,才能正确的赋实际参数。

我们还要知道函数的返回值,什么类型,什么意义,这样我们就可以定义相应类型的变量来接受函数的返回值,进行下一步处理。

7.所有表达式的运算符:

从左向右两两运算比较优先级,左边高的先计算左边的,右边优先级高的,继续向右走,直到找的相对最高的运算符进行计算,如果优先级相同,看结合性(单目运算右结合,双目运算左结合,三目运算嵌套右结合,计算左结合)

左结合,先计算左边

右结合,继续向右走,直到找到最高的优先级进行计算,

重复以上步骤

注意短路

8.关于:/

  1. 两个整形数相除,必得整形数,必为地板数;
  2. 分子或分母有一个浮点型数,即为通常意义的除法。
  3. 分母不能为0,否则崩溃。

9.关于:%取余

  1. 用于计算两个数相除后,得到的余数。
  2. 参与计算的量,必须是整型,其结果也是整型
  3. 某个数和n取余,其结果的范围是【0,n-1】

10.宏定义中#和##的使用

1. #

#的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号

1   #define WARN_IF(EXP) /
2   do{ if (EXP) /
3   fprintf(stderr, "Warning: " #EXP "/n"); } /
4   while(0)

那么实际使用中会出现下面所示的替换过程:

 WARN_IF (divider == 0);

 被替换为

 do {
   if (divider == 0)
   fprintf(stderr, "Warning" "divider == 0" "/n");
 } while(0);

这样每次divider(除数)为0的时候便会在标准错误流上输出一个提示信息。

2. ##

##被称为连接符(concatenator),用来将两个Token连接为一个Token,##符是把传递过来的参数当成字符串进行替代。

例如

 #define PRINT( n ) printf( "token" #n " = %d", token##n )

PRINT(mine );

在编译时会被编译成

 printf( "token" "mine" " = %d", tokenmine );

小游戏,100以内,逢7过

  1. #include <stdio.h>
  2. #include <math.h>
  3. int main(){
  4. for(int i= 1;i<=100;i++){
  5. if(i%7 == 0 ){
  6. printf("过");
  7. }else if (i%10 == 7){
  8. printf("过");
  9. }else if (i/10%10 == 7){
  10. printf("过");
  11. }else {
  12. printf("%d ",i);
  13. }
  14. if(i%10 == 0){
  15. printf("\n");
  16. }
  17. }
  18. return 0;
  19. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/924936
推荐阅读
相关标签
  

闽ICP备14008679号