C语言习题及答案评析Word文件下载.docx
《C语言习题及答案评析Word文件下载.docx》由会员分享,可在线阅读,更多相关《C语言习题及答案评析Word文件下载.docx(46页珍藏版)》请在冰点文库上搜索。
___作为语句的结束标志。
第二章基本数据类型
1.以下选项中属于C语言的数据类型是()
A.复数型B.逻辑型C.双精度型D.集合型
C语言中基本数据类型有四种:
整形、单精度型、双精度型、字符型。
2.在C语言中,不正确的int类型的常数是()
A.32768B.0C.037D.0xAF
A注解:
注意int类型数据的表示范围为-32768~32767(十进制),选项C为八进制数表示,选项D为十六进制数表示。
3.设有说明语句:
chara='
\72'
;
则变量a()
A.包含1个字符B.包含2个字符C.包含3个字符D.说明不合法
将转义字符\72的表示的字符赋给变量a,所以a包含一个字符。
4.以下选项中合法的字符常量是()
A."B"B.'
\010'
C.-268D.D
A为字符串,C为整型常量,D不是C语言的合法字符,字符要有单引号。
【题2.2】若x、i、j和k都是int型变量,则执行下面表达式后x的值为 。
x=(i=4,j=16,k=32)A)4B)16C)32D)52
【题2.3】假设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值是 。
A)7B)8C)6D)2
【题2.8】下面正确的字符常量是 。
A)“c”B)‘\\’’C)‘W’D)‘’
【题2.10】下面不正确的字符串常量是 。
A)‘abc’B)“12’12”C)“0”D)“ ”
【题2.11】若有代数式
,则不正确的C语言表达式是 。
A)a/b/c*e*3B)3*a*e/b/cC)3*a*e/b*cD)a*e/c/b*3
【题2.14】已知字母A的ASCII码为十进制数65,且c2为字符型,则执行语句c2=‘A’+‘6’-‘3’;
后,c2中的值为 。
A)DB)68C)不确定的值D)C
【题2.15】在C语言中,要求运算数必须是整型的运算符是 。
A)/B)++C)!
=D)%
【题2.16】若以下变量均是整型,且num=sum=7;
则执行表达式sUM=num++,sUM++,++num后sum的值为 。
A)7B)8C)9D)10
【题2.17】在C语言中,char型数据在内存中的存储形式是 。
A)补码B)反码C)原码D)ASCII码
【题2.18】设有说明:
charw;
intx;
floaty;
doublez;
则表达式w*x+z-y值的数据类型为 。
A)floatB)charC)intD)double
【题2.1】在C语言中(以16位PC机为例),一个char型数据在内存中所占的字节数为【1】;
一个int型数据在内存中所占的字节数为【2】。
一个float型数据在内存中所占的字节数为【4】;
一个double型数据在内存中所占的字节数为【8】。
【题2.2】若有以下定义,则执行表达式y+=y-=m*=y后的y值是【-16】。
intm=5,y=2;
【题2.4】若a是int型变量,则下面表达式的值为【26】。
(a=4*5,a*2),a+6
【题2.6】若有定义:
inta=2,b=3;
floatx=3.5,y=2.5;
则下面表达式的值为【3.5】。
(float)(a+b)/2+(int)x%(int)y
【题2.9】已知字母a的ASCII码为十进制数97,且设ch为字符型变量,则表达式ch=‘a’+‘8’-‘3’的值为【f】。
第3章运算符与表达式
1.设x,y,z和k都是int型变量,则执行表达式:
x=(y=4,z=16,k=32)后,x的值为()
A、4B、16C、32D、52
x所得到的数值是括号中逗号表达式的值,逗号表达式取最后一个表达式的值。
2.能正确表示a和b同时为正或同时为负的逻辑表达式是()
A、(a>
=0||b>
=0)&
&
(a<
0||b<
0)B、(a>
=0&
b>
0&
b<
0)
C、(a+b>
0)&
(a+b<
=0)D、a*b>
D
3.语句:
printf("%d",(a=2)&
(b=-2));
的输出结果是()
A、无输出B、结果不确定C、-1D、1
D注解:
所要输出的表达式的值即为2&
-2的值,两个非0的数值做与运算,值为1。
4.设intx=1,y=1;
表达式(!
x||y--)的值是()
A、0B、1C、2D、-1
表达式先计算!
x,值为0,然后计算y--,值为1,最后0||1,结果为1。
5.若已定义x和y为double类型,则表达式x=1,y=x+3/2的值是()
A、1B、2C、2.0 D、2.5
3/2的结果是整数1,变量x是双精度浮点型,运算时根据类型间转换规则,转换为浮点型运算。
6.若有以下程序段
intc1=1,c2=2,c3;
c3=1.0/c2*c1;
则执行后,c3中的值是()
A、0B、0.5C、1D、2
表达式运算时,先计算1.0/c2,进行的是浮点除,值为0.5,然后做乘法0.5*c1值为0.5。
7.能正确表示逻辑关系:
“a》10或a《0”的C语言表达式是( )
A、a>
=10ora<
=0B、a>
=0|a<
=10C、a>
=10&
a<
=0D、a>
=10‖a<
=0
8.有如下程序段
inta=14,b=15,x;
charc='
A'
x=(a&
b)&
(c<
'
B'
);
执行该程序段后,x的值为()
A、tureB、falseC、0D、1
表达式(a&
)先计算左边括号,a&
b的值为1,再计算右边括号,c<
的值为1,最后计算1&
1的值为1。
9.若a为int类型,且其值为3,则执行完表达式a+=a-=a*a后,a的值是( )
A、-3B、9C、-12D、6
表达式a+=a-=a*a的计算步骤是,因为赋值表达式是右结合的,所以先计算a-=a*a,则a的值为-6,然后计算a+=a,则a的值为-12。
10.若变量c为char类型,能正确判断出c为小写字母的表达式是()
A、'
a'
<
=c<
='
z'
B、(c>
)||(c<
)
C、('
=c)and('
>
=c)D、(c>
)&
11.若有定义:
inta=8,b=5,c;
,则执行语句c=a/b+0.4;
后,c的值为()
A、1.4B、1C、2.0D、2
表达式a/b的值为1,a/b+0.4的值为1.4,因为变量c为整型,则根据赋值表达式的运算规则,变量c的取值为1。
12.若变量a是int类型,并执行了语句:
a='
+1.6;
,则正确的叙述是()
A、a的值是字符CB、a的值是浮点型
C、不允许字符型和浮点型相加D、a的值是字符'
的ASCII值加上1
a的值是表达式'
+1.6值,'
+1.6的计算是取字符'
的ASCII的值,加上1。
13.以下程序的输出结果是( )
main()
{inta=4,b=5,c=0,d;
d=!
a&
!
b||!
c;
printf("%d\n",d);
}
A、1B、0C、非0的数D、-1
输出变量d的值,即是表达式!
b|||!
c的值,表达式的运算是先计算!
a的值为0,则!
b的值为0,然后即计算0||!
c,而!
c的值为1,则表达式0||!
c的值为1,则整个表达式的值为1。
1.表示“整数x的绝对值大于5”时值为“真”的C语言表达式是_____________。
x>
5||x<
-5
第4章顺序结构程序设计
2.下列程序执行后的输出结果是(小数点后只写一位)()
A、666.06.0B、666.76.7C、666.06.7D、666.76.0
main()
{doubled;
floatf;
longl;
inti;
i=f=1=d=20/3;
printf("
%d%ld%f%f\n"
,i,l,f,d);
}
A
注解:
20/3的值为6,变量d和f为浮点型,则赋值以后d和f得到的值为6.0(一位小数);
变量l和i是整型变量,则赋值以后l和i的值为6。
3.下列程序执行后的输出结果是()
A、GB、HC、ID、J
main()
{intx='
f'
printf("
%c\n"
,'
+(x-'
+1));
表达式x-'
+1的值为6,则表达式'
+6表示字符G.,则输出为字符G。
4.有如下程序
{inty=3,x=3,z=1;
%d%d\n"
,(++x,y++),z+2);
}
运行该程序的输出结果是()
A、34B、42C、43D、33
分别输出(++x,y++)、z+2两个表达式的值,(++x,y++)是逗号表达式,取最后一个表达式的值为3,z+2的值为3,所以最后的输出为33。
5.若变量已正确说明为float类型,要通过语句scanf("
%f%f%f"
,&
a,&
b,&
c);
给a赋于10.0,b赋予22.0,c赋予33.0,不正确的输入形式是:
()
A、10<
回车>
22<
33<
B、10.0,22.0,33.0<
C、10.0<
22.0 33.0<
D、10 22<
B
B选项对应的输入语句是scanf("
%f,%f,%f"
6.x、y、z被定义为int型变量,若从键盘给x、y、z输入数据,正确的输入语句是()
A、INPUTx、y、z;
B、scanf("
%d%d%d"
x,&
y,&
z);
C、scanf("
,x,y,z);
D、read("
只有选项B、C是C语言的输入语句,而在用scanf()函数输入时,变量前要有取地址运算符。
7.以下程序段的输出结果是()
inta=1234;
%2d\n"
,a);
A、12B、34C、1234D、提示出错、无结果
C
在输出语句中,格式字串的附加格式字符2,小于数据的实际位数,则按实际位数输出1234。
8.若有说明语句:
inta,b,c,*d=&
,则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是()
A、scanf("
b,d);
B、scanf("
d);
C、scanf("
,a,b,d);
D、scanf("
,a,b,*d);
在scanf()函数输入的变量列表中,应对变量取地址,而变量d是指针变量,它本身就表示地址,所以答案为A。
9.以下程序的输出结果是()
{inta=5,b=4,c=6,d;
printf("
%d\n"
,d=a>
b?
(a>
c?
a:
c):
(b));
A、5yyB、4yyC、6D、不确定
输出的值是表达式a>
(b)的值,对条件表达式,先判断条件a>
b为真,则取表达式a>
c的值,类似的先判断条件a>
c为假,则取后一个变量c的值6,故最后输出的值是6。
填空题
1.以下程序的输出结果是____________________
{inta=0;
a+=(a=8);
16
变量a的初值为0,执行表达式a+=(a=8),先给a赋值8,然后执行复合赋值a+=8,则a的值为16。
4.以下程序的输出结果是______________
{inta=1,b=2;
a=a+b;
b=a-b;
a=a-b;
%d,%d\n"
,a,b);
2,1
执行语句a=a+b后,变量a的值为3,执行语句b=a-b后,变量b的值为1,执行语句a=a-b后,变量a的值为2,所以最后输出a,b的值分别为2,1。
5.下列程序的输出结果是16.00,请填空。
{inta=9,b=2;
floatx=_________,y=1.1,z;
z=a/2+b*x/y+1/2;
%5.2f\n"
,z);
6.6
程序最后输出z的值为16.00,即表达式a/2+b*x/y+1/2的值为16.00,将已知值代入为9/2+2*x/1.1+1/2,即通过4+2*x/1.1=16.00求出变量x的值为6.6。
第5章选择结构程序设计
2.如下程序
main()
{intx=1,a=0,b=0;
switch(x)
{case0:
b++;
case1:
a++;
case2:
a=%d,b=%d\n"
,a,b);
该程序的输出结果是()
A、a=2,b=1B、a=1,b=1C、a=1,b=0D、a=2,b=2
x的值为1,第二个case子句符合条件,从此入口执行后面的语句,因为没有break,所以第三个case子句同样执行,即a自增两次,最后的值为2,b自增一次,最后的值为1。
3.有如下程序
{floatx=2.0,y;
if(x<
0.0) y=0.0;
elseif(x<
10.0) y=1.0/x;
else y=1.0;
%f\n"
,y);
该程序的输出结果是()
A、0.000000B、0.250000C、0.500000D、1.000000
外层if语句的条件不满足,执行后面的else子句,判断内层if语句的条件满足,执行if后的语句:
y=1.0/x;
所以y的值为0.500000。
4.有如下程序
{inta=2,b=-1,c=2;
if(a<
b)
if(b<
0) c=0;
elsec++;
,c);
}
A、0B、1C、2D、3
外层if语句的条件不满足,则应执行它对应的else子句后的语句,请注意本题中的else子句并不是和外层if配套,而是和距else较近的内层if配套,所以直接输出c的值2。
5.阅读以下程序:
{intx;
scanf("
%d"
x);
if(x--<
5) printf("
,x);
else printf("
,x++);
程序运行后,如果从键盘上输人5,则输出结果是()
A、3B、4C、5D、6
从键盘输入5后,if语句的条件表达式x--<
5为假,变量x的值为4,执行else后的子句,输出表达式x++的值,表达式x++的取x自增之前的值4,x的值为5。
1.若从键盘输入58,则以下程序输出的结果是____________
{inta;
scanf("
a);
if(a>
50)printf("
40)printf("
30)printf("
585858
从键盘输入58,则变量a的值为58,三个if语句的判断成立,则分别输出变量a的值。
2.下列程序段的输出结果是_____________。
intn='
c'
switch(n++)
{default:
error"
break;
case'
:
case'
b'
good"
C'
pass"
d'
D'
warn"
开关语句的条件是n++,表达式的取值为字符'
则执行case'
后的子句,先输出pass,因为其后有break子句,则switch语句结束,即最后的输出为pass。
1.C语言逻辑运算中,用_非零_表示“真”,用__零__表示“假”。
2.下列程序的输出结果为:
main()
{inta、b、c;
a=b=c=1;
b=b+c;
a=a+b;
printf(“%d\n”,(c<
b)?
b:
a);
}结果______2________。
6.设有如下程序
main()
{inta=100;
if(a>
0)printf(“%d\n”,a>
100);
elseprintf(“%d\n”,a<
=100);
}该程序的输出结果是(A)
A)0B)1C)100D)-1
第6章循环结构程序设计
1.以下叙述正确的是()
A、do-while语句构成的循环不能用其它语句构成的循环代替。
B、do-while语句构成的循环只能用break语句退出。
C、用do-while语句构成的循环,在while后的表达式为非零时结束循环。
D、用do-while语句构成的循环,在while后的表达式为零时结束循环。
3.以下程序的输出结果是()
A、#*#*#B、#####C、*****D、*#*#*
{inti;
for(i=1;
i<
6;
i++)
{if(i%2){printf("
#"
continue;
*"
\n"
循环控制变量i的值从1变化到5,i为1、3、5时,i%2为1,if语句的条件为真,则执行if后的子句,输出#,然后执行continue语句,终止本次循环的执行,进入下一轮循环,i为2、4时,i%2为0,if语句的条件为假,则if后的子句并不执行,直接输出*,所以最后的输出为#*#*#。
4.以下程序的输出结果是()
A、编译不通过,无输出B、acegC、acegiD、abcdefghi
for(i='
I'
i++,i++)printf("
%c"
,i+32);
\n"
循环控制变量i的取值为A、C、E、G,将它们转化为小写字母的格式输出。
5.以下循环体的执行次数是()
A、3B、2C、1D、0
{inti,j;
for(i=0,j=1;
i<
=j+1;
i+=2,j--) printf("
%d\n"
,i);
循环执行过程如下:
(1)i=0,j=1时,i<
=j+1条件成立,执行循环体一次;
(2)i+=2,j--,则i=2,j=0,i<
=j+1条件不成立,循环结束,所以循环次数为1次。
6.以下程序段的执行结果是()
A、a=12y=12B、a=12y=12
a=14y=16 a=16y=28
a=16y=20 a=18y=24
C、a=12y=12 D、a=12y=12
a=14y=26a=14y=44
inta,y;
a=10;
y=0;
do
{a+=2;
y+=a;