C语言-习题整理(1)
1. 下面代码的结果:#include <stdio.h>
#include <string.h>
int main()
{
char arr[] = {'b', 'i', 't'};
printf("%d\n", strlen(arr));
return 0; tip:
strlen函数是用来检测字符串长度的,运行的原理就是从开始到'\0'竣事。
由于arr是字符串数组,存放了三个数组,结尾没有添加'\0',所以strlen的返回值我们无法确定。
2. 下面代码的结果:
#include <stdio.h>
#include <string.h>
int main()
{
printf("%d\n", strlen("c:\test\121"));
return 0;
} tip:
注意,有'\',所以会存在转义字符。
可以转移到我之前写过的关于转义字符的笔记:C语言的收获(4)-CSDN博客
所以,'\t','\121'都是转义字符,前者是程度制表符,后者是八进制的一个字符。
最终可知,结果为7
3.关于C语言算术操作符说法精确的是:
A.除号两边都是小数才能实行小数除法
B.%操作符的操作数可以是证书,也可以是小数
C.%操作符盘算的结果是两个操作数整除之后的商
D.负数求模的规则是,结果的正负号由第一个运算数的正负号决定
tip:
A.除号两边只要有一个是小数,就实行小数除法
B.%操作符的操作数只能是整数
C.%操作符盘算的结果是两个数整除之后的余数
所以选D
4.下面代码结果是:
#include <stdio.h>
int main()
{
int a, b, c;
a = 5;
c = ++a;
b = ++c, c++, ++a, a++;
b += a++ + c;
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.下面代码实行的结果是:
#include <stdio.h>
int main()
{
int i = 0;
for (i = 0; i<10; i++)
{
if (i = 5)
printf("%d ", i); tip:
注意,if语句中的"="作用是赋值,“==”的作用才是相称,所以每次循环到if语句后i都会被赋值为5
所以最终结果会是一直5的死循环。
7. 输入三个整数,从大到小输出
int main()
{
int a, b, c;
int i = 0;
scanf("%d %d %d", &a, &b, &c);
if (a < b)
{
i = b;
b = a;
a = i;
}
if (a < c)
{
i = c;
c = a;
a = i;
}
if (b < c)
{
i = c;
c = b;
b = i;
}
printf("%d %d %d", a, b, c);
return 0;
} 8.关于关系操作符说法错误的是:
A.C语言的关系操作符就是用来比力大小关系的
B.关系操作符中判断是否相称利用==从
C.==操作符可以用来比力2个字符串是否相称
D.关系操作符参与的关系表达式,通常返回0或者1,表示真假
tip:
C.字符串的比力必要用strcmp,==比力祖父穿比力的是字符串的首元素地址
9.下面代码的实行结果是什么:
#include <stdio.h>
int main() {
int x = 3;
int y = 3;
switch (x % 2) {
case 1:
switch (y)
{
case 0:
printf("first");
case 1:
printf("second");
break;
default: printf("hello");
}
case 2:
printf("third");
}
return 0;
} tip:
注意,case1语句竣事的时候并没有利用break跳出,所以switch循环并没有在case1完成后竣事,而是继承往下实行,所以case2的语句也会被实行,末了结果是hellothird。
10.求最大值
求10个整数中的最大值
精确代码:
int main()
{
int arr = {0};
int i = 0;
int max = 0;
for(i=0; i<10; i++)
{
scanf("%d", &arr);
}
//
max = arr;
for(i=1; i<10; i++)
{
if(arr>max)
max = arr;
}
printf("max = %d\n", max);
return 0;
}
tip:
&arr表示下标为i的数组中对应元素的地址;
&arr表示数组的地址,&arr表示数组首元素的地址。
max是用来放元素最大值的int数,先放首元素,然后挨个比力,替换大的。
11.分数求和
盘算1/1-1/2+1/3-1/4......+1/99-1/100的值
精确代码:
int main()
{
int i = 0;
int flag = 1;
double end = 0;
for (i = 1; i <= 100; i++)
{
end += flag * 1.0 / i;
flag = -flag;
}
printf("%lf\n", end);
return 0;
} tip:
注意end+=flag*1.0/i这条代码
其中1.0是为了使得式子不是整除,而是正常的除法
其次flag是决定正负数的标识
末了是+=的复合赋值符,是end=end+某个数,正好可以举行叠加的加法
12.最大公约数
给定两个数,求这两个数的最大公约数
int main()
{
int a = 18;
int b = 24;
int c = 0;
while(c=a%b)
{
a = b;
b = c;
}
printf("%d\n", b);
return 0;
} tip:
求最大公约数有许多中方法,上述代码是用辗转相除法
while函数中的c=a%b是为了找到最大公约数,直到该式子结果为0才能判定b为最大公约数
13.关于一维数组描述不精确的是:
A.数组的下标是从0开始
B.数组在内存中是一连存放的
C.数组名表示首元素的地址
D.随着数组下标的由小到大,地址由高到低
tip:
D.内存的存放由系统决定,一般都是下标由小到大,地址由低到高。
14.下面代码的结果是:
#include <stdio.h>
int main()
{
int arr[] = {1,2,(3,4),5};
printf("%d\n", sizeof(arr));
return 0;
} tip:
(3,4)是逗号表达式,所以数组arr中的元素分别是1,2,4,5.
所以sizeof是算整个数组所占空间的大小,就是4*4=16.
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]