• 操作符(operator)


    目录

    操作符::

                    操作符分类

                      1.算术操作符

                      2.移位操作符

                      3.位操作符

                      4.赋值操作符

                      5.单目操作符

                      6.关系操作符

                      7.逻辑操作符

                      8.条件操作符

                      9.逗号表达式

                      10.下标引用,函数调用和结构成员

                    C语言编程训练(牛客网)

                      BC38——变种水仙花数

                      BC45——最高分数

                      BC47——判断是不是字母

                      BC48——字母大小写转换

                      BC95——最高分和最低分之差

                      BC98——序列中删除指定数字

                      BC117——小乐乐走台阶


    操作符::

    操作符分类

    1.算术操作符

    算术操作符:用于处理四则运算。

    1.除了%操作符外,其他的几个操作符都可以作用于整数和浮点数,%操作符只能作用于整数。

    2.对于/操作符如果两个操作数都为整数,执行整数除法,而只要有浮点数执行的就是浮点数除法。

    3.%操作符的两个操作数必须为整数,返回的是整除之后的余数。

    2.移位操作符

    左移操作符:<<

    注:移位操作符的操作数只能是整数。

    移位规则:左边抛弃,右边补0

    性质:向左移几位 结果就翻几倍,乘几个2,如x<<1 = x*2  x<<2 = x*4

    右移操作符:>>

    移位规则:

    1.逻辑移位:右边丢弃,左边补0.

    2.算术移位:右边丢弃,左边用该值的符号位补充

    右移操作符对于正整数来说,右移一位相当于除以2,x>>1 = x/2   x>>2=x/4

    注:绝大多数编译器都采用算术移位的原因:

    逻辑移位对于负数 右边舍弃左边补0 补码转化为原码 负数转化为正数 不合实际

    警告:对于移位操作符,不要移动负数位,这个是标准未定义的。同时浮点数不支持左移右移

    注:移位移的是补码,最终结果变原码

    1. int num = 10;
    2. num >> -1;error

    3.位操作符

     规则:

         &---按位(二进制)位与 全1为1 不是全1就是0  (补码 包括符号位)
         |---按位(二进制)位或 全0为0 不是全0就是1   (补码 包括符号位)
         ^---按(二进制)位异或 相同为0 相异为1          (补码 包括符号位)

    性质:

    1.按位与的性质:a&1的结果的最低位是什么,a的最后一位就是什么

                                n=n&(n-1),每进行一次 就让最右边的1去掉一个 直到变成全0

    2.按位或的性质:将1左移n-1位后 按位或上去  原序列的那一位就变成1

    3.按位异或的性质:(1)a^a=0 (2)0^a=a (3)按位异或满足交换律

    4.按位取反的性质:将1左移n-1位后 按位取反 再按位与上去 原序列的那一位就变成0

    注:它们的操作数必须是整数。

     

      

     面试题:不创建临时变量(第三个变量),实现两个数的交换

    1. //创建第三方变量
    2. int main()
    3. {
    4. int a = 3;
    5. int b = 5;
    6. int temp = 0;
    7. printf("交换前:a=%d b=%d\n", a, b);
    8. temp = a;
    9. a = b;
    10. b = temp;
    11. printf("交换后:a=%d b=%d\n", a, b);
    12. return 0;
    13. }
    14. //方法一:
    15. int main()
    16. {
    17. int a = 3;
    18. int b = 5;
    19. //这种方法会有溢出的问题
    20. printf("交换前:a=%d b=%d\n", a, b);
    21. a = a + b;
    22. b = a - b;
    23. a = a - b;
    24. printf("交换后:a=%d b=%d\n", a, b);
    25. return 0;
    26. }
    27. //方法二:
    28. int main()
    29. {
    30. int a = 3;
    31. int b = 5;
    32. printf("交换前:a=%d b=%d\n", a, b);
    33. a = a ^ b;//a=3^5
    34. b = a ^ b;//3^5^5 --> b=3
    35. a = a ^ b;//3^5^3 --> a=5
    36. printf("交换后:a=%d b=%d\n", a, b);
    37. return 0;
    38. }

    4.赋值操作符

    1. int weight = 120;//体重
    2. weight = 89;//不满意就赋值
    3. double salary = 10000.0;
    4. salary = 20000.0;//使用赋值操作符赋值
    5. //赋值操作符可以连续使用
    6. int a = 10;
    7. int x = 0;
    8. int y = 20;
    9. a = x = y + 1;//连续赋值但不推荐
    10. //同样的语义
    11. x = y + 1;
    12. a = x;
    13. //这样的写法更加清晰而且易于调试
    14. int x = 10;
    15. x = x + 10;
    16. x += 10;
    17. //其他运算符一样的道理 这样写更简洁

      5.单目操作符

    1. #include
    2. int main()
    3. {
    4. int a = -10;
    5. int* p = NULL;
    6. printf("%d\n", !2);
    7. printf("%d\n", !0);
    8. a = -a;
    9. p = &a;
    10. printf("%d\n", sizeof(a));
    11. printf("%d\n", sizeof(int));
    12. printf("%d\n", sizeof a);//ok
    13. printf("%d\n", sizeof int);//err
    14. return 0;
    15. }
    16. #include
    17. void test1(int arr[])
    18. {
    19. printf("%d\n", sizeof(arr));//(2)
    20. }
    21. void test2(char ch[])
    22. {
    23. printf("%d\n", sizeof(ch));//(4)
    24. }
    25. int main()
    26. {
    27. int arr[10] = { 0 };
    28. char ch[10] = { 0 };
    29. printf("%d\n", sizeof(arr));//(1)
    30. printf("%d\n", sizeof(ch));//(3)
    31. test1(arr);
    32. test2(ch);
    33. return 0;
    34. }
    35. //程序(1) (2) (3) (4)的输出结果分别为 40 4 10 4
    36. //补充:&是升维度的 *是降维度的
    1. #include
    2. //++和--运算符
    3. //前置++和--
    4. int main()
    5. {
    6.    int a = 10;
    7.    int x = ++a;
    8. //先对a进行自增,然后对使用a,也就是表达式的值是a自增之后的值。x为11。
    9.    int y = --a;
    10.    //先对a进行自减,然后对使用a,也就是表达式的值是a自减之后的值。y为10;
    11.    return 0;
    12. }
    13. //后置++和--
    14. int main()
    15. {
    16.    int a = 10;
    17.    int x = a++;
    18.   //先对a先使用,再增加,这样x的值是10;之后a变成11;
    19.    int y = a--;
    20.    //先对a先使用,再自减,这样y的值是11;之后a变成10;
    21.    return 0;
    22. }
    23. //强制类型转换
    24. time_t; long long
    25. srand((unsigned int)time(NULL));

    注:对于内置类型,前置++和后置++没啥区别,但C++对于自定义类型会有区别,而且后置++的优先级比前置++的高

    注:ASCII码值的取值范围是0—127

    两道操作符经典的计算题

    1. #include
    2. int main()
    3. {
    4. int a, b, c;
    5. a = 5;
    6. c = ++a;
    7. b = ++c, c++, ++a, a++;
    8. b += a++ + c;
    9. printf("a = %d b = %d c = %d\n", a, b, c);
    10. return 0;
    11. }
    12. //程序运行结果为:a=9,b=23,c=8 逗号表达式的优先级是最低的 比赋值操作符还要低
    13. #include
    14. int main()
    15. {
    16. int i = 1;
    17. int ret = (++i)+(++i)+(++i);
    18. printf("ret = %d\n", ret);
    19. return 0;
    20. }
    21. //程序运行错误 在不同的编译器结果可能是10或12

     

     6.关系操作符

    警告:在编程的过程中==和=不小心写错导致的错误 。

    1. #include
    2. int main()
    3. {
    4. if (3 == 5)
    5. {
    6. printf("haha\n");
    7. }
    8. //两个字符串比较相等应该使用strcmp
    9. if ("abc" == "abcdef") //err 这样写是在比较2个字符串的首字符的地址
    10. {
    11. printf("hehe\n");
    12. }
    13. return 0;
    14. }

    7.逻辑操作符

    规则:逻辑与:全真为真 不是全真就是假的

               逻辑或:全假为假 不是全假就是真的 

    特点:逻辑与和逻辑或可以控制求值顺序,一定程度上不受优先级的影响

               逻辑与:只要表达式左边为假 则整体为假

               逻辑或:只要表达式左边为真 则整体为真

    区分逻辑与和按位与

    区分逻辑或和按位或

    1. //1&2-------->0
    2. //1&&2------->1
    3. //1|2-------->3
    4. //1||2------->1
    5. //逻辑与和逻辑或的应用
    6. int is_leap_year(int y)
    7. {
    8. if (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0))
    9. {
    10. return 1;
    11. }
    12. else
    13. {
    14. return 0;
    15. }
    16. }

    360笔试题

    1. #include
    2. //&& 左边为假,右边就不计算了
    3. //|| 左边为真,右边就不计算了
    4. int main()
    5. {
    6.    int i = 0,a=0,b=2,c =3,d=4;
    7.    i = a++ && ++b && d++;
    8.    printf("a = %d b = %d c = %d d = %d\n", a, b, c, d);
    9.    return 0;
    10. }
    11. //程序输出的结果是1 2 3 4
    12. #include
    13. int main()
    14. {
    15.    int i = 0,a=1,b=2,c =3,d=4;
    16.    i = a++ && ++b && d++;
    17.    printf("a = %d b = %d c = %d d = %d\n", a, b, c, d);
    18.    return 0;
    19. }
    20. //程序输出的结果是2 3 3 5
    21. #include
    22. int main()
    23. {
    24.    int i = 0,a=1,b=2,c =3,d=4;
    25.    i = a++||++b||d++;
    26.    printf("a = %d b = %d c = %d d = %d\n", a, b, c, d);
    27.    return 0;
    28. }
    29. //程序输出的结果是2 2 3 4
    30. #include
    31. int main()
    32. {
    33.    int i = 0,a=0,b=2,c =3,d=4;
    34.    i = a++||++b||d++;
    35.    printf("a = %d b = %d c = %d d = %d\n", a, b, c, d);
    36.    return 0;
    37. }
    38. //程序输出的结果是1 3 3 4

     

     

     

     8.条件操作符

    1. //1.if(a > 5)
    2. // b=3;
    3. // else
    4. // b=-3;
    5. //转换成条件表达式 (a > 5) ? (b = 3) : (b = -3);
    6. //简化成 b = (a > 5 ? 3 : -3);
    7. //2.使用条件表达式求两个数中较大值
    8. //int max = (a > b ? a : b);

    9.逗号表达式

     逗号表达式,就是用逗号隔开的多个表达式。从左向右依次执行,整个表达式的结果是最后一个表达式的结果。

    1. //代码1
    2. int a = 1;
    3. int b = 2;
    4. int c = (a>b, a=b+10, a, b=a+1);
    5. //代码2
    6. if(a=b+1, c=a/2, d>0)
    7. //代码3
    8. a = get_val();
    9. count_val(a);
    10. while (a > 0)
    11. {
    12.    //业务处理
    13.    a = get_val();
    14.    count_val(a);
    15. }
    16. //如果使用逗号表达式,改写:
    17. while (a = get_val(), count_val(a), a>0)
    18. {
    19.    //业务处理
    20. }

    10.下标引用,函数调用和结构成员

    1.[]  下标引用操作符

    操作数:一个数组名+一个索引值

    注:定义数组时数组的两个操作数不可以交换,访问时才可以。

    2.()  函数调用操作符

    接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数

    3.访问一个结构体成员

         .     结构体变量 . 成员名

        ->    结构体指针->成员名

    1. #include
    2. struct Stu
    3. {
    4. char name[20];
    5. int age;
    6. double score;
    7. };
    8. void set_stu(struct Stu* ps)
    9. {
    10. strcpy((*ps).name, "zhangsan");
    11. (*ps).age = 20;
    12. (*ps).score = 100.0;
    13. strcpy(ps->name, "zhangsan");
    14. ps->age = 20;
    15. ps->score = 100.0;
    16. }
    17. void print_stu(struct Stu* ps)
    18. {
    19. printf("%s %d %lf\n", ps->name, ps->age, ps->score);
    20. }
    21. int main()
    22. {
    23. struct Stu s = {0};
    24. set_stu(&s);//此处不可以传值调用
    25. print_stu(&s);
    26. return 0;
    27. }

    11.表达式求值

    表达式求值的顺序一部分是由操作符的优先级和结合性决定。同样,有些表达式的操作数在求值的过程中可能需要转化为其他类型。

    隐式类型转换:

    C的整型算术运算总是至少以缺省(默认)整型类型的精度来进行的。为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称之为整型提升。

    理解整型提升的口诀:存储是截断 截断的是补码 运算才是整型提升 

    整型提升的意义:

    表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节长度一般就是int的类型长度,同时也是CPU的通用寄存器的长度。因此即使两个char类型的数据相加,在CPU执行时实际上也要先转换为CPU内整型操作数的标准长度。通用CPU(general-purpose CPU) 是难以直接实现两个8比特位直接相加运算的(虽然机器指令中可能有这种字节相加指令)。所以表达式中各种可能小于int长度的整型值,都必须先转换为int或unsigned int,然后才能送入CPU去执行运算。

    1. //实例1
    2. char a,b,c;
    3. ...
    4. a = b + c;
    5. //b和c的值被提升为普通整型,然后再执行加法运算。
    6. //加法运算完成之后,结果将被截断,然后再存储于a中。

    如何进行整型提升?

    整型提升是按照变量的数据类型的符号位来提升的

    1. //1.负数的整形提升
    2. //char c1 = -1;
    3. //变量c1的二进制位(补码)中只有8个比特位:
    4. //1111111
    5. //因为 char 为有符号的 char
    6. //所以整形提升的时候,高位补充符号位,即为1
    7. //提升之后的结果是:
    8. //11111111111111111111111111111111
    9. //2.正数的整形提升
    10. //char c2 = 1;
    11. //变量c2的二进制位(补码)中只有8个比特位:
    12. //00000001
    13. //因为 char 为有符号的 char
    14. //所以整形提升的时候,高位补充符号位,即为0
    15. //提升之后的结果是:
    16. //00000000000000000000000000000001
    17. //3.无符号整形提升,高位补0
    18. //注:整型提升操作的是补码,最终结果变原码,整型提升补1还是补0看的是符号位

    整型提升的例子:

    1. //实例1
    2. int main()
    3. {
    4. char a = 0xb6;
    5. short b = 0xb600;
    6. int c = 0xb6000000;
    7. if(a==0xb6)
    8. printf("a");
    9. if(b==0xb600)
    10. printf("b");
    11. if(c==0xb6000000)
    12. printf("c");
    13. return 0;
    14. }
    15. //实例1中的a,b要进行整形提升,但是c不需要整形提升
    16. //a,b整形提升之后,变成了负数,所以表达式 a==0xb6 , b==0xb600 的结果是假,但是c不发生整形提升,则表
    17. //达式 c==0xb6000000 的结果是真.
    18. //所程序输出的结果是:c(改成无符号类型 a,b,c全输出)
    19. //实例2
    20. int main()
    21. {
    22. char c = 1;
    23. printf("%u\n", sizeof(c));
    24. printf("%u\n", sizeof(+c));
    25. printf("%u\n", sizeof(-c));
    26. return 0;
    27. }
    28. //实例2中的,c只要参与表达式运算,就会发生整形提升,表达式 +c ,就会发生提升,所以 sizeof(+c) 是4个字节.表达式 -c 也会发生整形提升,所以 sizeof(-c) 是4个字节,但是 sizeof(c) ,就是1个字节

     

    算术转换

    如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数转换为另一个操作数的类型,否则操作就无法进行。下面的层次体系称为寻常算术转换

    如果某个操作数的类型在上面这个列表中排名较低,那么首先要转换为另外一个操作数的类型后执行运算。

    注:算术转换只是类型发生了变化,原反补码该是什么还是什么

    注:printf %u打印的是无符号数,认为内存中(补码)存的是无符号数,原反补相同(无符号数的原码反码补码相同)

    一道经典算术转换题目

    1. //下列代码的输出结果:
    2. #include
    3. int i;
    4. int main()
    5. {
    6. i--;
    7. if (i > sizeof(i))
    8. {
    9. printf(">\n");
    10. }
    11. else
    12. {
    13. printf("<\n");
    14. }
    15. return 0;
    16. }
    17. //程序运行结果是:>
    18. //sizeof这个操作符计算返回值类型是size_t类型的 当有符号数和无符号数进行比较会进行算术转换
    19. //有符号数提升为无符号数 是一个非常大的正数 输出大于号
    20. //只要是表达式 有不同类型的数据 最终一定会进行转换 类型大小小于整型进行整型提升
    21. //类型大小大于整型进行算术转换
    警告: 但是算术转换要合理,要不然会有一些潜在的问题
    1. float f = 3.14;
    2. int num = f;//隐式转换,会有精度丢失

    操作符的属性:

    复杂表达式的求值有三个影响因素:

    1.操作符的优先级 2.操作符的结合性 3.是否控制求值顺序

    两个相邻的操作符先执行哪个取决于他们的优先级。如果两者的优先级相同,取决于他们的结合性

    一些问题表达式:
    1. //表达式1 a*b + c*d + e*f
    2. //注释:代码1在计算的时候,由于*比+的优先级高,只能保证,*的计算是比+早,但是优先级并不
    3. //能决定第三个*比第一个+早执行。
    4. //1.a*b 2.c*d 3.a*b + c*d 4.e*f 5.a*b + c*d + e*f
    5. //或者
    6. //1.a*b 2.c*d 3.e*f 4.a*b + c*d 5.a*b + c*d + e*f
    7. //表达式2 c + --c;
    8. //注释:同上,操作符的优先级只能决定自减--的运算在+的运算的前面,但是我们并没有办法得
    9. //知,+操作符的左操作数(c)的获取在右操作数(--c)之前还是之后求值,所以结果是不可预测的
    10. //表达式3
    11. int fun()
    12. {
    13.     static int count = 1;
    14.     return ++count;
    15. }
    16. int main()
    17. {
    18.     int answer;
    19.     answer = fun() - fun() * fun();
    20.     printf( "%d\n", answer);
    21.     return 0;
    22. }
    23. //answer = fun() - fun() * fun();
    24. //我们只能通过操作符的优先级得知:
    25. //先算乘法,再算减法。函数的调用先后顺序无法通过操作符的优先级确定。

    C语言编程训练(牛客网)

    BC38——变种水仙花数

    1. #include
    2. #include
    3. int main()
    4. {
    5. int i = 0;
    6. for (i = 10000; i <= 99999; i++)
    7. {
    8. int j = 0;
    9. int sum = 0;
    10. for (j = 1; j <= 4; j++)
    11. {
    12. int k = (i / (int)pow(10, j)) * (i % (int)pow(10, j));
    13. sum += k;
    14. }
    15. if (sum == i)
    16. printf("%d ", i);
    17. }
    18. return 0;
    19. }
    20. int main()
    21. {
    22. int i = 0;
    23. for (i = 10000; i <= 99999; i++)
    24. {
    25. int j = 0;
    26. int sum = 0;
    27. for (j = 1; j <= 4; j++)
    28. {
    29. int k = (int)pow(10, j);
    30. sum += (i%k)*(i/k);
    31. }
    32. if (sum == i)
    33. printf("%d ", i);
    34. }
    35. return 0;
    36. }

    BC45——最高分数

    1. int main()
    2. {
    3. int i = 0;
    4. int max = 0;
    5. int score = 0;
    6. for (i = 0; i < 3; i++)
    7. {
    8. scanf("%d", &score);
    9. if (score > max)
    10. max = score;
    11. }
    12. printf("%d\n", max);
    13. return 0;
    14. }

    BC47——判断是不是字母

    1. //代码1
    2. int main()
    3. {
    4. char ch = 0;
    5. while (scanf("%c", &ch) != EOF)
    6. {
    7. if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z')))
    8. printf("%c is an alphabet.\n",ch);
    9. else
    10. printf("%c is not an alphabet.\n",ch);
    11. getchar();
    12. }
    13. return 0;
    14. }
    15. //%c的前面加空格 跳过下一个字符之前的所有空白字符
    16. //代码2
    17. int main()
    18. {
    19. char ch = 0;
    20. while (scanf(" %c", &ch) != EOF)
    21. {
    22. if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z'))
    23. printf("%c is an alphabet.\n", ch);
    24. else
    25. printf("%c is not an alphabet.\n", ch);
    26. }
    27. return 0;
    28. }
    29. //代码3
    30. int main()
    31. {
    32. char ch = 0;
    33. while (scanf(" %c", &ch) != EOF)
    34. {
    35. if (isalpha(ch))
    36. printf("%c is an alphabet.\n", ch);
    37. else
    38. printf("%c is not an alphabet.\n", ch);
    39. }
    40. return 0;
    41. }

    BC48——字母大小写转换

    1. //代码1
    2. #include
    3. int main()
    4. {
    5. char ch = 0;
    6. while (scanf("%c", &ch) == 1)
    7. {
    8. if (ch >= 'a' && ch <= 'z')
    9. printf("%c\n", ch - 32);//数值溢出才会考虑整型提升
    10. else
    11. printf("%c\n", ch + 32);
    12. getchar();
    13. }
    14. return 0;
    15. }
    16. //代码2
    17. int main()
    18. {
    19. char ch = 0;
    20. while (scanf("%c", &ch) == 1)
    21. {
    22. if (ch >= 'a' && ch <= 'z')
    23. printf("%c\n", ch - 32);
    24. else if(ch>='A'&&ch<='Z')
    25. printf("%c\n",ch+32);
    26. }
    27. }
    28. //scanf读取成功返回的是读取的字符个数 读取失败返回EOF
    29. //代码3
    30. int main()
    31. {
    32. char ch = 0;
    33. while (scanf("%c", &ch) != EOF)
    34. {
    35. if (ch >= 'a' && ch <= 'z')
    36. printf("%c\n", ch - 32);
    37. else if(ch>='A'&&ch<='Z')
    38. printf("%c\n",ch+32);
    39. }
    40. }
    41. //代码4
    42. #include
    43. int main()
    44. {
    45. char ch = 0;
    46. while (scanf("%c", &ch) != EOF)
    47. {
    48. if (islower(ch))
    49. printf("%c\n", toupper(ch));
    50. else if(isupper(ch))
    51. printf("%c\n",tolower(ch));
    52. }
    53. }

    BC95——最高分和最低分之差

    1. int main()
    2. {
    3. int n = 0;
    4. scanf("%d", &n);
    5. int arr[n];
    6. int i = 0;
    7. for (i = 0; i < n; i++)
    8. {
    9. scanf("%d", &arr[i]);
    10. }
    11. int max = arr[0];
    12. for (i = 1; i < n; i++)
    13. {
    14. if (arr[i] > max)
    15. max = arr[i];
    16. }
    17. int min = arr[0];
    18. for (i = 1; i < n; i++)
    19. {
    20. if (arr[i] < min)
    21. min = arr[i];
    22. }
    23. printf("%d\n", max - min);
    24. return 0;
    25. }
    26. //优化1
    27. int main()
    28. {
    29. int n = 0;
    30. scanf("%d", &n);
    31. int arr[n];
    32. int i = 0;
    33. for (i = 0; i < n; i++)
    34. {
    35. scanf("%d", &arr[i]);
    36. }
    37. int max = arr[0];
    38. int min = arr[0];
    39. for (i = 1; i < n; i++)
    40. {
    41. if (arr[i] > max)
    42. max = arr[i];
    43. if (arr[i] < min)
    44. min = arr[i];
    45. }
    46. printf("%d\n", max - min);
    47. return 0;
    48. }
    49. //优化2
    50. int main()
    51. {
    52. int n = 0;
    53. scanf("%d", &n);
    54. int i = 0;
    55. int max = 0;
    56. int min = 100;
    57. int score = 0;
    58. for (i = 0; i < n; i++)
    59. {
    60. scanf("%d", &score);
    61. if (max < score)
    62. {
    63. max = score;
    64. }
    65. if(min > score)
    66. {
    67. min = score;
    68. }
    69. }
    70. printf("%d", max - min);
    71. return 0;
    72. }

    BC98——序列中删除指定数字

     

    1. int main()
    2. {
    3. int n = 0;
    4. scanf("%d", &n);
    5. int arr[n];
    6. int i = 0;
    7. for (i = 0; i < n; i++)
    8. {
    9. scanf("%d ", &arr[i]);
    10. }
    11. int del = 0;
    12. scanf("%d", &del);
    13. int j = 0;
    14. for (i = 0; i < n; i++)
    15. {
    16. if (arr[i] != del)
    17. {
    18. arr[j] = arr[i];
    19. j++;
    20. }
    21. }
    22. for (i = 0; i < j; i++)
    23. {
    24. printf("%d ", arr[i]);
    25. }
    26. return 0;
    27. }

     

    BC117——小乐乐走台阶

    1. #include
    2. int fib(int n)
    3. {
    4. if (n <= 2)
    5. return n;
    6. else
    7. return fib(n - 1) + fib(n - 2);
    8. }
    9. int main()
    10. {
    11. int n = 0;
    12. scanf("%d",&n);
    13. int m = fib(n);
    14. printf("%d\n", m);
    15. return 0;
    16. }

  • 相关阅读:
    AI是否有意识?科学家提出标准来寻找答案
    2.Tornado的优势
    CF515E Drazil and Park【思维+线段树】
    充分理清限制与条件+构造二分图+最小割:ARC142E
    腾讯配合监管机构:未经批准不得发布新应用或更新版本
    解读Vue3模板编译优化
    自动控制原理快速入门+理解
    《Python进阶系列》二十七:字符串类型代码的执行函数——eval()、exec()和compile()
    1553B环境搭建
    SpringBatch(9):ItemReader详解
  • 原文地址:https://blog.csdn.net/qq_66767938/article/details/127078510