习题册14章答案.docx
- 文档编号:29406930
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:29
- 大小:62.67KB
习题册14章答案.docx
《习题册14章答案.docx》由会员分享,可在线阅读,更多相关《习题册14章答案.docx(29页珍藏版)》请在冰豆网上搜索。
习题册14章答案
阿第一章
一、选择题
1.C
2.C结构化程序设计的三种基本结构是:
顺序、选择、循环。
3.C排除法,故选C。
空语句可能会影响程序运行,以后将会学习。
4.D分号是C语句的一部分。
5.B用户标识符要满足以下条件:
1)不与关键字同;2)符合标识符命名规则,即由字母数字下划线组成,并且第一个字符必须是字母或下划线。
选项A中viod为关键字;C中-abc以中线“-”开头,而不是下划线;D中2a以数字开头且sizeof为关键字。
6.A/**/之中的部分在C程序中起注释作用,因此,题目中的b=20;是在注释部分中,不被执行。
即在输出时,a=10,b=0,所以a+b=10。
7.Dscanf为预定义标识符,可再被定义为用户标识符,只是原有的意义就失去了;D为关键字,不可定义为用户标识符。
8.Bif为关键字,不可定义为用户标识符,define则可以。
故选B。
9.A(习题集中题号为10)A项abc.c包含非法字符。
二、填空题:
1、函数一个函数函数
2、/**/
3、关键字预定义标识符用户标识符
4、b被赋值为10,或将10赋值给b
5、scanf()printf()
第二章
一、选择题
1.AB项想表示的是八进制,但八进制是不能包含数符8的,并且八进制不直接使用负号(以补码表示);C项e后的阶码应该是整数;D项无阶码。
2.C字符以ASCⅡ码存储,所以对于字符变量d,既可以赋字符型值,也可以赋整型值,但不能赋字符串,故C选项错误。
(补充,C语言中没有字符串变量,对于字符串怎么存储,以后将会学习)。
3.AC(float)(a+b)/2+(int)x%(int)y
结果为2.5结果为1
运算顺序:
(按照运算符优先级)
结果为2.5+1=3.5,如果用printf(”%d”,(float)(a+b)/2+(int)x%(int)y)输出,则结果为3.500000,单从数值上来讲,3.5也对。
4.A同第1题解析
5.D在单引号内的只能是单个字符,’101’有三个字符,所以是非法的,如果为’\101’,则正确,’\101’是转义字符,表示ASCⅡ为65(101为八进制,其十进制为65)的字符A
6.D(int)a=5,b/b=1.0(不是1,float类型除以float类型结果仍为float型)。
所以结果为5+1.0=6.0.(int类型+float类型,结果为float类型)。
7.BA项无分号;C项第一个等号左边无变量,且a++=5也错误,因为赋值号左边只能为单个变量;D项应为a=(int)i。
8.ABA项可以定义为用户标识符,只不过printf就失去了原来的意义;B项可以;C非法以数字开头;D项为关键字,不可以定义为用户标识符。
9.D
10.C因为xy均为double类型,所以x=1.0y=1.0+3/23/2=1(整数除以整数,结果仍为整数),所以y=1.0+1=2.0.
11.A变量c未定义,在题目中加上floatc;结果为c=a/b+0.4=1+0.4=1.4
12.CC项floatf=f+1.1没有分号,并且f=f+1.1还是不知道f为多少。
13.C
14.BA项显然错误;B项正确;C项%只能处理整数,所以C项错误;D项a=a+7=c+b,赋值表达式是又结合的,所以D项等价于a=(a+7=c+b),其中a+7出现在了赋值号的左边,而赋值号左边只能是单个变量,所以D项错误。
15.CA项等价于a=(a+b=b++),a+b出现在赋值号的左边,故错误;B项先算(int)a,再算(int)a+b,(int)a+b是int型+double型,结果为double型,最后w%((int)a+b),而%只能处理整型数,不能处理double类型的(int)a+b。
C项正确;D项为语句,不是表达式,并且double类型的数ab是不能比大小的,因为它们不精确(了解)。
16.CA项%不能处理实型数:
B项赋值号左边是常量,而赋值号左边只能是单个的变量;D项等价于x4=(1+2=3);1+2是常量,却出现在赋值号的左边,故错误。
17.D
18.CA项abc不是关键字;B项main不是关键字;D项malloc和new不是关键字
19.BA项为八进制数,有0—7组成,却出现了数符9;C项e后的阶码不能为小数;D项为十六进制数,有0—9和abcdef组成,D中g非法。
20.Be后面的阶码只能为整数。
21.A长整型数以字母L结尾。
22.BB项出现了数符8.而八进制数只能有0-7组成。
23.C只有C项有分号。
24.C+=、-=是复合赋值运算符,遵循右结合,a+=a-=a*a等价于a+=(a-=a*a),我们可以先算a-=a*a,它可以写成a=a-a*a,即a=3-3*3=-6(此时a为-6了),所以整个大式子可转化为a+=-6,即a=a+(-6),即a=-6+(-6)=-12.
25.CA项a+7出现了赋值号的左边,而赋值号左边只能是单个变量,不能是这样的表达式,所以A错误;同理D项错误;B项++的操作数也只能是单个变量,不能是3+x这样的表达式。
26.Ax+++y+++z++中++遵循右结合,上式等价于(x++)+(y++)+(z++)=1+1+1=3.
27.C将123.4567带入C:
(int)(123.4567*100+0.5)/100.0=(int)(12345.67+0.5)/100.0=(int)(12346.17)/100.0
=12346/100.0=123.46.
28.A‘\70’是转义字符,是一个字符。
29.B”\”EOF\n=-\61\””最外层的双引号表示这是一个字符串常量,其字符组成分别如下(以空格隔开):
\”EOF\n=-\61\”
30.D(1,2,3,4)为逗号表达式,其表达式的值为最后一项的值,即4,所以x=4.
31.Cn应该与“n为真”等价,而“n为真”即n不为零。
选C。
注意不要选B,n==1时n是为真,但n==1不是n为真的充分必要条件,只要n不为零,n就为真。
32.Awhile(y>>1);这是while循环,分号为其子句,当y>>1为真,就执行空语句,直到y>>1为假,即y=0时,才跳出循环,执行后面的语句。
y初值为10,即00001010,右移四次就为0了,所以循环执行4次后跳出,执行后面的printf语句,此时y=0.
33.Bd=!
a&&!
b|!
c根据优先级,可将赋值号右边看成一个大的&&表达式,即(!
a)&&(!
b)|(!
c).而!
a为0,所以整个表达式(!
a)&&(!
b)|(!
c)值为0,所以d=0.
34.CC项!
(x-y)取的是逻辑值,非0即1,所以||两边均为假,所以无论xy取什么值,整个逻辑表达式的值都为假,即0。
所以C错误。
二、填空
1、123.460000参见选择题27题,此式表示保留小数点后两位,将第三位四舍五入。
2、++、%、<、=
3、20 4、9逗号表达式“y=x+5,x+y”从前往后依次执行内部的表达式,并以最后一个表达式的值为整个逗号表达式的值,所以先执行y=x+5(y=7),再执行表达式x+y(值为9),并且以x+y的值为整个逗号表达式的值,所以答案为9. 5、7.0(int)x+2=5+2=7,所以x=(int)x+2相当于x=7,但由于x是float类型,所以x变量的值为7.0. 6、21关键是得出a<<2|b的值,a=5,即00000101,a<<2结果为00010100,a<<2|b即 00010100 |00000001 00010101(十进制为21) 第三章 一、选择题 1.Ca=32768(215)是无符号数,它在内存中的二进制存储为1000000000000000,b=a;将a的值赋给b,所以b中也为1000000000000000,但是b是有符号数,第一位是符号位,此处符号位为1,表示这是个负数(而不是32768),负数以补码形式存储的,要知道b中到底是什么数,将补码1000000000000000转换成原码就知道了。 将补码转换成原码: 1)将补码减1得0111111111111111;2)取反得1000000000000000(此为原码,其十进制为32768);3)加负号得-32768 2.A%o表示以八进制输出,且输出时不带先导0. 3.D输出项为两项,分别为(++x,y++)和z+2,前者值为y++的值(3),后者为3 4.Bcharx=0xddff,而x是字符型,只占一个字节,而0xddff占两个字节,所以只能将0xddff的第八位(ff)赋值给x,则x中为ff,即11111111,字符型数据也是有符号数,第一位是符号位,11111111中符号位为1,表示该数为负数,11111111是补码,要知道x中的值是多少,就要对补码11111111求原码。 步骤: 1)将补码减1得11111110;2)取反得00000001(十进制为1);3)加负号得-1 5.Bprintf函数中格式字符串为“%d”,所以输出的一定是数字,输出项为(x,y),此为逗号表达式,其值为y的值(‘A’),而输出的必须是数字,所以输出字符‘A’的ASCⅡ码(65)。 6.Dfloatx=1;相当于floatx=1.000000; inty; x++相当于x=2.000000 y=x+1相当于y=2.000000+1,但因为y为int类型,所以y=3 printf(”x=%d,y=%f”,x,y);x为float类型,却以%d输出,y为int类型,却以%f输出,所以无法输出正确结果,结果为D 7.Ba=f/=c*=(x=6.5),赋值运算符遵循右结合,上式运算顺序如下: x=6.5 c=c*6.5即c=65 f=f/c即f=f/65得f=1.538… a=f,但a为int类型,所以a=1 8.ABC错误,注释不能嵌套;D错误,头文件少了半个双引号。 9.A输入的非格式字符串必须和scanf中”m=%dn=%dp=%d”完全相同。 10.Dx=y=1; z=x++;/*z=1,x=2*/ y=z++;/*y=1,z=2*/ x=y++;/*x=1,y=2*/ 故x=1,y=2,z=2 11.Cprintf(“%c”,b++);以%c输出,则输出2(2为字符),然后执行b++(b中字符为3); printf(“%d\n”,b-a++);此处以%d输出,输出数值,b数值为‘3’的ASCⅡ码51,a++数值为49(‘1’的ASCⅡ码),所以b-a++=51-49=2.选C。 12.A执行scanf(“%d%c%d”,&m,&c,&n);键盘输入10A10后,m=10,c=‘A’,n=10.输出时printf(”%d,%d,%d\n”,m,c,n);函数全部以%d输出,则全部输出数值,A的ASCⅡ码为65,所以输出为10,65,10.选A。 13.C%2d指最小输出宽度为2,当实际宽度大于2时,自动突波宽度限制,以实际为准,故选C。 14.C执行m-=n;后,m=0,但以%x输出时不输出先导0x,故选C。 15.Aintm=12,n=34; printf(“%d%d”,m++,++n);/*m++值为12,++n值为35,所以输出1235,输出后m=13,n=35*/ printf(“%d%d\n”,n++,++m);/*n++值为35,++m值为14,所以输出3514,和之前连接起来就是12353514*/ 16.Binti=010,j=10;/*其中010为八进制数,所以i=8*/ printf(“%d,%d\n”,++i,j--);/*++i值为9,j--值为10,所以输出9,10*/ 17.Achara,b,c,d; scanf(“%c,%c%d,%d”,&a,&b,&c,&d);/*键盘输入a,9,97,98后,相当于a=‘a’,b=‘9’,c=97,d=98.*/ printf(“%d,%c,%c,%d\n”,a,b,c,d);a以%d输出,输出为‘a’的ASCⅡ码97 b以%c输出,输出为字符9 c以%c输出,输出ASCⅡ码为97的字符a d以%d输出,输出数值98 故输出为97,9,a,98. 18.Dy=018处出错,018是非法的常量。 它以0开头,所以是八进制数,却出现数符8. 19.Cprintf函数的输出项为(a,b),这是一个逗号表达式,其值为最后一个表达式的值,即b的值888. 二、填空 1、10241E执行scanf函数之后,i=10,j=20,k=30 printf(“%d%o%x\n”,i,j,k);要以十进制输出i(10),以八进制输出j(20),以十六进制输出k(30)。 (10)10=(10)10,(20)10=(24)8,(30)10=(1E)16,所以输出为10241E 2、Dm=’B’+’C’-’A’=66+67-65=68.而后printf要以%c输出m,所以输出ASCⅡ码为68的字符D。 3、PBchara,b; a=getchar();b=scanf(“%d”,&b);/*a=’B’,b=33*/ a=a-‘A’+’O’;b=b*2;/*a=’B’-’A’+’O’,即a=1+‘O’,即a=‘P’,b=33*2=66*/ printf(“%c%c\n”,a,b);/*以字符类型输出ab,所以输出PB*/ 4、3键盘输入12后,ch1=’1’,ch2=‘2’, n1=ch1-‘0’,即n1=’1’-‘0’=49-48=1,n2=n1+(ch2-‘0’)即n2=1+(’2’-‘0’)=3 5、程序出错B=097处出错,097非法。 第四章选择结构程序设计 一、选择题 1.如下程序运行的结果是_______D_________ #include main() {intx=1,y=2,z=3; if(x>y) if(y>z)printf(〞%d〞,++z); elseprintf(〞%d〞,++y); printf(〞%d\n〞,x++); } A)331B)41C)2D)1 【解析】: (2008-09-28)此题要注意分析程序结构,else的匹配原则是与前面最近的且尚未配对的if组成一个完整的if-else结构。 此程序可改为以下结构: #include main() {intx=1,y=2,z=3; if(x>y) { if(y>z)printf(〞%d〞,++z); elseprintf(〞%d〞,++y); } printf(〞%d\n〞,x++); } 由于第一个if中的x>y条件不成立,故直接执行printf(〞%d\n〞,x++);输出结果为1。 正确答案: D。 2.有以下程序: voidmain() { inti=1,j=2,k=3; if(i++==1&&(++j==3&&k++==3)) printf("%d%d%d\n",i,j,k); } 程序运行后的输出结果是___B___。 A)123 B)234 C)223 D)233 【解析】: 本题考查逻辑运算,&&运算是自左至右的顺序运算,在进行逻辑与时,若“&&”的左边运算结果已经为0,则“&&”右边的表达式将不再进行计算,结果总为0,如果左边为1,则继续进行右边运算,只有两边结果都为1,结果才为1。 本题中++优先级高于==,i=1,i++表达式的值为1,因此表达式i++==1运算结果为1,i自加1变成2,因此继续进行右边运算,(++j==3||k++==3)表达式中,j=2,执行++j先自加1,j变为3,++j为3,++j==3表达式结果为1,因此继续执行右边的表达式,k=3,k++为3,因此k++==3表达式结果为1,然后k自加变成4,(++j==3||k++3)表达式为1,因此(i++==1&&(++j==3||k++==3))的结果为1,判断条件成立,执行输出语句,此时i=2,j=3,k=4,正确答案为B. i++==1&&(++j==3&&k++==3) 3.若整型变量a、b、c、d中的值依次为: 1、4、3、2。 则条件表达式a a: c c: d的值 A A)1 B)2 c)3 D)4 【解析】: (2005-04-22)此题考查的是条件表达式“? : ”,条件表达式的运算顺序是自右向左,当“? ”号左边表达式返回结果为真 (1),则返回“: ”号左边值,否则返回右边的值。 原题表达式可以修改为a a: (c c: d),先执行c c: d表达式,c a: 2,a (1),返回a的值,最终的结果为a的值1,因此正确答案为A. 4.若变量已正确定义,有以下程序段 inta=3,b=5,c=7; if(a>b)a=b;c=a; if(c! =a)c=b; printf("%d,%d,%d\n",a,b,c); 其输出结果是___B_______ A)程序段有语法错B)3,5,3C)3,5,5D)3,5,7 【解析】: (2008-04-19)程序中的if语句只控制了一个执行语句,出了它所控制的这条语句需要按照它的条件来执行外,其他的语句都要依次执行,程序的第一个if条件a>b(3>5),条件不成立,a=b不被执行,要执行c=a,c=3,接着做第二个if判断c! =a(3! =3),条件不成立,不执行,最后输出的结果为3,5,3,正确答案为B 5.有以下程序: voidmain() { intx=1,a=0,b=0; switch(x) {case0: b++; case1: a++; case2: a++;b++; } printf("a=%d,b=%d\n",a,b); } 该程序输出结果是____A______ A)a=2,b=1B)a=1,b=1C)a=1,b=0D)a=2,b=2 【解析】: 此题考查的是switch-case结构,由于switch的表达式是x,x=1;执行case1: a++;执行后a=a+1=2;由于没有break,所以不跳出,继续执行case2: a++;b++;执行后a=a+1=3,b=b+1=1,所以a=2,b=1,正确答案为A. 6.已有定义: intx=3,y=4,z=5;则表达式! (x+y)+z-1&&y+z/2的值是____D________ A)6B)0C)2D)1 【解析】: 此题考查的是运算符优先级及混合运算。 这里涉及到的运算符: ! ()+-&&/,优先级: ()! /+-&&。 当x=3,y=4,z=5,表达式! (x+y)+z-1&&y+z/2! (3+4)+5-1&&4+5/2! 7+5-1&&4+5/2 因为! 7为0,5/2整数除整数得整数2,! 7+5-1&&4+5/20+5-1&&4+24&&6 由于逻辑运算(&&)当所有两边都为真(非0)的时候结果才为真,所以最后结果为1,正确答案是D 7.下列条件语句中,功能与其他语句不同的是____D_______ A)if(a)printf("%d\n",x);elseprintf("%d\n",y); B)if(a==0)printf("%d\n",y);elseprintf("%d\n",x); C)if(a! =0)printf("%d\n",x);elseprintf("%d\n",y); D)if(a==0)printf("%d\n",x);elseprintf("%d\n",y); 【解析】: (2004-09-23)本题考查的知识点是if语句的用法。 选项A、B和C都是在a的值为0的时候输出y,a不为0的时候输出x,而选项D是在a为0的时候输出x,a不为0的时候输出y.所以,4个选项中选项D符合题意。 8.能正确表示逻辑关系: “a≥10或a≤0”的C语言表达式是____D______ A)a>=10ora<=0B)a>=0|a<=10C)a>=10&&a<=0D)a>=10‖a<=0 【解析】: (2000-09-22),此题考查是C语言关系表达式和逻辑表达式,其中≥和≤的关系表达式是>=、<=,或表达式是||,因此a≥10或a≤0的C语言表达式a>=10‖a<=0,正确答案是D。 9.有以下程序 main() { inta=0,b=0,c=0,d=0; if(a=1){b=1;c=2;} elsed=3; printf(“%d,%d,%d,%d\n”,a,b,c,d); } 程序输出___C_______ A)0,1,2,0 B)0,0,0,3 C)1,1,2,0 D)编译有错 【解析】: 本题考查是if语句。 题目中if中的条件表达式a=1,是属于赋值语句,相当于判断if(a),而a=1,条件为真,因此执行b=1,c=2,但是不执行else的d=3;因此最后a=1,b=1,c=2,d=0,正确答案为C 10.有以下程序 main() {inta=1,b=2,m=0,n=0,k; k=((n=b>a)+b)||(m=a printf("%d,%d\n",k,m); } 程序运行后的输出结果是___C______ A)0,0 B)0,1 C)1,0 D)1,1 【解析】: (2003-09-16)此题考查的是运算符的优先级,以及逻辑运算符或(||)、关系运算符大于(>),赋值运算符(=),所以b>a为1(2>1),所以此时n=1,||左边的值为n+b(1+2)为3,或运算只要有一边为真(非0),结果就为真(一般以1表示),因此k=1,根据短路特性,右边的m=a 正确答案C。 11.以下程序的输出结果是____B_____。 #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 【解析】: (1994-04-28)此题考查的是运算符和表达式。 其中a=d/100%9241/100%9,由于/和%运算是自左向右,241/100=2然后2%9=2,所以a=2;b=(-1)&&(-1)因为它两边都是非零的数字,非零的数字就当成逻辑的真,逻辑与(&&)的两边都为真,则结果为真(一般用1表示),所以b=1,正确答案为B. 12.若变量c为char类型,能正确
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 习题 14 答案