C++第二章与第三章答案.docx

上传人:b****8 文档编号:9889029 上传时间:2023-02-07 格式:DOCX 页数:13 大小:23.50KB
下载 相关 举报
C++第二章与第三章答案.docx_第1页
第1页 / 共13页
C++第二章与第三章答案.docx_第2页
第2页 / 共13页
C++第二章与第三章答案.docx_第3页
第3页 / 共13页
C++第二章与第三章答案.docx_第4页
第4页 / 共13页
C++第二章与第三章答案.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

C++第二章与第三章答案.docx

《C++第二章与第三章答案.docx》由会员分享,可在线阅读,更多相关《C++第二章与第三章答案.docx(13页珍藏版)》请在冰豆网上搜索。

C++第二章与第三章答案.docx

C++第二章与第三章答案

 

第二章顺序结构

一选择题

1,答案是C

随意使用空语句会导致逻辑上出现错误,不要随便使用。

2,答案是B

语句必须以分号结尾,A,C,D表达式后面均没有分号。

3,答案是C

intx=13,y=4;说明x,y均为整型,所以x/y只取整数部分(舍去法),值为3,把3赋值给x,整个x=x/y表达式的值为左边变量x的值,所以输出为3。

4,答案是A

a,b均为整型,a/b是取a÷b所得商的整数部分,所以是0,再把0赋值给c,所以是c的值是0。

5,答案是D

A注释语句可以放在代码的任何位置

B将r定义为整型不会在编译时出错,会自动进行类型转换

C变量s为浮点型,格式描述符%f时正确的

Dπ是非法的变量

6,答案是D

(x,y)是逗号表达式,它的值只有一个,所以格式说明符的个数和输出项的个数是相等的。

并且逗号表达式的值为最后一个表达式的值,最后一个表达式是y=2003,所以整个表达式的值是2003,因此输出值为2003。

7,答案是A

m是十进制整数以十进制有符号的形式输出,即照原样输32767,n=032767,032767是八进制的整数以八进制无符号形式输出,去掉前面的0。

见教材P34

8,答案是C

m,n的值都是十六进制数0xabc,m-=n即是m=m-n,把m-n的值赋给m,

即把0赋给m,再把m值以十六进制无符号的形式输出,输出的十六进制

数不用在前面0x或者0X。

见教材P35

9,答案是B

表达式i--的值是在变量自减之前的值,i的初值为10,所以该表达式的值也为10;表达式j++的值是变量自加之后的值,j初值为1,所以该表达

式在值是2。

10,答案是C

m=0256,即m是八进制的数0256,要以八进制无符号的形式输出,即输出

256;n=256,即n是十进制的数256,也要以八进制无符号的形式输出,首

先要把十进制数转化为八进制数,256转化为八进制为0400,以无符号形

式输出,即输出400。

11,答案是B

在printf语句中,格式控制的个数只有一个,即%d,而输出项有两项,即a和b。

而得到的结果应该只有一个,所以应该输出第一个变量的值,即变量a的值。

12,答案是C

第一个数据的输出控制宽度是2位,但是x的值是102,占3位,要输出的数据宽度大于规定的输出宽度,所以按数据的实际宽度输出,输出102。

第二个数据要求以十进制形式输出,输出控制宽度是2,y的值为012,是八进制数,所以要转换成十进制数10后再输出。

13,答案是B

表达式a=f/=c*=(x=6.5),按从右到左结合,先把6.5赋值给x,再执行c=c*6.5,c的值变为65,再执行f=f/65,为浮点数的除法,f的值为1.53……,再把f的值赋给a,a为整型数据,执行强制类型转换,a的值为1。

a对应的输出格式为%d,即输出1;c对应的输出格式为%d,输出65,f对应的输出格式%3.1f,即输出控制宽度为3位,保留小数点后一位小数,即输出1.5,x对应的输出格式也为%3.1f,输出6.5。

14,答案是D

floatx=-123.456;说明x为单精度浮点数据,单精度浮点数据对应的输出格式应该为%f。

