版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目 录第一章 C语言基础知识 参考答案- 2 -第二章 顺序结构 参考答案- 5 -第三章 选择结构 参考答案- 7 -第四章 循环结构 参考答案- 11 -第五章 函数 参考答案- 15 -第六章 指针 参考答案- 18 -第七章 一维数组 参考答案- 21 -第八章 二维数组 参考答案- 28 -第九章 字符串 参考答案- 31 -第十章 对C语言的深入讨论 参考答案- 33 -第十一章 结构体与共用体 参考答案- 34 -第十二章 文件 参考答案- 35 -第一章 C语言基础知识 参考答案一,选择题1 C2 D3 A4 C5 A6 D 7 C 分析:C答案以数字开头了 8 D 分析:in
2、t 是关键字9 C10 D11 B 12 D 分析:Visual C+6.0中int类型的变量占的字节数为4。13 B分析:B中出现了8,而八进制只能有0到7组成14 D分析:答案D中开头是0不是o15 A16 D17 B18 D分析:3.6-5/2+1.2+5%2=3.6-2+1.2+1=3.8本题目考察算术运算符,需要注意整数除以整数结果只能是整数19 A20C21A22 C23 D24 C分析:考察的是强制类型转换,正确的是k%(int)f 25B26 C27 C28 B29 A分析:本题目主要考察n+表达式的值是n变化之前的值,然后使n的值增加130 A31 D分析:(int)a+b/
3、b=(int)5.5+2.5/2.5=5+1.000000=b=6.000000同样a,b的类型是double型的32 D分析:long 和short不能相互修饰33 A34 C35 B36 B分析:C语言的标识符中只能包含字线、数字和下划线,没有连接符。37 D分析:不同的计算机系统或者编译系统,对3种整数类型所占用的字节数有不同的规定。38 B39 A分析:+运算符有前缀和后缀两种形式,本题中的选项C就是前缀形式,其表达式的值为增1后的值,而选项A为后缀形式,其表达式的值为增1之前的值。而选项B和D的表达式都是k加1之后的值40 D分析:字符常量是用单引号括起来的单个字符,所以选项B错误;
4、此外还有一种特殊的字符专为控制设计,称为转义字符,有三种转义字符:一种是由一个“”开头加一个普通字符组成,代表一个字符。如表示一个单引号字符,所以选项D正确;表示一个斜杠字符,而选项C中的则是错误的;用“”与其后的13位八进制数字构成的字符序列,表示ASCII码等值于该八进制数的字符;用“x”与其后的12位十六进制数字构成的字符序列,表示ASCII码等值于该十六进制数的字符;所以选项A错误。41 B分析:字符常量是用单引号括起来的单个字符,所以选项A正确;此外还有一种特殊的字符专为控制设计,称为转义字符,有三种转义字符:一种是由一个“”开头加一个普通字符组成,代表一个字符。如n表示一个换行符,
5、所以选项D正确;用“”与其后的13位八进制数字构成的字符序列,表示ASCII码等值于该八进制数的字符,所以选项B错误,因为9不是八进制数字;用“x”与其后的12位十六进制数字构成的字符序列,表示ASCII码等值于该十六进制数的字符;所以选项C正确。42 D43 B44 A45 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开头,后面跟13
6、位的八进制数,八进制数由07组成,不包含8,所以选项B错误;用单引号括起来的单个字符才是字符常量,所以C错误;而n是转义字符,用来表示回车符。47 C先将c1 变量中的字符的ASCII码值输出,即为65,将变量c2中字符的ASCII码值减2后输出,即为66。48 A变量c1和c2中的值相同,所以转换成二进制数后,对应的二进制位上的值也相同,当两值相同时,只有进行异或运算,结果才为0,所以c1c2值为0。所以本题的正确答案为A。二,填空题1 位 0 12 关键字 预定义标识符 用户标识符3 84 八 十 十六5 int float double6 5+3.6/2=5+1.8=6.87 15 16
7、 a+表达式的值是a变化之前的值,当然a本身增加了18 把10赋给变量B 9 printf(“*a=%d,b=%d*”,a,b); 10 3整个表达式是一个逗号表达式,变量n和i赋值为2后,通过+i将i的值增加1变为3,然后再通过i+为i增加1,整个逗号表达式的值为i+的值,此时是后缀,所以整个i+表达式的值为3,而变量i的值为2。11、112、3第二章 顺序结构 参考答案一 选择题1.C 解析:结构化程序的算法可以解决任何复杂的问题。2.C 解析:C程序的基本组成单位是函数,在C程序中每行可以写多条语句,每条语句以分号结束,每条语句可以占用几行,在几行内写完。3.C 解析:随意使用空语句会导
8、致逻辑上出现错误,不要随便使用。4.D5.D6.B7.A8.C9.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位,要输出的数据宽度大于规定的输出宽度,由于数据
9、时右对齐方式,所以按数据的实际宽度输出,输出102。第二个数据要求以十进制形式输出,输出控制宽度是2,y的值为012,是八进制数,所以要转换成十进制数10后再输出。12.C13.A14.D 解析:float x=-123.456;说明x为单精度浮点数据,单精度浮点数据对应的输出格式应该为%f。15.C16.D.解析:m遵循从右向左结合的原则;m的值为m自增之前的值,所以执行完xm以后,x被赋值为3;表达式xx8/+n中有加号除号,先算8/+n,+n的值为自增之后的值为5,8/5取整为1,即xx8/+n转化为xx1,即把x1的值赋给x,x的值变为2。17.B 解析:输入控制中第一个数要求以“2d
10、”形式输入,即要求输入一个两位的数,而从键盘输入的数为876,所以从左到右取两位数字87,即把87赋值给整型变量a,余下的6再赋值给浮点型变量b,自动进行类型转换,b的值为6.000000,后面输入的543则没有赋值给变量。18.B19.B20.A21.A 解析:从键盘输入数据的格式必须与输入控制要求的格式一样,B答案三个之间不要有空格;C答案用逗号分开是多余的;D答案格式不匹配。22.C23.C 解析:x乘以100是为了把x小数点后的两位小数变为整数,再加上0.5,如果小数点后一位大于等于5则会进一位,如果小数点后一位小于5则不会出现进位的情况,再对其进行强制类型转换,采用舍去法丢掉小数部分
11、,即对x乘上100后的数实现了小数位到整数位的四舍五入。最后再除以100.0,把数字变回原来的大小,整数与浮点数相除结果为浮点数,即实现了要求。24.C25.A26.D 解析:第1个输出语句要求ch以%c(字符)形式输出所以为输出“a”,以%d(整数)形式输出为,字符转换为整型要使用ASCII码所以为“97”,k没有对应的输出符所以没有输出,第2个输出语句要求以整型方式输出k得到“12”。结果为“a,97,k=12”。27.C28.D二填空题1.结构化2.一条语句 分号3.884.115.25 21 376.27.58.099.i=10,j=2010.1611.AB回车12.B 6513.34
12、57914.12<CR>315.12第三章 选择结构 参考答案一、选择题1、D 逻辑运算符两侧运算对象可以是任意合法的表达式,应该是两条语句,所以选D。2、A 此题主要是考查C语言中if语句的合法条件表达式描述,在C语言中“不等于”用“!=”描述而不是用“<>”描述。B、C、D选项都是合法的表达式。3、D if语句的表达式可以是任意合法的表达式4、D 此题主要是考逻辑运算和关系运算的优先级别.只要掌握!、算术运算和&&的优先级别便可选对.这几种运算符的具体优先级关系见见教材P188,附录三。5、A 此题主要是考逻辑运算符!、&&和|之间的
13、优先级别。!最高,&&次之,|最低。先求得!a为0,所以不必计算!b的值,即!a&&!b的值为0,由c=0,!c=1,而0|1=1,所以选A。6、答案是BC语言的字符以其ASCII码的形式存在,所以要确定某个字符是大写字母,只要确定它的ASCII码在A和Z之间就可以了,选项A和C符合要求。大写字母的ASCII码值的范围为65到90,所以D选项符合要求,所以只有C是错误的。7、D 此题考到了+运算符以及逻辑运算。当计算机碰到a&&b时,先计算表达式a的值,若为真才会计算表达式b的值,否则将不会去计算b的值,因为一旦a=0,则0&&b
14、必为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是否有其配对的e
15、lse,发现没有,则执行最后一条printf语句输出b的值,因为在整个过程中程序没有对b的值做任何改变,所以答案选择A.10、D 此题主要是考if和else的一般形式。if后面的语句要么是单条语句,要么是由 扩起来的复合语句,不能是if后有两条语句的,所以本题程序在运行的时候会出错。11、C 此题考到了关系运算和逻辑运算及一定数学知识。|x-y|<10可等价为-10<x-y<10,首先选项A表示x-y的绝对值小于10,与题中的数学关系一样;将-10<x-y<10用逻辑表达式表示的话就是B选项;而D选项只是数学变换,所以选择C12、D 此题也是考到了真假条件的变换和
16、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表达式的结果为假,所以也不执行其下面的语句,因此执行最后一条语
17、句,将输出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 此题考查的是条件表达式求解问题。先看第一个条件表达式语句,a<b为真,所
18、以k=b=2;再看第二个条件表达式语句,k>c为假,所以k=k=2选 B21、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&&
19、;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
20、=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,因此选B27 答案是DC语言的字符以其ASCII码的形式存在,所以要确定某个字符是大写字母,只要确定它的ASCII码在A和Z之间就可以了,选项B的书写格式错误,而选项C不符合要求。大写字母的ASCII码值的范围为65到90,所以A选项不符合要求,小写字母的ASCII码比大写字母的ASCII码大32,所以只有D是正确的。28 答案是B,此题考查三目运算符的运算特性。29 答案是B,此题考查switch语句运算
21、过程。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结构,回到外层。程序继续执行case 2后面的语句a+;b+;,这使变量a,b的
22、值分别为2和1,外层switch语句结束。所以此题选择D。33 答案是C,switch语句中开关条件必须是整型、字符型和float类型,此外强制类型转换的格式C选项正确。二、填空题1、答案是:(x%3=0)&&(x%7=0)2、答案是: 4分析:程序中是一个ifelse结构。分析时要理清if与else的配对情况。3、答案是:4,5,99分析:题中的重点在于两个if结构,大家要注意两点:第一,如果if后面没有花括号,则它后面的第一条语句是它的结构体,并且只有一条语句。(如果后面是一个结构,则整个结构都属于if结构的结构体)。第二,变量在不断的被重新赋值,所以其值在不断的变化。4、
23、答案是:yes,分析:该题与第二题是同一回事。5、答案是:1。分析:这个题还上一个ifelse结构,考查点仍然是考察考生是否能够正确识别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,仍然为真,再输
24、出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的值
25、,p/10得3。10、答案是:2 1。分析:题中是一个switch嵌套结构。里面的switch是case 1的语句,题的关键点在于这个语句(即里面的这个switch结构)的后面并没有跳出整个结构的break语句。所以,当x=1,与case相配以后,执行完后面的语句(即里面的这个switch结构),然后没有遇到break语句,所以并不跳出结构体,而是继续执行case 2后面的语句。所以最后得到的结果应该是2 1,而不是1 0。11、答案是:0。字符空格的ASCII码不为0,所以本题中表达式!c的值为0,b=0&&1的结果显然为0。12、答案是:2。此题考查逻辑或运算的运算特性,当
26、|运算的左边的表达式值为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、答案是:12 17。当从键盘输入x的值为12时,程序自上而下执行经过三个if
27、条件判断第一个条件不满足,第二、第三两个都满足。因此最终输出结果为12 17。16、答案是:a:b c:t1。条件表达式类似于if语句,根据“?”前面子表达式的逻辑值来判断应该计算“:”前面的子表达式还是后面的作为整个条件表达式的结果。题目要求输出a、b、c3个变量中的最小值,所以当a<b时,应该选a,否则选b,帮前一空应填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
28、后为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值为11 (z>0&&x<4)值为真,进入循
29、环体, y值为3,z值为1, x值为22 (z>0&&x<4)值为真,进入循环体, y值为2,z值为0, x值为33 (z>0&&x<4)值为假,结束循环。4 输出x,y,z的值3,2,04. 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,
30、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 解析:x3; 先执行循环体,输出表达式x-=2的值1,同时x的值也改变成1
31、,再判断表达式的值(!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的值为自然数110中偶数的值。10. C 解析:C项s=s+1/n, 1/n首先运算,n为整型变量,1也是整型变量,当n=210时,1/n的值为整数0,故C不正确11. B 分析过程与第6题类似。12. C13. A从键盘输入 1 2 3 4 5 0后,程序从main函
32、数开始执行,先将1读入到s变量中,while的判断条件s>0成立,则执行循环体。循环体语句是一个switch结构的语句,依据s的值去执行相应的case语句,直到碰到break语句跳出switch结构。第一次s为1,执行case 1: 此时输出6,没有碰到break语句,继续执行case 2:输出5,紧接着碰到break语句跳出本次switch结构。然后程序再次读入整数2再次执行while循环。此题需要理解switch语句的执行过程。14. D 解析:在循环中当x等于0,3,6,9时x%3等于0,这时会进入if语句执行printf语句,在输出前x会先自加。屏幕上输出14710。15. D
33、解析: 注意a变量在for循环的表达式3和循环体中都有改变。16. 2345 解析:选择中没有此答案。本题注意的是在循环第一次进入switch语句的时候是执行的default后面的语句块,由于没有break,所以还会执行case2:case4:后面的语句。17. A解析: 首先执行+n,判断条件表达式n<=0为假退出循环。B条件表达式1永远为真是无限循环,C条件表达式n的值为10永远为真是无限循环,D没有条件表达式,所以没有退出条件,是无限循环。此题要注意的是0为假,非0为真。18. B解析:此题考查for语句的嵌套以及if语句的执行。此题输出的结果是m=1。分析:第一次循环 i=1,j
34、=319. D 解析:第一次循环x=8,x%3<>0,进入if语句输出x的值为8,然后x自减1,执行continue立即进行下次循环条件判断。第二次循环x=6,x%3=0,不进入if语句,执行if语句后面的printf(“%d,”,-x),x先自减1再输出得到5。第三次循环x=4,x%3<>0,进入if语句输出x的值为4,然后x自减1,执行continue立即进行下次循环条件判断。第四次循环x=2,x%3<>0,进入if语句,输出x的值为2,然后x自减1,执行continue立即进行下次循环条件判断。第五次循环x=0,判断表达式x>0为假。结束循环输出
35、结果为8,5,4,2。答案D20. C解析:第一次循环a=0,a%2=0,进入if语句的else部分输出字符A,第二次循环a=1,a%2=1,进入if语句输出字符2, 第三次循环a=2,a%2=0,进入if语句的else部分输出字符C, 第四次循环a=3,a%2=1,进入if语句输出字符4, 第五次循环a=4,a%2=0,进入if语句的else部分输出字符E, 第六次循环a=5,a%2=1,进入if语句输出字符6,此时a=6,跳出循环,因此最终结果输出:A2C4E6。21. A22. B 解析:外层循环3次,i的值在内层循环中依次为1,2,3内层循环次数依次为3,2,1次。23. D 解析:代
36、码“if(n%3!=0) continue;”无实际意义。当n自加到4的时候结束循环。答案D。24. D解析: 表达式2为赋值语句k=1,条件永远为真,会进入死循环。答案D25. A 解析:0%任何数等于0,所以第一次循环的时候就进入了if语句退出了for循环。i=21,i<20为假,退出了while循环。a的值为21。26. D 解析:i的初值为0,第一次循环的时候满足i<0,进入第一个if语句,执行continue直接进行下次循环,i的值没有改变。第二次循环又重复了第一次循环的操作,所以是死循环。27. B解析: 控制每行输出“*”号的过程。一共四行,每行输出奇数个。二填空题:
37、1. 7 解析:从键盘输入14 63后程序将14赋给变量m,63赋值给变量n,最外层的while条件m!=n为真,进入循环体。循环体语句是两组while循环,依次计算改变m、n的值直到m=n时程序结束,因此最终输出m的值为7。2. 11解析:循环的判断表达式为i<5,i的初值是1,所以i得值依次是1,2,3,4。sum=sum+1+2+3+4,sum的值等于11.答案是113. n=n/10 解析:此题的解法是先用输入的数据%10可以得到个位数,再让输入的数据除以10,使十位变成个位。循环使用上面的方法。当只剩下个位的时候也就是n小于10的时候n/10等于0退出循环。所以填入的是“n=n
38、/10”。4. 3 4解析:此题考查for循环语句的执行机制。表达式3在跳出循环前会执行一遍,因此i的值最后为3。5. 5解析:for循环语句的循环体是空语句。6. 6 解析:此题属于循环的嵌套。当i=1时,输出0个号,当i=2时,输出1个号,当i=3时,输出2个号,当i=,4时,输出3个号,共输出6个号。7. 0 解析:getchar()只能获得单个字符,输入“1234567890”ch的值为1。循环条件为假,循环一次也没有执行。答案为:0 8. 23 解析:参考第3题。答案:543219. k<=n k+解析: 见书59,64页while和for循环的执行过程。答案:k<=n
39、k+10. ACE解析:理解字符转化为整形数使用到ASCII码,a的ASCII码是97,f是102,A是65。答案是ACE11. k<=n12. 23 解析:此题需理解的是在switch中case后面没有break的话会继续执行下一个case或default后面的语句。答案为2313. 1 3 2 解析:m=0,n=0,k=0,i=9当i值为9时,i<=11为真,执行switch语句,(i/10)的值为0,匹配case 0,执行m+,n+,再执行break语句,跳出switch体,再执行i+, i值为10;此时m值为1,n的值为1,k的值为0.当i值为10时,i<=11为真,
40、执行switch语句,(i/10)的值为1,匹配default,执行k+,n+,结束switch体,执行i+,i值为11. 此时m值为1,n的值为2,k的值为1.当i值为11时,i<=11为真,执行switch语句,(i/10)的值为1,匹配default,执行k+,n+,结束 switch体,执行i+,i值为12. 此时m值为1,n的值为3,k的值为2. i值为12时,i<=11为假,结束for循环。最后输出m,n,k的值132.14. i<10 i%3 解析:根据题意先得到100以内所有个位是6的数,在判断哪些能被3整除。答案为i<10 i%3!=0。15. 074
41、 解析:当a的值为0时,a<20为真,则执行b=a%10后b的值为0,执行putchar函数后输出字符0,for循环中表达式3中每次a递增7,所以第二次循环时,a的值为7,a<20为真,则执行b=a%10后b的值为7,执行putchar函数后输出字符7。第三次a的值为14,a<20为真,则执行b=a%10后b的值为4,执行putchar函数后输出字符4,此时执行表达式3后a的值为21,a<20条件为假,循环结束。因此最终答案为输出:074第五章 函数 参考答案一 选择题1.C 解析:在C程序的书写时,严格的缩进要求可以增强程序的可读性,但是不会影响程序的编译于运行。2.
42、B 解析:在C程序中必须有且仅有一个主函数为main函数,它是程序的入口和出口。但是没有规定它在程序中具体的位置。3.A4.B5.A 解析:函数的实参可以使被调用函数的调用语句。但是总之函数的实参个数之间用逗号隔开,个数,类型分别于形参的一一对应。6.B 解析:当程序在函数体中执行时,遇到return语句结束函数的调用。即使函数体中有多个return语句,但是遇见第一个return语句时函数的调用就结束了,后面的return语句是不会再执行的(也就是说即使有多条return语句,最终执行的只有一句)。而返回值是void类型的函数一般有return语句是缺省的,如果要有不能return语句后面不
43、能有返回值,可以是return;;如果函数体中没有使用return语句,当函数调用结束后,还是会回到调用处的。7.B 解析:其他解析同上。return语句中可以有表达式和常量,变量等。8.D.解析:调用语句可以出现在表达式,实参和当一句话独立存在,但是不能出现在形参中,形参一般情况下是变量。9.C 解析:考察的是函数的调用;其中的实参有两个,实参1为逗号表达式最终的值,实参2为自增表达式的值。10.C解析:f1(x,y)的作用是返回x、y中较大的,f2(x,y)的作用是返回x、y中较小的。d=f1(a,b)=f1(4,3)=4d=f1(d,c)=f1(4,5)=5e=f2(a,b)=f2(4,
44、3)=3e=f2(e,c)=f2(3,5)=3此时各值为a=4,b=3,c=5,d=5,e=3,f=a+b+c-d-e=4。所以答案d, f , e为5, 4, 311.A解析:函数不能嵌套调用,但是可以自己调用自己成为递归;被调用函数在调用之前可以先声明,再调用,后定义;构成C程序的基本单位是函数而不是语句。12.C 解析:fun1(a)=a2,fun2(x,y)=(int)(fun1(x)+fun1(y)=(int)( x2+ y2),所以fun1(1.1,2.0)=(int)(1.21+4.0)=(int)5.21=5由于w是double型的,所以w的值为5.0。13.C 解析:函数的值
45、是单向传递的,只能是从实参传到形参,而且只有当从实参传到形参时才为形参分配一定的存储空间。等函数调用结束后,这个空间就会被释放掉。14.B 解析:考察函数的调用。调用语句中的实参有两个,实参1为表达式2*a,其值为8,实参2为调用语句fun(b,c),在这个调用语句中又有两个实参分别传给fun函数的形参a和b,调用结束后返回的值为5;故实参2的最终值为5,再次调用函数fun,分别把8传给a,把5传给b,最后返回的结果值为6.故答案选B.15.C 解析:函数不能嵌套定义。改变形参的值不会影响实参的值。函数体中要使用C中的库函数,得包含定义其所在的头文件。16.A 考察的是函数的声明。在函数声明时
46、,声明是一句话,其中形参的类型不能省略,但是形参名可以省略;声明时形参名可以和定义时的形参名不相同,但是类型必须匹配;声明时必须指出函数的返回值类型和名称,这两点必须与定义时的返回值类型和名称一一对应。17. B 解析:允许这种函数说明的方式存在。如果只在主函数中说明,则只能在主函数中调用f;如果在主函数以前说明,则包括主函数的所有函数都可以调用,如果同时主函数又说明了,则不影响。18. B19. C20. A 解析:程序的执行总是从main函数开始,在main函数结束,无论main函数在程序的什么地方。21. D22. A 解析:函数f(int v,int w)的功能是将实参v和w进行交换,
47、但是实参值的变化对形参没有影响,所以本题中x,y,z中的值不发生变化。23. C 解析:本题考察的是函数的递归调用。在解决这类题时,先找出何时被调用函数调用结束,然后确定被调用函数总共被调用了几次。再分析最终的结果。24. B上面已经分析过同类问题。25. A 考察的还是递归调用的问题。26. B.同时。27. A.解析:在主函数中确定循环的次数为三次,实参i的值分别为0,10.20.故调用f函数的次数为3次;故结果为1+101+401=503.28. B.解析:主函数中第一次调用fun函数时实参为3,故调用fun函数时在函数体中循环了3次,输出了3个*;第二次调用fun函数时实参为4,故输出
48、了4个*;由此可以确定选择B答案。29. B30. D 主函数的循环语句中对fun函数总共调用了4次,每次都返回形参a的值;只有在把值从实参传给形参时才为形参分配存储空间,等函数调用结束,这个空间会消失掉。所以形参a的值在每次调用时都为2,故最后主函数中的s的值为2*2*2*2=16.二填空题1. 1.0,1.0,1.0解析:分别求出变量的初始值。a=a*x为的是求xn ,所以其初始值为1,b=b*i位的是求n!,所以其初始值为1,当n=0时,s=1,所以s的初始值为1。由于定义的是double型的数据,所以答案为a=1.0,b=1.0,s=1.0;2.m=fun(a,4)+fun(b,4)-
49、fun(a+b),4);解析:由程序可以看出fun(x,n)=xn。fun(a,4)=a4, fun(b,4)=b4,fun(a+b,3)=(a+b)3,当要计算m= a4+ b4+(a+b)3 时,函数调用语句为m= fun(a,4)+ fun(b,4)+ fun(a+b,3);3. x,x*x+1解析:1)求f(x)的累加和,即为求f(0)+f(1)+ f(2)+ f(3)+ f(4)+,函数SunFun来实现此功能。括号中应该填入累加的序号值,即为x。2)f(x)=x2+1,F(int x)函数来实现这个功能,所以填写x*x+1。4. 5.0解析:fun1(a)=a2,fun2(x,y)
50、=(int)(fun1(x)+fun1(y)=(int)( x2+ y2),所以fun1(1.1,2.0)=(int)(1.21+4.0)=(int)5.21=5由于w是double型的,所以w的值为5.0。5. 1 3 解析:fun函数是一个递归函数,主函数中调用的fun(3)共递归两次,fun(3)中又调用fun(3/2)即fun(1),先输出fun(1)中x的值,为1,然后再输出fun(3)中x的值为3。所以结果为1 3。6. double max解析:通过程序可以看出,main函数中使用了max函数,而其他地方没有对max函数进行说明。所以程序中应该对max函数进行说明。说明的格式为d
51、ouble max(double,double)。7.3,2,2,3 解析:同课本本章第三节例1。8. 2 5解析:同上面第5题相类似。9. 5510. 30 0第六章 指针 参考答案一、选择题1 答案:A 分析:本题主要考指针赋值,n2=n1;是把n2的值赋给n1,故根据指针赋值的定义可知选A,即把q所指对象的值赋给p所指对象。2 答案:B 分析:本题主要考指针定义,因为p指向变量x,故输出其值的时候应该是x的值。3 答案:C 分析:本题主要考指针的定义和赋值,C前面是定义一个量a并赋值为10,后面定义一个指针,并把a的值赋给这个指针。4 答案:D5 答案:A分析:本题主要考的是指针的变量的
52、赋值,在使用scanf()函数的时候,后面跟的是一个地址,由于pa本身保存的是地址,故选A6 答案:D分析:本题主要考的指针的赋值及指向指针的指针的赋值,根据定义知选D。B的正确形式是*q2;C的正确形式应该是q=&p。7 答案:C分析:本题主要考的是全局变量和局部变量,以及指针的用法,第一个f(&a)的返回值是5,第二个返回值是2。8 答案:A 分析:本题主要考的是变量自加,指针传值,以及指针的赋值。通过第二行a=b可知p1,p2指向的变量的值相同,都指向了b所指的对象,也是p2所指的对象a,由于(*a)+;是实现a所指对象的自加,故由a变成b,故最终选A。9 答案:A 分析
53、:本题主考NULL,一般来说当我们把一个空值以整数的形式输出出来的时候,默认的情况是0。10 答案:C11 答案:C 分析:本题主要考指针的指针,c先指向b,b是一个指针,它指向a,故c最终是指向a的,故其值是a中的值。12 答案:A 分析:本题主要考指针的赋值,我们不能把一个具体的值赋给一个指针变量。B选项是w,p指向同一对象。C是p指向a。D是把w所指对象的值赋给p所指对象。13 答案:B 分析:本题主要考指针传值,p,q分别指向a,b,然而r会指向它们的较小值。14 答案:D 分析:在D中把一个整形变量的值赋给一个指针的地址,故而是错的。应该写成p=&a。15 答案:D16 答案
54、:D17 答案:C 分析:本题主要考指针标识符*和乘号*的区别,*p=*p1*(*p2)中第1,2,4个*号是指针标识符,而第三个是乘号,故其运算的结果是3。18 答案:A19 答案:A 分析:本题主要说的是函数的递归调用,函数fun()实现的功能是从1加到n,然后返回给主函数。20 答案:D分析:A不能把一个具体的值赋给一个指针变量。B q是指向指针的指针只能保存指针的地址。C同B。21 答案:D分析:A指针赋处初值时不能把一个具体的值赋给一个指针变量指向的地址。B语法错误,C不能发地址赋给浮点型变量。22 答案:C分析:scanf()函数的输入数据列表应该是合法的地址表达式。23 答案:D
55、分析:A中b需要预先定义,B中字符变量b只能接收单个字符。C中二级指针应定义为*c。24 答案D25 答案:B二、填空题1 答案:8 4 分析:void f()函数里的x,y分别是一个指针变量和整型变量,指针x指向一个整型的变量,即指向主函数里的x,故在函数void f()里修改指针x的值,会影响到主函数里的x的值,但修改void f()里的y的值却不会影响到主函数里的y的值。因为主函数x传的是地址,y传的是值。2 答案:d。 3 答案:35分析:p,q分别指向x,y,然后调用函数swap();它的功能是把两个指针所指向的对象交换,原来a,b分别指向x,y,但交换后分别指向y,x,所以并不把指
56、向的对象的值交换。 函数返回后,p,q仍然分别指向x,y。故其值不变。4 答案: n=n/10分析:把n除以10,每执行一次就可以把数的阳未位去掉,因为两个整数相除,不会保留小数,故最低位会丢掉,并且把数缩小到十分之一。然后依次从个位到最高位把数字输出。5 答案:654321第七章 一维数组 参考答案一选择题1. 答案:B分析:A答案,初始化值的个数超过了常量表达式的值。C答案,左边定义的是普通字符变量。D答案,整型数组不能赋字符串。2. 答案:D考点:一维数组的定义分析:一维数组定义的形式为:类型名 数组名常量表达式注意点:(1)常量表达式不能省略,不能为变量,但可以使宏定义名 (2)数组名是用户定义标识符。A答案中没有02008这种形式的常量表达式。B中省略了常量表达式,因此是错误的。C答案常量表达式不能为
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 成都市龙泉驿区青台山中学校2025年秋季教师招聘备考题库及参考答案详解一套
- 2025-2026学年新动态英语绘本教学设计
- 2025-2026学年VR在线教学设计指导
- 2025-2026学年语言《找朋友》教案
- 2025-2026学年角的定义教学设计
- 2025-2026学年口语交际讲解教案
- 2025-2026学年教学设计模板制作软件app
- 2025-2026学年教学设计我爱家长
- 2025-2026学年我的小鱼教案
- 广东机电职业技术学院《现代农业创新与乡村振兴战略》2024-2025学年第二学期期末试卷
- 根及根茎类中药的鉴定(中药鉴定学课件)
- DB32∕T 2678-2014复合浇注式沥青钢桥面铺装设计与施工 技术规范
- 《工程勘察设计收费标准》(2002年修订本)-完整版-1
- 有关酒的论文开题报告
- 收款后撤诉的承诺书
- 科普肾脏病知识
- DB11-T 213-2022 城镇绿地养护技术规范
- 《机器人竞赛与实训》教学大纲
- QB/T 6019-2023 制浆造纸专业设备安装工程施工质量验收规范 (正式版)
- 人教版九年级单词默写汉译英打印版
- 2024年山东烟台高三一模语文试题答案详解讲评课件
评论
0/150
提交评论