《C语言-习题集参考答案全部(89页).doc》由会员分享,可在线阅读,更多相关《C语言-习题集参考答案全部(89页).doc(92页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-目 录第一章 C语言基础知识 参考答案- 2 -第二章 顺序结构 参考答案- 5 -第三章 选择结构 参考答案- 7 -第四章 循环结构 参考答案- 11 -第五章 函数 参考答案- 15 -第六章 指针 参考答案- 18 -第七章 一维数组 参考答案- 21 -第八章 二维数组 参考答案- 28 -第九章 字符串 参考答案- 31 -第十章 对C语言的深入讨论 参考答案- 33 -第十一章 结构体与共用体 参考答案- 34 -第十二章 文件 参考答案- 35 -第 - 92 - 页-第一章 C语言基础知识 参考答案一,选择题1 C2 D3 A4 C5 A6 D 7 C 分析:C答案以数字开
2、头了 8 D 分析:int 是关键字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
3、分析:(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 A34 C35 B36 B分析:C语言的标识符中只能包含字线、数字和下划线,没有连接符。37 D分析:不同的计算机系统或者编译系统,对3种整数类型所占用的字节数有不同的规定。38 B39 A分析:+运算符有前缀和后缀两种形式,本题中的选项C就是前缀形式,其表达式的值为增1后的值,而选项A为后缀形式,其表达式的值为增1之前的值。而选项B和D的表达式都是k加1之后的值40 D分析:字符常量是用单引号括起来的单
4、个字符,所以选项B错误;此外还有一种特殊的字符专为控制设计,称为转义字符,有三种转义字符:一种是由一个“”开头加一个普通字符组成,代表一个字符。如表示一个单引号字符,所以选项D正确;表示一个斜杠字符,而选项C中的则是错误的;用“”与其后的13位八进制数字构成的字符序列,表示ASCII码等值于该八进制数的字符;用“x”与其后的12位十六进制数字构成的字符序列,表示ASCII码等值于该十六进制数的字符;所以选项A错误。41 B分析:字符常量是用单引号括起来的单个字符,所以选项A正确;此外还有一种特殊的字符专为控制设计,称为转义字符,有三种转义字符:一种是由一个“”开头加一个普通字符组成,代表一个字
5、符。如n表示一个换行符,所以选项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错误;如果要表示八进
6、制,则0开头,后面跟13位的八进制数,八进制数由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.
7、8=6.87 15 16 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 解析:输入控
10、制中第一个数要求以“2d”形式输入,即要求输入一个两位的数,而从键盘输入的数为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、12.B 6513.3457914.12315.12第三章 选择结构 参考答案一、选择题1、D 逻辑运算符两侧运算对象可以是任意合法的表达式,应该是两条语句,所以选D。2、A 此题主要是考查C语言中if语句的合法条件表达式描述,在C语言中“不等于”用“!=”描述而不是用“”描述。B、C、D选项都是合法的表达式。3、D if语句的表达式可以是任意合法的表达式4、D 此题主要是考逻辑运算和关系运算的优先级别.只要掌握!、算术运算和&的优先级别便可选对.这几种运算符的具体优先级关系见见教材P188,附录三。5、A 此题主要是考逻辑运算符!、&和|之间的优先级别。!最高,&次之,|最低。先求得!a为0
13、,所以不必计算!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必为0;而a|b则正好是相反的,即先计算表达式a的值,若a为假才会计算表达式b的值,否则将不会去计算b的值,因为一旦a=
14、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 此题主要
15、是考if和else的一般形式。if后面的语句要么是单条语句,要么是由 扩起来的复合语句,不能是if后有两条语句的,所以本题程序在运行的时候会出错。11、C 此题考到了关系运算和逻辑运算及一定数学知识。|x-y|10可等价为-10x-y10,首先选项A表示x-y的绝对值小于10,与题中的数学关系一样;将-10x-ybc的值为0,所以不执行第一条语句;在判断第二个条件,c-1=c表达式的结果为假,所以也不执行其下面的语句,因此执行最后一条语句,将输出d+2的值为4 。17、C 此题主要是考查条件表达式和条件运算符。首先要注意条件表达式的结合方向,它是从右至左的(可参照附录三) 第一个条件表达式的值
16、为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选 B21、C 此题考查逻辑与 & 的运算工作特性,&运算的是从左至右,当左边表达式的值为假时,右边的表达式则不执行,因本题中 k1=k1k2的值为0亦为假
17、,该表达式是一个赋值语句,且此时k1的值为0,因而右边的表达式k2=k2k1不执行,因此K2的值没有做任何改变。值依然是20,所以本题选选B。22、C 此题考查的是真假条件的等价问题。x-y为真表示x-y是非0的,也即x-y0 即选C。23 答案是B满足表达式(c=2&cb为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不符
18、合要求。大写字母的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结构影响较
19、大,而此程序中的第一个case后没有break语句,程序执行时,x=1,执行内嵌的switch语句,因y=0,执行a+,使变量a的值为1并终止内层switch结构,回到外层。程序继续执行case 2后面的语句a+;b+;,这使变量a,b的值分别为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分析:题中的重点在于两个i
20、f结构,大家要注意两点:第一,如果if后面没有花括号,则它后面的第一条语句是它的结构体,并且只有一条语句。(如果后面是一个结构,则整个结构都属于if结构的结构体)。第二,变量在不断的被重新赋值,所以其值在不断的变化。4、答案是:yes,分析:该题与第二题是同一回事。5、答案是:1。分析:这个题还上一个ifelse结构,考查点仍然是考察考生是否能够正确识别if后面括号里的表达式p=a!=0,根据运算符的优先级知道,这里应该先算a!=0,这是一个逻辑运算,a的值为5,所以a!=0为真,其逻辑值为1,将1赋值给p,所以条件为真,输出p的值,为1。6、答案是:非零7、答案是:585858。分析:题中有
21、三个if结构,注意,这三个if结构是相互独立的,是互不相关的,只要他们的条件成立,就要执行其结构体(后面的输出语句)。通过键盘输入,得a的值为58,所以a50为真,输出58;然后判断a40,仍然为真,再输出58,最后判断a30,肯定为真,所以再输出58,连续三次输出58。8、答案是:0。分析:本题的关键在于关系运算符的运算次序,a=5,b=4,c=3.abc看起来是真的,但是这这是数学里面是这样的,这里我们要一步一步的计算,先算ab,a确实大于b,所以为真,逻辑值为1,后面的计算就变成了1c,显然为假,逻辑值为0,并将它赋值给d,所以最后输出d的值为0。9、答案是:3。分析:这个题主要考察条件
22、运算符。程序要输出(P/30?p/10:p%3)这个条件表达式的值。P为30,所以p/3=10,100显然为真,所以整个表达式的值应该是p/10的值,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。字符空
23、格的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(“&”);
24、”语句,输出符号“&”。15、答案是:12 17。当从键盘输入x的值为12时,程序自上而下执行经过三个if条件判断第一个条件不满足,第二、第三两个都满足。因此最终输出结果为12 17。16、答案是:a:b c:t1。条件表达式类似于if语句,根据“?”前面子表达式的逻辑值来判断应该计算“:”前面的子表达式还是后面的作为整个条件表达式的结果。题目要求输出a、b、c3个变量中的最小值,所以当ab时,应该选a,否则选b,帮前一空应填a:b。同理,后一空应填c:t1。第四章 循环结构 参考答案一、选择题:1. B 解析:a的值为1,a6为真,执行循环体,b的值加a后为3,a的值加2后为3,b的值与10
25、求余运算后值为3。 a的值为3,a6为真,执行循环体,b的值加a后为6,a的值加2后为5,b的值与10求余运算后值为6。 a的值为6,a6为真,执行循环体,b的值加a后为11,a的值加2后为7,b的值与10求余运算后值为1。 a的值为7,a0&x0&x0&x0&x3-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后,程
26、序从main函数开始执行,先将1读入到s变量中,while的判断条件s0成立,则执行循环体。循环体语句是一个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.
27、 D 解析: 注意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=
28、319. D 解析:第一次循环x=8,x%30,进入if语句输出x的值为8,然后x自减1,执行continue立即进行下次循环条件判断。第二次循环x=6,x%3=0,不进入if语句,执行if语句后面的printf(“%d,”,-x),x先自减1再输出得到5。第三次循环x=4,x%30,进入if语句输出x的值为4,然后x自减1,执行continue立即进行下次循环条件判断。第四次循环x=2,x%30,进入if语句,输出x的值为2,然后x自减1,执行continue立即进行下次循环条件判断。第五次循环x=0,判断表达式x0为假。结束循环输出结果为8,5,4,2。答案D20. C解析:第一次循环a=
29、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 解析:代码“if(n%3!=0) continue;”无实际意义。
30、当n自加到4的时候结束循环。答案D。24. D解析: 表达式2为赋值语句k=1,条件永远为真,会进入死循环。答案D25. A 解析:0%任何数等于0,所以第一次循环的时候就进入了if语句退出了for循环。i=21,i20为假,退出了while循环。a的值为21。26. D 解析:i的初值为0,第一次循环的时候满足i0,进入第一个if语句,执行continue直接进行下次循环,i的值没有改变。第二次循环又重复了第一次循环的操作,所以是死循环。27. B解析: 控制每行输出“*”号的过程。一共四行,每行输出奇数个。二填空题:1. 7 解析:从键盘输入14 63后程序将14赋给变量m,63赋值给变量
31、n,最外层的while条件m!=n为真,进入循环体。循环体语句是两组while循环,依次计算改变m、n的值直到m=n时程序结束,因此最终输出m的值为7。2. 11解析:循环的判断表达式为i5,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/10”。4. 3 4解析:此题考查for循环语句的执行机制。表达式3在跳出循环前
32、会执行一遍,因此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 k+10. ACE解析:理解字符转化为整形数使用到ASCII码,a的ASCII码是97,f是102
33、,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为真,执行switch语句,(i/10)的值为1,匹配default,执行k+,n+,结束switch体,执行i+,i值为11.
34、 此时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. i10 i%3 解析:根据题意先得到100以内所有个位是6的数,在判断哪些能被3整除。答案为i10 i%3!=0。15. 074 解析:当a的值为0时,a20为真,则执行b=a%10后b的值为0,执行putchar函数后输出字符0,for循环中表达式3中每次a递增7,所以第二次循环
35、时,a的值为7,a20为真,则执行b=a%10后b的值为7,执行putchar函数后输出字符7。第三次a的值为14,a20为真,则执行b=a%10后b的值为4,执行putchar函数后输出字符4,此时执行表达式3后a的值为21,a20条件为假,循环结束。因此最终答案为输出:074第五章 函数 参考答案一 选择题1.C 解析:在C程序的书写时,严格的缩进要求可以增强程序的可读性,但是不会影响程序的编译于运行。2.B 解析:在C程序中必须有且仅有一个主函数为main函数,它是程序的入口和出口。但是没有规定它在程序中具体的位置。3.A4.B5.A 解析:函数的实参可以使被调用函数的调用语句。但是总之
36、函数的实参个数之间用逗号隔开,个数,类型分别于形参的一一对应。6.B 解析:当程序在函数体中执行时,遇到return语句结束函数的调用。即使函数体中有多个return语句,但是遇见第一个return语句时函数的调用就结束了,后面的return语句是不会再执行的(也就是说即使有多条return语句,最终执行的只有一句)。而返回值是void类型的函数一般有return语句是缺省的,如果要有不能return语句后面不能有返回值,可以是return;;如果函数体中没有使用return语句,当函数调用结束后,还是会回到调用处的。7.B 解析:其他解析同上。return语句中可以有表达式和常量,变量等。8
37、.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,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解析:函数不能
38、嵌套调用,但是可以自己调用自己成为递归;被调用函数在调用之前可以先声明,再调用,后定义;构成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 解析:函数的值是单向传递的,只能是从实参传到形参,而且只有当从实参传到形参时才为形参分配一定的存储空间。等函数调用结束后,这个空间就会被释放掉。14.B 解析:考察函数的调用。调用语句中的实参有两个,
39、实参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 考察的是函数的声明。在函数声明时,声明是一句话,其中形参的类型不能省略,但是形参名可以省略;声明时形参名可以和定义时的形参名不相同,但是类型必须匹配;声明时必须指出函数的返回值类型和名称,这两点必须与定义时的返回值类型
40、和名称一一对应。17. B 解析:允许这种函数说明的方式存在。如果只在主函数中说明,则只能在主函数中调用f;如果在主函数以前说明,则包括主函数的所有函数都可以调用,如果同时主函数又说明了,则不影响。18. B19. C20. A 解析:程序的执行总是从main函数开始,在main函数结束,无论main函数在程序的什么地方。21. D22. A 解析:函数f(int v,int w)的功能是将实参v和w进行交换,但是实参值的变化对形参没有影响,所以本题中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函数时实参