15,答案是C

m=(k+=i*=k);按从右到左结合,先执行i=i*k;即i被赋值为4,再执行k=k+4;k被赋值为6,最后把6赋给m,输出m和i的值。

16,答案是C

略(参考12题)

17,答案是D

-m++遵循从右向左结合的原则;m++的值为m自增之前的值,所以执行完x=-m++以后,x被赋值为-3;表达式x=x+8/++n中有加号除号,先算8/++n,++n的值为自增之后的值为5,8/5取整为1,即x=x+8/++n转化为x=x+1,即把x+1的值赋给x,x的值变为-2。

18,答案是D

A输入函数应为scanf();

B,C输入数据列表必须是地址表达式;

19,答案是A

从键盘输入数据的格式必须与输入控制要求的格式一样

B答案三个之间不要有空格;C答案用逗号分开是多余的;D答案格式不匹配。

20,答案是A

格式控制要求输入的两个数据之间要用逗号隔开,A没有逗号所以错误,D两个输入数之间的回车换行可以忽略。

21,答案是C

x乘以100是为了把x小数点后的两位小数变为整数,再加上0.5,如果小数点后一位大于等于5则会进一位,如果小数点后一位小于5则不会出现进位的情况,再对其进行强制类型转换,采用舍去法丢掉小数部分,即对x乘上100后的数实现了小数位到整数位的四舍五入。

最后再除以100.0,把数字变回原来的大小,整数与浮点数相除结果为浮点数,即实现了要求。

22,答案是C

从键盘输入数据的格式必须与输入控制要求的格式一样。

23,答案是B

输入控制中第一个数要求以“%2d”形式输入,即要求输入一个两位的数,而从键盘输入的数为876,所以从左到右取两位数字87,即把87赋值给整型变量a,余下的6再赋值给浮点型变量b,自动进行类型转换,b的值为6.000000,后面输入的543则没有赋值给变量。

24,答案是D

“%%”会输出一个“%”,“d”会照原样输出,因为没有格式说明,m,n无法输出到屏幕。

25,答案是D

第1个输出语句要求ch以%c(字符)形式输出所以为输出“a”,以%d(整数)形式输出为,字符转换为整型要使用ASCII码所以为“97”,k没有对应的输出符所以没有输出,第2个输出语句要求以整型方式输出k得到“12”。

结果为“a,97,k=12”

26,答案是B

a+b的结果为30,按照“a+b=%d\n”的输出格式得到输出结果“a+b=30”B

27,答案是B

printf可以没有输出项,没有输出项的printf只是没有输出内容;整数不能以十二进制输出,getchar()只能读入字符。

28,答案是A

getchar()可以读入空格符合回车符。

二填空题

1,一条语句分号

2,88

首先将八进制数0210转化为十六进制的数0X88,输出格式说明要以十六进制无符号的形式输出,所以省略0X,直接输出88。

3,11

把十进制数转化为八进制数,以无符号的形式输出

4,252137

b为八进制数025,c为十六进制数0X25,首先把b、c都转化为十进制的整数,分别为21、37,按照输出格式要求a、b、c以十进制整数形式输出,中间以空格分开,所以输出为252137。

5,n1=%d\nn2=%d

除了n1,n2的值之外,还必须加入“n1=”“n2=”照原样输出的字符,很明显在两个数据之间还加了换行符。

6,i=10,j=20<回车>

格式控制中加入了格式说明以外的其他字符,则在输入数据时这些字符也要同样输入。

输入格式控制为i=%d,j=%d,所以则应该从键盘输入i=10,j=20

7,261

a为十进制数177转化为八进制的数为0261,以无符号的形式输出为261

8,16

a的初值为0,在表达式a+=(a=8)中,a首先被赋值为8,再执行操作a=a+a,所以a最后被赋值为16,即输出a的值为16

9,printf(“a=%d,b=%d”,a,b);

10,B66

B在ASCII码中派在A的后面A为65,那么B为66。

11,10

012为八进制数,转换为十进制为10。

