C语言基础知识 参考答案.docx
《C语言基础知识 参考答案.docx》由会员分享,可在线阅读,更多相关《C语言基础知识 参考答案.docx(45页珍藏版)》请在冰豆网上搜索。
C语言基础知识参考答案
第一章 C语言基础知识参考答案
一,选择题
1 C 2D 3 A 4 C 5 A 6 D
7C 分析:
C答案以数字开头了
8D 分析:
int 是关键字
9 C 10D 11B
12D 分析:
VisualC++6.0中int类型的变量占的字节数为4。
13B 分析:
B中出现了8,而八进制只能有0到7组成
14D 分析:
答案D中开头是0不是o
15A 16D 17B
18D 分析:
3.6-5/2+1.2+5%2=3.6-2+1.2+1=3.8本题目考察算术运算符,需要注意整数除
以整数结果只能是整数
19 A 20 C 21 A 22 C 23 D
24 C分析:
考察的是强制类型转换,正确的是k%(int)f
25 B 26 C 27 C 28 B
29 A分析:
本题目主要考察n++表达式的值是n变化之前的值,然后使n的值增加1
30 A
31 D分析:
(int)a+b/b=(int)5.5+2.5/2.5=5+1.000000=b=6.000000同样a,b的类型是
double型的
32 D分析:
long和short不能相互修饰
33 A 34 C 35 B
36 B分析:
C语言的标识符中只能包含字线、数字和下划线,没有连接符。
37 D分析:
不同的计算机系统或者编译系统,对3种整数类型所占用的字节数有不同的
规定。
38 B
39 A分析:
++运算符有前缀和后缀两种形式,本题中的选项C就是前缀形式,其表达
式的值为增1后的值,而选项A为后缀形式,其表达式的值为增1之前的值。
而选项B和D
的表达式都是k加1之后的值
40 D分析:
字符常量是用单引号括起来的单个字符,所以选项B错误;此外还有一种特殊的字符专为控制设计,称为转义字符,有三种转义字符:
一种是由一个“\”开头加一个普通字符组成,代表一个字符。
如’\’’表示一个单引号字符,所以选项D正确;’\\’表示一个斜杠字符,而选项C中的’\’则是错误的;用“\”与其后的1~3位八进制数字构成的字符序列,表示ASCII码等值于该八进制数的字符;用“\x”与其后的1~2位十六进制数字构成的字符序列,表示ASCII码等值于该十六进制数的字符;所以选项A错误。
41 B分析:
字符常量是用单引号括起来的单个字符,所以选项A正确;此外还有一种特殊的字符专为控制设计,称为转义字符,有三种转义字符:
一种是由一个“\”开头加一个普通字符组成,代表一个字符。
如’\n’表示一个换行符,所以选项D正确;用“\”与其后的1~3位八进制数字构成的字符序列,表示ASCII码等值于该八进制数的字符,所以选项B错误,因为9不是八进制数字;用“\x”与其后的1~2位十六进制数字构成的字符序列,表示ASCII码等值于该十六进制数的字符;所以选项C正确。
42 D 43 B 44 A
45 B分析:
选项A中字符’0’的ASCII码值为48,所以A的结果不为1;选项B中’\0’代表空值,空值NULL的ASCII码值为0所以结果为1;选项C中字符’1’的ASCII码值为49,所以结果不为1;选项D相当于用0-48结果也不为1。
46 D
如果要表示十六进制字符,则要用’\x’开头,所以选项A错误;如果要表示八进制,则’\0’开头,后面跟1~3位的八进制数,八进制数由0~7组成,不包含8,所以选项B错误;用单引号括起来的单个字符才是字符常量,所以C错误;而’\n’是转义字符,用来表示回车符。
47 C 先将c1变量中的字符的ASCII码值输出,即为65,将变量c2中字符的ASCII
码值减2后输出,即为66。
48 A变量c1和c2中的值相同,所以转换成二进制数后,对应的二进制位上的值也相同,
当两值相同时,只有进行异或运算,结果才为0,所以c1^c2值为0。
所以本题的正确答案为A。
二,填空题
1 位 0 1
2 关键字 预定义标识符 用户标识符
3 8
4 八 十 十六
5 int float double
6 5+3.6/2=5+1.8=6.8
7 15 16 a++表达式的值是a变化之前的值,当然a本身增加了1
8 把10赋给变量B
9 print('****a=%d,b=%d****')
10 3
整个表达式是一个逗号表达式,变量n和i赋值为2后,通过++i将i的值增加1变为3,
然后再通过i++为i增加1,整个逗号表达式的值为i++的值,此时是后缀,所以整个i++
表达式的值为3,而变量i的值为2。
第二章 顺序结构 参考答案
一选择题
1.C解析:
结构化程序的算法可以解决任何复杂的问题。
2.C解析:
C程序的基本组成单位是函数,在C程序中每行可以写多条语句,每条语句以分号结束,每条语句可以占用几行,在几行内写完。
3.C解析:
随意使用空语句会导致逻辑上出现错误,不要随便使用。
4.B 5.D 6.C 7.A 8.C
9.B解析:
在printf语句中,格式控制的个数只有一个,即%d,而输出项有两项,即a和b。
而得到的结果应该只有一个,所以应该输出第一个变量的值,即变量a的值。
10.C解析:
m=0256,即m是八进制的数0256,要以八进制无符号的形式输出,即输出256;n=256,即n是十进制的数256,也要以八进制无符号的形式输出,首先要把十进制数转化为八进制数,256转化为八进制为0400,以无符号形式输出,即输出400。
11.C解析:
第一个数据的输出控制宽度是2位,但是x的值是102,占3位,要输出的数据宽度大于规定的输出宽度,由于数据时右对齐方式,所以按数据的实际宽度输出,输出102。
第二个数据要求以十进制形式输出,输出控制宽度是2,y的值为012,是八进制数,所以要转换成十进制数10后再输出。
12.C 13.A
14.D解析:
floatx=-123.456;说明x为单精度浮点数据,单精度浮点数据对应的输出格式应该为%f。
15.D
16.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。
17.B解析:
输入控制中第一个数要求以“%2d”形式输入,即要求输入一个两位的数,而从键盘输入的数为876,所以从左到右取两位数字87,即把87赋值给整型变量a,余下的6再赋值给浮点型变量b,自动进行类型转换,b的值为6.000000,后面输入的543则没有赋值给变量。
18.B 19.B 20.A
21.A解析:
从键盘输入数据的格式必须与输入控制要求的格式一样,B答案三个之间不要有空格;C答案用逗号分开是多余的;D答案格式不匹配。
22.C
23.C解析:
x乘以100是为了把x小数点后的两位小数变为整数,再加上0.5,如果小数点后一位大于等于5则会进一位,如果小数点后一位小于5则不会出现进位的情况,再对其进行强制类型转换,采用舍去法丢掉小数部分,即对x乘上100后的数实现了小数位到整数位的四舍五入。
最后再除以100.0,把数字变回原来的大小,整数与浮点数相除结果为浮点数,即实现了要求。
24.C 25.A
26.D解析:
第1个输出语句要求ch以%c(字符)形式输出所以为输出“a”,以%d(整数)形式输出为,字符转换为整型要使用ASCII码所以为“97”,k没有对应的输出符所以没有输出,第2个输出语句要求以整型方式输出k得到“12”。
结果为“a,97,k=12”。
27.B 28.D
二.填空题
1.结构化
2.一条语句 分号
3.88
4.10
5.25 21 37
6.2
7.4
8.09
9.i=10,j=20
10.16
11.A空格B回车
12.B 65
13.34579
14.123
15.12
第三章选择结构参考答案
一、选择题
1、D逻辑运算符两侧运算对象可以是任意合法的表达式,应该是两条语句,所以选D。
2、A此题主要是考查C语言中if语句的合法条件表达式描述,在C语言中“不等于”用“!
=”描述而不是用“<>”描述。
B、C、D选项都是合法的表达式。
3、Dif语句的表达式可以是任意合法的表达式
4、D此题主要是考逻辑运算和关系运算的优先级别.只要掌握!
、算术运算和&&的优先级别便可选对.这几种运算符的具体优先级关系见见教材P188,附录三。
5、A此题主要是考逻辑运算符!
、&&和||之间的优先级别。
!
最高,&&次之,||最低。
先求得!
a为0,所以不必计算!
b的值,即!
a&&!
b的值为0,由c=0,!
c=1,而0||1=1,所以选A。
6、答案是B
C语言的字符以其ASCII码的形式存在,所以要确定某个字符是大写字母,只要确定它的ASCII码在’A’和’Z’之间就可以了,选项A和C符合要求。
大写字母的ASCII码值的范围为65到90,所以D选项符合要求,所以只有C是错误的。
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、C此题主要是从概念上考if和else的配对问题
9、A此题主要是从实际应用上考if和else的配对问题,a=1,则!
a的值是假,程序执行第一个if下的第一个else语句,在判断a==0显然条件为假查看第二个if是否有其配对的else,发现没有,则执行最后一条printf语句输出b的值,因为在整个过程中程序没有对b的值做任何改变,所以答案选择A.
10、D此题主要是考if和else的一般形式。
if后面的语句要么是单条语句,要么是由{}扩起来的复合语句,不能是if后有两条语句的,所以本题程序在运行的时候会出错。
11、C此题考到了关系运算和逻辑运算及一定数学知识。
|x-y|<10可等价为-1012、D此题也是考到了真假条件的变换和if-else语句。
A、B、C三项都是表示a为真时输出x,为假时输出y,而D则是a为假时输出x,为真时输出y。
13、D此题考查了赋值表达式的一般格式,=的左边是变量名,右边是表达式,所以D项错误。
14、C此题主要是考查逻辑值用整数值替代的结果,数0代表逻辑假,非零值代表逻辑真。
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、C此题考查逻辑与&&的运算工作特性,&&运算的是从左至右,当左边表达式的值为假时,右边的表达式则不执行,因本题中k1=k1>k2的值为0亦为假,该表达式是一个赋值语句,且此时k1的值为0,因而右边的表达式k2=k2>k1不执行,因此K2的值没有做任何改变。
值依然是20,所以本题选选B。
22、C此题考查的是真假条件的等价问题。
x-y为真表示x-y是非0的,也即x-y<0或x-y>0即选C。
23答案是B
满足表达式(c>=2&&c<=6)的整型变量c的值是2,3,4,5,6。
当变量c的值不为2,4,6
时,其值只能为3或5,所以表达式c!
=3和c!
=5中至少有一个为真,即不论c为何值,B
选项中的表达式的值都为真,所以B选项正确。
24答案是D举个例子 如x=3带入得出结果为0的选项是D选项。
25答案是D
条件x==0||x==1为真,所以执行y=1,然后执行
y=x*x-(x-2)*(x-2)=1-(-1)*(-1)=1-1=0,所以选择A。
26答案是B
此题考查if语句条件表达式后的语句块区分问题。
题中第一条if语句之后有两条赋值语句,但他们不在一个复合语句之内,所以只有a=b是直接附属于第一条if语句的,因此当a=3,b=5,c=7,则a>b为0,程序不执行a=b,但执行c=a此时c的值是3,在第二条if语句的条件表达式中c!
=a条件值为0,则不执行c=b因此最终a、b、c的值为3、5、3,因此选B
27答案是D
C语言的字符以其ASCII码的形式存在,所以要确定某个字符是大写字母,只要确定它的ASCII码在’A’和’Z’之间就可以了,选项B的书写格式错误,而选项C不符合要求。
大写字母的ASCII码值的范围为65到90,所以A选项不符合要求,小写字母的ASCII码比大写字母的ASCII码大32,所以只有D是正确的。
28答案是B,此题考查三目运算符的运算特性。
29答案是B,此题考查switch语句运算过程。
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答案是C,switch语句中开关条件必须是整型、字符型和float类型,此外强制类型转
换的格式C选项正确。
二、填空题
1、答案是:
(x%3==0)&&(x%7==0)
2、答案是:
4
分析:
程序中是一个if—else结构。
分析时要理清if与else的配对情况。
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、答案是:
非零
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后面的语句。
所以最后得到的结果应该是2 1,而不是1 0。
11、答案是:
0。
字符空格的ASCII码不为0,所以本题中表达式!
c的值为0,b=0&&1的结果显然为0。
12、答案是:
2。
此题考查逻辑或运算的运算特性,当||运算的左边的表达式值为1时则不进行右边表达式的计算。
此外对于自增运算a++的运算规则是先使用在自增。
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、答案是:
1217。
当从键盘输入x的值为12时,程序自上而下执行经过三个if条件判断第一个条件不满足,第二、第三两个都满足。
因此最终输出结果为1217。
16、答案是:
a:
b c:
t1。
条件表达式类似于if语句,根据“?
”前面子表达式的逻辑值来判断应该计算“:
”前面的子表达式还是后面的作为整个条件表达式的结果。
题目要求输出a、b、c3个变量中的最小值,所以当a
b。
同理,后一空应填c:
t1。
第四章循环结构参考答案
一、选择题:
1. B
解析:
a的值为1,a<6为真,执行循环体,b的值加a后为3,a的值加2后为3,b的值与10求余运算后值为3。
① a的值为3,a<6为真,执行循环体,b的值加a后为6,a的值加2后为5,b的值与10求余运算后值为6。
② a的值为6,a<6为真,执行循环体,b的值加a后为11,a的值加2后为7,b的值与10求余运算后值为1。
③ a的值为7,a<6为假,不执行循环体,直接输出a、b的值为7,1。
2. A
解析:
k的值为5,进入循环,(--k)表达式的值为4(真),同时k的值改变为4,输出表达式k-=3的值1,同时k的值为1。
k为1,表达式(—k)的值为0,结束循环。
3. A
解析:
X=0,y=5,z=3,(z>0&&x<4)值为真,进入循环体,y值为4,z值为2,x值为1
1. (z>0&&x<4)值为真,进入循环体,y值为3,z值为1,x值为2
2. (z>0&&x<4)值为真,进入循环体,y值为2,z值为0,x值为3
3. (z>0&&x<4)值为假,结束循环。
4. 输出x,y,z的值3,2,0
4. D
解析:
当K的值为3时,只执行case 3后面的语句n+=k,n的值为3;
当k的值为2时,先执行case 2后面的语句,但没有break,所以不会退出,继续执行case 3后面的语句n+=k,n的值为5;
当k的值为1时,先执行case 1后面的语句n+=k,n的值为6,先执行case 2后面的语句(没有),继续执行case 3后面的语句n+=k,n的值为7。
输出n的值7。
5. B
解析:
在循环体中有“s+=1;”s的初始值为0,要让s的值等于2必须是循环体执行两遍。
当循环提执行两遍后a的值等于-3,所以在n=-3的时候循环体执行两遍后条件表达试(a!
=0)为假,会退出循环。
6. B
解析:
程序开始时,y=10,while循环中执行y自减运算,值的注意的是他的循环体只是一个空语句,则由于自减运算y--的特点:
先使用后自减,因为当y的值减为0时,while循环结束,但y变量依然执行自减运算,此时y=-1。
因此最终输出的y的值为y=-1,因此选B。
7. A
解析:
x=3;先执行循环体,输出表达式x-=2的值1,同时x的值也改变成1,再判断表达式的值(!
x),x的值为1(真),(!
x)为假,循环结束。
8. B
解析:
分析:
B选项每次进入循环体,都要先执行p=1;即1赋值给p.所以不能求出5!
的值。
9. D
解析:
变量i每次增量为2,变化过程为:
1->3->5->7->9,语句s+=1每次执行使s增加的数为:
2,4,6,8,10,所以s的值为自然数1~10中偶数的值。
10. C
解析:
C项s=s+1/n,1/n首先运算,n为整型变量,1也是整型变量,当n=2…10时,1/n的值为整数0,故C不正确
11. B分析过程与第6题类似。
12. C
13. A
从键盘输入123450后,程序从main函数开始执行,先将1读入到s变量中,while的判断条件s>0成立,则执行循环体。
循环体语句是一个switch结构的语句,依据s的值去执行相应的case语句,直到碰到break语句跳出switch结构。
第一次