c语言习题.docx
- 文档编号:12213840
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:34
- 大小:25.52KB
c语言习题.docx
《c语言习题.docx》由会员分享,可在线阅读,更多相关《c语言习题.docx(34页珍藏版)》请在冰豆网上搜索。
c语言习题
1.C语言中,int型数据在计算机内部是由()表示的。
答:
int型数据在计算机内部是由16位补码表示的。
2.下列可以作为C语言用户标识符的是()。
A)_123B)a1b2c3C)intD)123abc
答:
A)和B)
C语言标识符必须是以英文字母(a到z)、或者下划线_开头的字符串。
字符串中只能包含英文字母、下划线和数字(0到9)。
但字符串不能是C语言中的32个保留字(例如int,short,long,unsigned,float,char,if,switch,for,while等)。
3.在C语言中,如果下面的变量都是int类型,则输出的结果是()。
sum=pad=5,pAd=sum++,pAd++,++pAd;
printf("%d\n",pad);
答:
输出结果是5。
因为C语言是字母大小写敏感的,也就是说区分大小写字母。
pad和pAd是两个不同的变量。
4.以下程序的输出结果是()。
#include<>
main()
{
printf("%d\n",NULL);
}
答:
0
因为头文件中NULL的定义如下:
#defineNULL0
5.下面程序的输出是()。
main()
{intx=10,y=3;
printf("%d\n",y=x/y);
}
答:
3
因为两个同类型的数据作算术运算,其结果仍为该类型。
即整数除以整数,商仍为整数。
10/3的商为3。
6.下面程序的输出是()。
main()
{intx=023;
printf("%d\n",--x);
}
答:
18
因为023是一个八进制数,表达式--x的值为022,按照%d带符号的十进制数输出,结果为18。
注意:
023是八进制数;23是十进制数;0x23是十六进制数。
7.在C语言中,不正确的int类型的常数是()。
A)32768B)0C)037D)0xAF
答:
A)
8.执行下面程序中的输出语句后a的值是()。
main()
{inta;
printf("%d\n",(a=3*5,a*4,a+5));
}
答:
15
因为在计算逗号表达式a=3*5,a*4,a+5时,依次计算下面3个表达式:
a=3*5(结果变量a的值为15,该赋值表达式的值也为15)
a*4(该算术表达式的值为60)
a+5(该算术表达式的值为20,输出函数printf输出20)
逗号表达式的值为20,但变量a的值认为15。
9.以下程序的输出结果是()。
#include<>
main()
{inta=2,c=5;
printf("a=%%d,b=%%d\n",a,c);
}
A)a=%2,b=%5B)a=2,b=5C)a=%%d,b=%%dD)a=%d,b=%d
答:
D)
因为%%是格式说明符,输出%,其它原样输出。
如果输出函数语句改成printf("a=%%%d,b=%%%d\n",a,c);,那么输出结果为A)。
10.以下程序的输出结果是()。
#include<>
main()
{inta,b,d=241;
a=d/100%9;
b=(-1)&&(-1);
printf("%d,%d\n",a,b);
}
A)6,1B)2,1C)6,0D)2,0
答:
B)
241/100的值为2,2%9的值为2。
(-1)&&(-1)的值为1。
在逻辑运算中,非0的值为真,真“与”真结果为真,关系和逻辑运算的结果如果为真用“1”表示,如果为假用“0”表示。
11.请选出以下语句的输出结果()。
printf("%d\n",strlen("\t\"\065\xff\n"));
答:
5
函数strlen的功能是计算字符串长度。
那么字符串"\t\"\065\xff\n"包含多少个字符呢
\t是横向跳格字符;\”是字符”;\065是ASCII码值为八进制数065的字符;\xff是ASCII码值为十六进制数0xff的字符;\n是换行字符。
该字符串共有5个字符。
注意:
记住常用的转义字符。
12.下面程序的输出结果是()。
inti=65536;
printf("%d\n",i);
答:
-1
因为int型变量i在C语言中是用16位补码表示的,而65535变成二进制数为111,因此i的值为111,按照带符号的十进制数%d输出-1,因为111是-1的补码。
13.若有说明和语句:
inta=5;
a++;
此处表达式a++的值是()。
答:
5
表达式a++的值是5表达式计算后,变量a的值是6。
14.若k为int变量,则以下语句()。
k=8567;
printf("|%-06d|\n",k);
答:
|8567|
两个|原样输出,格式符%-06d说明输出变量k的值长度为6且左对齐。
15.若x为float型变量,则以下语句()。
x=;
printf("%-4.2f\n",x);
答:
16.若x为double变量,则以下语句()。
x=;
printf("%\n",x);
答:
+02
17.若ch为char型变量,k为int型变量(已知字符a的ASCII十进制代码为97),则执行下列语句
ch='a';
k=12;
printf("%x,%o,",ch,ch,k);
printf("k=%%d\n",k);
输出为()。
答:
61,141,k=%d
18.若有以下定义:
chars=’\092’;
则该语句()。
A).使s的值包含1个字符
B).定义不合法,s的值不确定
C).使s的值包含4个字符
D).使s的值包含3个字符
答:
B)
因为字符’\092’中的092应该是八进制数,但八进制数中不可能出现9。
19.执行以下语句后,输出结果是()。
inta=1;
printf("%d,%d",a,a++);
答:
2,1
因为C语言中函数的实参计算顺序是从右至左。
即首先计算a++,然后计算a。
20.以下程序的输出结果是()。
#include<>
main()
{
inti=010,j=10;
printf("%d,%d\n",++i,j--);
}
A)11,10B)9,10C)010,9D)10,9
答:
B)
010是八进制数。
21.已知字母A的ASCII码为65,以下程序的输出结果是()。
#include<>
main()
{
charc1='A',c2='Y';
printf("%d,%d\n",c1,c2);
}
答:
65,89
22.以下语句
inta=110,b=017;
printf("%x,%d\n",a++,++b);
输出结果是()
答:
6e,16
110的十六进制数为6e,八进制数017加1为020,等于十进制数16。
23.以下程序
main()
{inti=3,j=2,a,b,c;
a=(--i==j++)--i:
++j;
b=i++;
c=j;
printf("%d,%d,%d\n",a,b,c);
}
输出结果是()
答:
1,1,3
24.请读程序
#include<>
main()
{
inta;floatb,c;
scanf("%2d%3f%4f",&a,&b,&c);
printf("\na=%d,b=%f,c=%f",a,b,c);
}
若运行时从键盘上输入10
答:
a=98,b=,c=
25.请读程序片段(字符串内没有空格字符):
printf("%d\n",strlen("AST\n012\1\\"));
上面程序的输出结果是()。
答:
9
字符串中包含9个字符,分别是AST\n012\1\\。
26.以下程序的输出结果是()
main()
{inti=-1;
printf("%d,%u\n",i,i);
}
答:
-1,65535
1.判断型char变量c1是否为小写字母的正确表达式为()。
A)'a'<=c1<='z'
B)(c1>=a)&&(c1<=z)
C)('a'>=c1)||('z'>=c1)
D)(c1>='a')&&(c1<='z')
答:
D)
2.程序的运行结果是()。
main()
{
inta=1,b=2,c=3,d=4,m=2,n=2;
(m=a>b)&&(n=c>d);
printf("%d",n);
}
答:
2
首先计算m=a>b,因为关系运算符>优先级高于赋值运算符=,a>b的结果为假(0),赋值后m的值为0。
因为C语言计算逻辑表达式0&&(n=c>d)时,已经知道结果为0,因此n=c>d就不计算了。
N的值仍为2。
3.执行以下语句后a的值为();b的值为()。
inta,b,c;
a=b=c=1;
++a||++b&&++c;
答:
a的值为2;b的值为1。
4.程序的运行结果是()。
main()
{
intx=10,y=20,z=30;
if(x>y)
z=x;x=y;y=z;
printf("%d,%d,%d",x,y,z);
}
答:
20,30,30
因为if(x>y)
z=x;x=y;y=z;
是三条语句,即:
if(x>y)z=x;
x=y;
y=z;
而不是:
if(x>y)
{z=x;x=y;y=z;}
5.程序的运行结果是()。
main()
{
intm=5;
if(m++>5)printf("%d\n",m);
elseprintf("%d\n",m--);
}
答:
6
因为表达式m++>5的值为假,m的值为6,执行语句printf("%d\n",m--);时输出6,m的值又变为5。
6.程序的运行结果是()。
main()
{
inta=100,x=10,y=20,m=5,n=0;
if(x if(y! =m) a=1; else if(n)a=10; a=-1; printf("%d\n",a); } 答: -1 在if嵌套中,else总是与它上面最近的if结合,因此本程序变为: if(x {if(y! =m) a=1; else if(n)a=10; } a=-1; 最后变量a的值为-1。 7.若有条件表达式(exp)a++: b--;则以下表达式中能完全等价于 表达式(exp)的是() A)(exp==0)B)(exp! =0) C)(exp==1)d)(exp! =1) 答: B) 因为表达式(exp)的意义是: 当变量exp的值为0时表示假;当变量exp的值为非0时表示真。 因此它与(exp! =0)等价。 8.程序的运行结果是()。 main() { intk=4,a=3,b=2,c=1; printf("%d\n",k c a); } 答: 1 因为运算符的结合性是自右至左。 因此首先计算c a,结果为1,然后计算k 1,结果仍为1。 9.已知A=,B=2,C=,表达式 A>B&&C>A||! A C>B的值是()。 答: 0 10.当m=2,n=1,a=1,b=2,c=3时,执行完 d=(m=a! =b)&&(n=b>c)后,n=(),m=()。 答: n=0,m=1 因为首先计算关系运算a! =b,结果为真即1,再计算赋值运算m=1;再计算b>c,结果为假即0,赋值n=0;最后d的值为假即0。 11.程序的运行结果是()。 main() { intx,y,z; x=1;y=2;z=3; x=y--<=x||x+y! =z; printf("%d,%d",x,y); } 答: 1,1 因为关系运算符优先级高于逻辑运算符,因此首先计算y--<=x,结果表达式的值为假(0),y的值为1;再计算x+y! =z,结果为真 (1),x的值为真 (1)。 12.以下程序 main() { inti=0,j=0,k=6; if((++i>0)||(++j>0))k++; printf(”%d,%d,%d\n”,i,j,k); } 输出结果是() 答: 1,0,7 首先计算++i>0,结果表达式的值为真,变量i的值为1。 在计算1||(++j>0)时,因为结果为真 (1),C语言不再计算表达式(++j>0)了。 因为if()中的逻辑表达式值为真,因此计算k++,结果k值7。 13.程序的运行结果是()。 main() { inta=2,b=7,c=5; switch(a>0) {case1: switch(b<0) {case1: printf("@");break; case2: printf("! ");break; } case0: switch(c==5) {case0: printf("*");break; case1: printf("#");break; default: printf("");break; } default: printf("&"); }printf("\n"); } 答: #& 因为表达式a>0的值为真 (1),计算case1: 后面的语句 switch(b<0) {case1: printf("@");break; case2: printf("! ");break; } 由于表达式b<0的值为假(0),因此本语句执行结束。 又由于本语句后面无break语句,因此继续执行 switch(c==5) {case0: printf("*");break; case1: printf("#");break; default: printf("");break; } 结果输出#,由于上面的语句后面也无break语句,因此继续执行语句 printf("&"); 输出&。 14.下面程序的输出是()。 main() {inta=-1,b=4,k; k=(a++<=0)&&(! (b--<=0)); printf("%d%d%d\n",k,a,b); } 答: 103 关系表达式a++<=0的值为真(即1),因为首先判断-1<=0,然后执行a++,变量a的值为0; 关系表达式! (b--<=0)的值为真(即1),因为首先判断4<=0,然后执行b--,变量b的值为3,最后执行逻辑非运算! ; 逻辑表达式(a++<=0)&&(! (b--<=0))的值为真(即1),执行赋值运算后,变量k的值为1。 15.下面的程序片段所表示的数学函数关系是()。 y=-1; if(x! =0) if(x>0)y=1; elsey=0; A)y=-1(x<0)B)y=1(x<0)C)y=0(x<0)D)y=-1(x<0) 0(x=0)-1(x=0)-1(x=0)1(x=0) 1(x>0)0(x>0)1(x>0)0(x>0) 答: C) 16.下面程序的输出是()。 main() {intx=100,a=10,b=20,ok1=5,ok2=0; if(a if(b! =15) if(! ok1) x=1; else if(ok2)x=10; x=-1; printf("%\n",x); } A)-1B)0C)1D)下面定的值 答: A) 因为语句x=-1;并不在if语句之中。 17.与y=(x>01: x<0-1: 0)功能相同的if语句是()。 a)if(x>0)y=1;b)if(x) elseif(x<0)y=-1;if(x>0)y=1; elsey=0;elsey=-1; c)y=-1;d)y=0; if(x)if(x>0) if(x>0)y=1;if(x>0)y=1; elseif(x==0)y=0;elsey=-1; elsey=-1; 答: A) 18.设a=6,b=-8,c=3,以下逻辑表达式的值为()。 'd'&&(a>b)&&(b>c)&&(a-c) 答: 0 19.若执行下面的程序时从键盘上输入3和4,则输出是()。 main() {inta,b,s; scanf("%d%d",&a,&b); s=a; if(a s=s*s; printf("%d\n",s); } 答: 16 20.下面的程序 main() {intx=3,y=0,z=0; if(x=y+z)printf("****"); elseprintf("####"); 答: #### 21.两次运行下面的程序,如果从键盘上分别输入6和4,则输出的结果是()。 main() {intx; scanf("%d",&x); if(x++>5)printf("%d",x); elseprintf("%d\n",x--); } 答: 75 22.假定所有变量均已正确说明,下列程序段运行后x值是()。 a=b=c=0;x=35; if(! a)x--; elseif(b);if(c)x=3; elsex=4; 答: 4 该程序: a=b=c=0; x=35; if(! a)x--;elseif(b); if(c)x=3;elsex=4; 23.以下两条if语句合并成一条if语句为()。 if(a<=b)x=1; elsey=2; if(a>b)printf("****y=%d\n",y); elseprintf("####x=%d\n",x); 答: if(a<=b){x=1; printf("####x=%d\n",x); } else{y=2; printf("****y=%d\n",y); } 1.下面程序段的运行结果是()。 x=y=0; while(x<15)y++,x+=++y; printf("%d,%d",y,x); 答: 8,20 y++,x+=++y;是一个逗号表达式语句,首先计算y++,然后计算x+=++y。 2.程序的运行结果是()。 #include<> main() { intc=0; while(c<=2) {c++; printf("%d\n",c); } } 答: 1 2 3 3.输入2473 #include<> main() { intc; while((c=getchar())! ='\n') switch(c-'2') {case0: case1: putchar(c+4); case2: putchar(c+4);break; case3: putchar(c+3); default: putchar(c+2);break; } printf("\n"); } 答: 668977 第一次函数getchar()从键盘读取字符2,变量c的值为字符2,因此c-'2'的值为0,执行case0: 后面的语句putchar(c+4);和putchar(c+4);执行break;语句后,switch语句执行结束。 此次输出字符66。 4.下面程序段输出结果为()。 intx=3; do{printf("%d\n",x-=2);}while(! (--x)); 答: 1 -2 5.不是无限循环的语句为()。 A)for(y=0,x=1;x>++y;x=i++)i=x; B)for(;;x++=i); C)while (1){x++;} D)for(i=10;;i--)sum+=i; 答: A) 6.下面程序段的运行结果是()。 for(y=1;y<10;)y=((x=3*y,x+1),x-1); printf("x=%d,y=%d",x,y); 答: x=15,y=14 执行完第1次循环后x=3y=2 执行完第2次循环后x=6y=5 执行完第3次循环后x=15y=14 7.程序的运行结果是()。 #include<> main() { inta,b; for(a=1,b=1;a<=100;a++) {if(b>=20)break; if(b%3==1){b+=3;continue;} b-=5; } printf("%d\n",a); } 答: 8 8.下面程序段不是无限循环的是()。 A)inti=100; while (1) {i=i%100+1; if(i>100)break; } B)for(;;); C)intk=0; do{++k;}while(k>=0); D)ints=36; while(s);--s; 答: C) i值只能是从1到100之间变化,i>100永远是假,因此break永远也不会被执行。 for循环语句的第2个表达式没有,意味着永远为真。 每次循环k的值加1,当k的值为32767时,再执行++k,k的值变为-32768,循环结束。 因为语句—s并不在循环中,while(s);永远执行一个空语句。 9.下面程序段()。 x=3; do{y=x--; if(! y){printf("*");continue;} printf("#"); }while(1<=x<=2); A)输出##B)输出##* C)无限循环D)含有不合法的控制表达式 答: C) 第一次循环执行y=x--;后x和y的值分别为2和3,因此输出1个#。 执行1<=x<=2时由于逻辑运算符<=的结合性是从左至右,因此首先计算1<=x,结果为真(即1),然后计算1<=2,结果仍为真,再次执行循环。 可以看出无论1<=x为真(即1)或者为假(即0),1<=x<=2的值始终为真,因此循环为无限循环。 10.程序的运行结果是()。 #include<> main() {intk=0;charc='A'; do{switch(c++) {case'A': k++;break; case'B': k--; case'C': k+=2;break; case'D': k=k%2;continue; case'E': k=k*10;break; default: k=k/3; } k++; }while(c<'G'); printf("k=%d\n",k); } 答: k=4 第1次循环执行前c=’A’,k=0,循环执行后c=’B’,k=2 第2次循环执行后c=’C’,k=4 第3次循环执行后c=’D’,k=7 第4次循环执行后c=’E’,k=1 第5
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 习题