12,1234

在scanf函数中指定了宽度为2,输入123456,a=12,b=34,后面的567无效。

13,12

程序运行时输入12,getchar()函数只能接受单个字符,所以ch1=’1’,ch2=’2’。

n1=ch1-‘0,转化为ASCII码计算n1=50-49,n1的值为1。

n2=n1*10+(ch2-‘0’)转化为ASCII码计算n2=1*10+(51-49),n2的值为12。

 

第三章选择结构

一、选择题

1、D此题主要是考语句的特征。

一条语句只包含一个分号,D项有两个分号,应该是两条语句,所以选D。

2、C此题主要是考真假条件的等价。

题目中的E为非0时条件为真,为0时为假。

那么把非0和0带到选项中可知,C项正好是E为0时表达式为真,非0时为假,所以选C。

3、D任意合法的表达式都可以作为逻辑运算符的运算对象

4、D此题主要是考逻辑运算和关系运算的优先级别.只要掌握!

、算术运算和&&的优先级别便可选对.这几种运算符的具体优先级关系见见教材P188,附录三。

5、A此题主要是考逻辑运算符!

、&&和||之间的优先级别。

最高,&&次之,||最低。

先求得!

a为0,所以不必计算!

b的值,即!

a&&!

b的值为0,由c=0,!

c=1,而0||1=1,所以选A。

6、A此题主要是考了逻辑、关系和算术运算,熟练掌握逻辑运算、关系运算和算术运算的优先级别后,就不难了。

A选项中!

a为0,所以!

a==1为假,那么就不用计算&&后面的表达式了,因为0与任何数均为假;B项中先计算出a

c也为假,而0||1=1;C项中a和b均为真,所以a&&b的值为1;D项中先计算出(b+b)&&(c-a)=1,又a=2,2||1=1所以选A。

7、D此题考到了++运算符以及逻辑运算。

当计算机碰到a&&b时,先计算表达式a的值,若为真才会计算表达式b的值,否则将不会去计算b的值,因为一旦a=0,则0&&b必为0;而a||b则正好是相反的,即先计算表达式a的值,若a为假才会计算表达式b的值,否则将不会去计算b的值,因为一旦a=1,则1||b的值必为1,理解了这两点后,我们在看题目:

i++==1的值为1,此时i为2,所以计算&&后的表达式,首先计算++j==3的值为1,j的值为3,由上面的原理我们可知,||后面的表达式不用再计算,所以此时i,j,k的值分别为2,3,3。

8、D此题和题2非常的相似,也是考真假条件的转换,其中D项中只有k为0时,!

k%2==1才成立,显然和A、B、C三项不同。

9、C此题主要是考if和else的配对问题。

见教材P51。

10、D此题主要是考if和else的一般形式。

if后面的语句要么是单条语句,要么是由{}扩起来的复合语句,不能是if后有两条语句的,所以本题程序在运行的时候会出错。

11、C此题考到了关系运算和逻辑运算及一定数学知识。

|x-y|<10可等价为-10

12、D此题也是考到了真假条件的变换和if-else语句。

A、B、C三项都是表示a为真时输出x,为假时输出y,而D则是a为假时输出x,为真时输出y。

13、D此题考查了赋值表达式的一般格式,=的左边是变量名,右边是表达式,所以D项错误。

14、C此题主要是考查逻辑运算符||,当计算机碰到a||b,先计算表达式a的值,若为假才会计算表达式b的值,否则将不会去计算b的值,因为一旦a=1,则0||b必为0。

题中b>a为真,所以(n=b>a)为1,那么将不会去计算m=a

15、C此题主要是考查if-else-if和if语句。

具体分析见教材第49页例7。

16、C此题主要是考查if-else-if以及关系表达式的运算。

首先判断第一个条件a>b>c的值为0,所以不执行第一条语句;在判断第二个条件,c-1>=c表达式的结果为假,所以也不执行其下面的语句,因此执行最后一条语句,将输出d+2的值为4。

