IT评测·应用市场-qidao123.com技术社区

标题: C语言-习题整理(1) [打印本页]

作者: 种地    时间: 2025-4-16 18:26
标题: C语言-习题整理(1)
1. 下面代码的结果:

  1. #include <stdio.h>
  2. #include <string.h>
  3. int main()
  4. {
  5.     char arr[] = {'b', 'i', 't'};
  6.     printf("%d\n", strlen(arr));
  7.         return 0;
复制代码
tip:
strlen函数是用来检测字符串长度的,运行的原理就是从开始到'\0'竣事。
由于arr是字符串数组,存放了三个数组,结尾没有添加'\0',所以strlen的返回值我们无法确定。
2. 下面代码的结果:

  1. #include <stdio.h>
  2. #include <string.h>
  3. int main()
  4. {
  5.     printf("%d\n", strlen("c:\test\121"));
  6.     return 0;
  7. }
复制代码
tip:
注意,有'\',所以会存在转义字符。
可以转移到我之前写过的关于转义字符的笔记:C语言的收获(4)-CSDN博客
所以,'\t','\121'都是转义字符,前者是程度制表符,后者是八进制的一个字符。
最终可知,结果为7
3.关于C语言算术操作符说法精确的是:

A.除号两边都是小数才能实行小数除法
B.%操作符的操作数可以是证书,也可以是小数
C.%操作符盘算的结果是两个操作数整除之后的商
D.负数求模的规则是,结果的正负号由第一个运算数的正负号决定
tip:
A.除号两边只要有一个是小数,就实行小数除法
B.%操作符的操作数只能是整数
C.%操作符盘算的结果是两个数整除之后的余数
所以选D
4.下面代码结果是:

  1. #include <stdio.h>
  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);
复制代码
tip:
此题是关于单目运算符的知识。
c=++a;是前置++,意思是先将a+1,然后再将值赋予c。a=6,c=6。
b=++c,c++,++a,a++。所以c+1,b=c,c+1,a+1,a+1。结果:b=7,c=8,a=8。
b+=a++ +c ; 是b=b+a+c,a+1。结果:a=9,b=23,c=8。
5.关于if语句说法精确的是:

A.if语句后面只能跟一条语句
B.if语句中0表示假,1表示真
C.if语句是一种分支语句,可以实现单分支,也可以实现多分支
D.else语句总是和它的对齐的if语句匹配
tip:
A.if语句后面可以跟多个语句,但是必要加{},将多个语句包含其中
B.if语句中,0表示假,非零表示真
D.else语句不一定,要看具体的代码,如果不规范可能就没有对齐
6.下面代码实行的结果是:

  1. #include <stdio.h>
  2. int main()
  3. {
  4.         int i = 0;
  5.         for (i = 0; i<10; i++)
  6.         {
  7.                 if (i = 5)
  8.                         printf("%d ", i);
复制代码
tip:
注意,if语句中的"="作用是赋值,“==”的作用才是相称,所以每次循环到if语句后i都会被赋值为5
所以最终结果会是一直5的死循环。
7. 输入三个整数,从大到小输出

  1. int main()
  2. {
  3.         int a, b, c;
  4.         int i = 0;
  5.         scanf("%d %d %d", &a, &b, &c);
  6.         if (a < b)
  7.         {
  8.                 i = b;
  9.                 b = a;
  10.                 a = i;
  11.         }
  12.         if (a < c)
  13.         {
  14.                 i = c;
  15.                 c = a;
  16.                 a = i;
  17.         }
  18.         if (b < c)
  19.         {
  20.                 i = c;
  21.                 c = b;
  22.                 b = i;
  23.         }
  24.         printf("%d %d %d", a, b, c);
  25.         return 0;
  26. }
复制代码
8.关于关系操作符说法错误的是:

A.C语言的关系操作符就是用来比力大小关系的
B.关系操作符中判断是否相称利用==从
C.==操作符可以用来比力2个字符串是否相称
D.关系操作符参与的关系表达式,通常返回0或者1,表示真假
tip:
C.字符串的比力必要用strcmp,==比力祖父穿比力的是字符串的首元素地址
9.下面代码的实行结果是什么:

  1.   #include <stdio.h>
  2.   int main() {
  3.           int x = 3;
  4.           int y = 3;
  5.           switch (x % 2) {  
  6.           case 1:
  7.                   switch (y)  
  8.                   {
  9.                   case 0:
  10.                           printf("first");
  11.                   case 1:
  12.                           printf("second");
  13.                           break;
  14.                   default: printf("hello");
  15.                   }            
  16.           case 2:            
  17.                   printf("third");      
  18.           }
  19.           return 0;
  20.   }
复制代码
tip:
注意,case1语句竣事的时候并没有利用break跳出,所以switch循环并没有在case1完成后竣事,而是继承往下实行,所以case2的语句也会被实行,末了结果是hellothird。
10.求最大值

求10个整数中的最大值
精确代码:
  1. int main()
  2. {
  3.         int arr[10] = {0};
  4.         int i = 0;
  5.         int max = 0;
  6.         for(i=0; i<10; i++)
  7.         {
  8.                 scanf("%d", &arr[i]);
  9.         }
  10.         //
  11.         max = arr[0];
  12.         for(i=1; i<10; i++)
  13.         {
  14.                 if(arr[i]>max)
  15.                         max = arr[i];
  16.         }
  17.         printf("max = %d\n", max);
  18.         return 0;
  19. }
复制代码
tip:
&arr表示下标为i的数组中对应元素的地址;
&arr表示数组的地址,&arr[0]表示数组首元素的地址。
max是用来放元素最大值的int数,先放首元素,然后挨个比力,替换大的。
11.分数求和

盘算1/1-1/2+1/3-1/4......+1/99-1/100的值
精确代码:
  1. int main()
  2. {
  3.         int i = 0;
  4.         int flag = 1;
  5.         double end = 0;
  6.         for (i = 1; i <= 100; i++)
  7.         {
  8.                 end += flag * 1.0 / i;
  9.                 flag = -flag;
  10.         }
  11.         printf("%lf\n", end);
  12.         return 0;
  13. }
复制代码
tip:
注意end+=flag*1.0/i这条代码
其中1.0是为了使得式子不是整除,而是正常的除法
其次flag是决定正负数的标识
末了是+=的复合赋值符,是end=end+某个数,正好可以举行叠加的加法
12.最大公约数

给定两个数,求这两个数的最大公约数
  1. int main()
  2. {
  3.         int a = 18;
  4.         int b = 24;
  5.         int c = 0;
  6.         while(c=a%b)
  7.         {
  8.                 a = b;
  9.                 b = c;
  10.         }
  11.         printf("%d\n", b);
  12.         return 0;
  13. }
复制代码
tip: 
求最大公约数有许多中方法,上述代码是用辗转相除法
while函数中的c=a%b是为了找到最大公约数,直到该式子结果为0才能判定b为最大公约数
13.关于一维数组描述不精确的是:

A.数组的下标是从0开始
B.数组在内存中是一连存放的
C.数组名表示首元素的地址
D.随着数组下标的由小到大,地址由高到低
tip:
D.内存的存放由系统决定,一般都是下标由小到大,地址由低到高。
14.下面代码的结果是:

  1. #include <stdio.h>
  2. int main()
  3. {
  4.     int arr[] = {1,2,(3,4),5};
  5.     printf("%d\n", sizeof(arr));
  6.     return 0;
  7. }
复制代码
tip:
(3,4)是逗号表达式,所以数组arr中的元素分别是1,2,4,5.
所以sizeof是算整个数组所占空间的大小,就是4*4=16.





免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4