17、C此题主要是考查条件表达式和条件运算符。

首先要注意条件表达式的结合方向,它是从右至左的(可参照附录三)第一个条件表达式的值为a,第二个条件表达式的值为c,而c=6,所以答案选C

18、A此题主要是考查if-else语句和条件表达式的转化。

只要理解了if-else语句和条件表达式的运算规则的话,就很容易选出A

19、D此题主要是考查在switch语句中break和default的作用及break的适用范围。

详细说明可参看教材第三章P53对switch的说明部分。

20、B

此题考查的是条件表达式求解问题。

先看第一个条件表达式语句,ac为假,所以k=k=2选B

21、A

此题考查的是条件表达式的求解顺序。

参照附录三可知,它的结合方向是自右至左,所以先求得右边一个条件表达式的值为2,再求得左边一个的值为1,即选A

22、C

此题考查的是真假条件的等价问题。

x-y为真表示x-y是非0的,也即x-y<0或x-y>0即选C

23答案是B

C语言的字符以其ASCII码的形式存在,所以要确定某个字符是大写字母,只要确定它的ASCII码在’A’和’Z’之间就可以了,选项A和C符合要求。

大写字母的ASCII码值的范围为65到90,所以D选项符合要求,所以只有C是错误的。

24答案是B

满足表达式(c>=2&&c<=6)的整型变量c的值是2,3,4,5,6。

当变量c的值不为2,4,6时,其值只能为3或5,所以表达式c!

=3和c!

=5中至少有一个为真,即不论c为何值,B选项中的表达式的值都为真,所以B选项正确。

25答案是A

条件x==0||x==1为真,所以执行y=1,然后执行

y=x*x-(x-2)*(x-2)=1-(-1)*(-1)=1-1=0,所以选择A。

26答案是B

当表达式EXP为非0值时条件成立,即执行语句i++;当EXP等于0时执行语句j--;。

这就等同于条件表达式“(EXP!

=0)?

i++:

j—”。

所以本题选择B。

27答案是D

C语言的字符以其ASCII码的形式存在,所以要确定某个字符是大写字母,只要确定它的ASCII码在’A’和’Z’之间就可以了,选项B的书写格式错误,而选项C不符合要求。

大写字母的ASCII码值的范围为65到90,所以A选项不符合要求,小写字母的ASCII码比大写字母的ASCII码大32,所以只有D是正确的。

28答案是D

奇数和2求余一定不为0,所以当x为奇数时,x%2==0是不成立的,值为0,此题选择D。

29答案是B

两个if语句的判断条件都不满足,程序只执行了c=a这条语句,所以变量c的值等于3,变量b的值没有变化,程序输出的结果是3,5,3。

所以本题选择B。

30答案是C

表达式y%3==0的值为1,所以执行下面的输出语句,表达式—y的值为8,所以输出结果是8。

选择C。

31答案是C

表达式x%3的值为2,非0所以执行下面的输出语句,将x--的值8输出,此时x的值变为7,然后再执行下一个输出语句,将--x的值6输出,x的值也变为6,所以选择C。

32答案是D

这是嵌套形式的switch语句,因为break结构影响较大,而此程序中的第一个case后没有break语句,程序执行时,x=1,执行内嵌的switch语句,因y=0,执行a++,使变量a的值为1并终止内层switch结构,回到外层。

程序继续执行case2后面的语句a++;b++;,这使变量a,b的值分别为2和1,外层switch语句结束。

所以此题选择D。

33答案是D

break与continue语句都可用于switch语句中。

选择D。

二、填空题

1、答案是:

10200

分析:

多数同学得到的答案是10201,显然是没有弄清楚第三条赋值语句:

c=(a%b<1)||(a/b>1).这是将后面一个逻辑表达式的值给c,那么关于逻辑表达式的考题,无非就是考察运算符的优先级,也就是说先算哪个,后算哪个的问题。

在这个题里面,先计算第一个圆括号里面的内容,a%b的值是10,所以10<1为假;a/b的值为0,0>1为假。

在逻辑或运算的时候,两个运算对象都为假,则结果为假。

所以c的值为0.答案是:

10200

2、答案是:

1

分析:

程序中是一个if—else结构。

这个题最容易出错的地方在于if的条件,注意,里面的是c=a是一个赋值表达式,不是将c与a的值进行比较。

所以条件为真,输出赋值以后c的值,为1。

3、答案是:

4,5,99

分析:

题中的重点在于两个if结构,大家要注意两点:

第一,如果if后面没有花括号,则它后面的第一条语句是它的结构体,并且只有一条语句。

(如果后面是一个结构,则整个结构都属于if结构的结构体)。

第二,变量在不断的被重新赋值,所以其值在不断的变化。

4、答案是:

yes

分析:

该题与第二题是同一回事。

5、答案是:

1

分析:

这个题还上一个if—else结构,考查点仍然是考察考生是否能够正确识别if后面括号里的表达式p=a!

=0,根据运算符的优先级知道,这里应该先算a!

=0,这是一个逻辑运算,a的值为5,所以a!

=0为真,其逻辑值为1,将1赋值给p,所以条件为真,输出p的值,为1。

6、答案是:

20,0

分析:

见第3题分析。

7、答案是:

585858

分析:

题中有三个if结构,注意,这三个if结构是相互独立的,是互不相关的,只要他们的条件成立,就要执行其结构体(后面的输出语句)。

通过键盘输入,得a的值为58,所以a>50为真,输出58;然后判断a>40,仍然为真,再输出58,最后判断a>30,肯定为真,所以再输出58,连续三次输出58。

8、答案是:

0

分析:

本题的关键在于关系运算符的运算次序,a=5,b=4,c=3.a>b>c看起来是真的,但是这这是数学里面是这样的,这里我们要一步一步的计算,先算a>b,a确实大于b,所以为真,逻辑值为1,后面的计算就变成了1>c,显然为假,逻辑值为0,并将它赋值给d,所以最后输出d的值为0。

9、答案是:

3

分析:

这个题主要考察条件运算符。

程序要输出(P/3>0?

p/10:

p%3)这个条件表达式的值。

P为30,所以p/3=10,10>0显然为真,所以整个表达式的值应该是p/10的值,p/10得3。

10、答案是:

21

分析:

题中是一个switch嵌套结构。

里面的switch是case1的语句,题的关键点在于这个语句(即里面的这个switch结构)的后面并没有跳出整个结构的break语句。

所以,当x=1,与case相配以后,执行完后面的语句(即里面的这个switch结构),然后没有遇到break语句,所以并不跳出结构体,而是继续执行case2后面的语句。

所以最后得到的结果应该是21,而不是10。

11、答案是:

0

字符空格的ASCII码不为0,所以本题中表达式!

c的值为0,b=0&&1的结果显然为0。

12、答案是:

1

执行“j=!

ch&&i++”时,首先判断j=!

ch的值,因为ch=’$’不为0,所以j=!

ch=0,编译便不再计算表达式i++的值,i的值不变仍为1。

13、答案是:

-4

表达式!

n的值为1,所以执行x-=1后x=1;表达式m的值为非0值,所以执行其后的语句x-=2后x的值为-1,表达式x的值也为非0,所以执行其后的语句后x的值为-4,最后输出x的值即为-4。

14、答案是:

#&

表达式c==5的值为真,所以表达式的值等于1,因此输出符号“#”,然后执行“break”,继而去执行“default:

printf(“&”);”语句,输出符号“&”。

15、答案是:

1

因为在条件表达式(a

b中,比较表达式a

后面两个条件表达式中的比较表达式都真,所以最终x的值等于1。

16、答案是:

a:

bc:

t1

条件表达式类似于if语句,根据“?

”前面子表达式的逻辑值来判断应该计算“:

”前面的子表达式还是后面的作为整个条件表达式的结果。

题目要求输出a、b、c3个变量中的最小值,所以当a

b。

同理,后一空应填c:

t1。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1