C语言答案解析%2B公共基础总结--全.doc_第1页
C语言答案解析%2B公共基础总结--全.doc_第2页
C语言答案解析%2B公共基础总结--全.doc_第3页
C语言答案解析%2B公共基础总结--全.doc_第4页
C语言答案解析%2B公共基础总结--全.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言习题答案 第一章 C语言基础知识一,选择题 1 答案是A A正确 课本第2页11行 B 可以作为复合语句的标志 C main 函数不是用户命名的 D 分号是语句结束的标志,肯定是语句的一部分 做这个题目需要对书上的概念透彻的理解 2 答案是A A 错误 课本第4页关于用户标识符是这样介绍的-命名时,标识符 的选择由用户自定,但是不能与关键字相同,所以A选项错误。这个 题目考察用户标识符 3 答案是B 用户标识符是标识符,所以可以是有下划线,但是中划线不属于字母, 数字,下划线其中一种。这个题目考察用户标识符的概念。 4 答案是B define 是预定义标识符,而预定义标识符可以是用户标识符,所以 define可以是用户标识,if 是关键字,而关键字不能是用户标识符, 所以if不可以是用户标识符 5 答案是D sizeof 是关键字,参照附录二 注:6-13 考察用户标识符概念 6 答案是D D答案以数字2开头了,不符合标识符定义 7 答案是C C答案以数字开头了 8 答案是D int 是关键字 9 答案是B 答案A 是关键字,答案C是以数字开头了,不符合概念,答案D出 现了小数点 10 答案是A 答案A出现了小数点 11 答案是C 答案C 以数字开头了 12 答案是A B答案中float 是关键字,C答案中3c以数字3开头了,D答案中-5d 中 - 不属于字母,数字,下划线中一种 13 答案是A B答案中-max中-错误,C答案中3COM以字母3开头了,D答案中 int 是关键字,不是用户标识符 14 答案是B A答案中15. 后面不应该有点,C答案中出现了逗号,D中字母B有 问题 15 答案是B 课本第8页倒数8行 16 答案是B B中出现了8,而八进制只能有0到7组成 17 答案是D 答案D中开头是0不是o 18 答案是C 答案A中E后面是整数,0.5是小数 答案B 中E后面不能为空 答案D中E前面不能为空 本题目考察指数的表示形式 19 答案是C 答案A中2.0有问题,不能为小数形式 答案B中E前面不能为空 答案D中E后面不能为空 本题目考察指数的表示形式 20 答案是A B中八进制中不能出现数字8,C中e后面不能是小数,D中e后面 不能为空 21 答案是B B中0.4是小数,不正确 22 答案是C C中0.5是小数,不正确 23 答案是D 3.6-5/2+1.2+5%2=3.6-2+1.2+1=3.8 本题目考察算术运算符,需要注意整数除以整数结果只能是整数 24 答案是D %不能用于实型的计算 25 答案是D D答案中$不属于字母,数字,下划线 26 答案是 A A答案是逗号表达式,B答案中x+1=y是赋值表达式,左边只能是变 量,而这里是x=1, 同理答案C中x+10也是错误的,在D答案中, 考察的是强制类型转换, 正确的是(double)x/10 27 答案是 A 本题考察的是注释需要注意的地方,具体解答见课本第2页中间部分 28 答案是B 答案A中n2没有定义,答案C中在定义f之前不能使用它,答案D 中E后面必须是整数 29 答案是 C 考察的是强制类型转换,正确的是k%(int)f 30 答案是 D 本题目类似与课本第16页的例15,解题方法是要抓住+m,-n,-m, 表达式的值是变量变化之后的值,而n-表达式的值是变量n变化之 前的值 31 答案是B 本题目是课本第10页的例9,具体解答见课本,本题目考察的是负 整数与无符号正整数在计算机中存放的格式的一样的,但表示的不 同的两个数 32 答案是C A答案中%运算对象不能为实型,26.8错误,B答案中考察的赋值 运算符,赋值运算符左边必须是变量,所以赋值运算符左边1+2错 误,同理答案D错误 33 答案是 C 本题目考察的是课本第15页的关于自加与自减运算符的第一点说 明,即增量运算符的运算对象只能是变量,而在C答案中+(i+1) 中,i+1是表达式 34 答案是 B 本题目考察的是整数除以整数结果是整数,在B答案中1/2结果是0,导致整个表达式的值是0,明显是错误的 35 答案是D 36 答案是A 本题目见课本第13页倒数第10行 本题目主要考察n+表达式的值是n变化之前的值,然后使n的值增加1 37 答案是 B c=a/b+0.4 c=8/5+0.4 c=1+0.4 c=1.4 因为c 是int 型的,所以n的值是1 ,做此题目需要仔细阅读题目 38 答案是 D (int)a+b/b=(int)5.5+2.5/2.5=5+1.000000=b=6.000000 同样a,b的类型是double型的 39 答案是D 见课本第9页例8二,填空题 1 课本第9页倒数第7行 2 课本第3页倒数第5行 3 课本第9页倒数第6行 4 课本第7页倒数第5行 5 课本第8页整型变量和第11页实型变量的介绍 6 5+3.6/2=5+1.8=6.8 7 a+表达式的值是a变化之前的值,当然a本身增加了1 8 把10赋给变量B第二章 顺序结构一 选择题1, 答案是 C 随意使用空语句会导致逻辑上出现错误,不要随便使用。2, 答案是 B 语句必须以分号结尾,A,C,D表达式后面均没有分号。3, 答案是 C int x=13,y=4;说明x,y均为整型,所以x/y只取整数部分(舍去法),值为3, 把3赋值给x,整个x=x/y表达式的值为左边变量x的值,所以输出为3。4, 答案是 A a,b均为整型,a/b是取ab所得商的整数部分,所以是0,再把0赋值给 c,所以是c的值是0。5, 答案是 DA 注释语句可以放在代码的任何位置B 将r定义为整型不会在编译时出错,会自动进行类型转换C 变量s为浮点型,格式描述符f时正确的D 是非法的变量6, 答案是 D(x,y)是逗号表达式,它的值只有一个,所以格式说明符的个数和输出项的个数是相等的。并且逗号表达式的值为最后一个表达式的值,最后一个表达式是y=2003,所以整个表达式的值是2003,因此输出值为2003。7, 答案是 Am是十进制整数以十进制有符号的形式输出,即照原样输32767,n=032767,032767是八进制的整数以八进制无符号形式输出,去掉前面的0。见教材P208, 答案是 C m,n的值都是十六进制数0xabc,m-=n即是m=m-n, 把m-n的值赋给m, 即把0赋给m,再把m值以十六进制无符号的形式输出,输出的十六进制 数不用在前面0x或者0X。见教材P219, 答案是 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表达式af/=c*=(x=6.5),按从右到左结合,先把6.5赋值给x,再执行cc*6.5,c的值变为65,再执行ff/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, 答案是 B long x=-123456L;说明x为长整型的数据,长整型数据对应的输出格式应该为ld。15, 答案是 C m=(k+=i*=k);按从右到左结合,先执行i=i*k;即i被赋值为4,再执行kk4;k被赋值为6,最后把6赋给m,输出m和i的值。16, 答案是 C 略(参考12题)17, 答案是 D m遵循从右向左结合的原则;m的值为m自增之前的值,所以执行完xm以后,x被赋值为3;表达式xx8/+n中有加号除号,先算8/+n,+n的值为自增之后的值为5,8/5取整为1,即xx8/+n转化为xx1,即把x1的值赋给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无法输出到屏幕。二 填空题1, 一条语句 分号 参见教材P182, 88首先将八进制数0210转化为十六进制的数0X88,输出格式说明要以十六进制无符号的形式输出,所以省略0X,直接输出88。3, 11把十进制数转化为八进制数,以无符号的形式输出4, 25 21 37 b为八进制数025,c为十六进制数0X25,首先把b、c都转化为十进制的整数,分别为21、37,按照输出格式要求a、b、c以十进制整数形式输出,中间以空格分开,所以输出为25 21 37。5, n1%dnn2=%d除了n1,n2的值之外,还必须加入“n1”“n2”照原样输出的字符,很明显在两个数据之间还加了换行符。6, i=10,j=20格式控制中加入了格式说明以外的其他字符,则在输入数据时这些字符也要同样输入。输入格式控制为i=%d,j=%d,所以则应该从键盘输入i=10,j=207, 261a为十进制数177转化为八进制的数为0261,以无符号的形式输出为2618, 16a的初值为0,在表达式a+=(a=8)中,a首先被赋值为8,再执行操作a=aa,所以a最后被赋值为16,即输出a的值为16第三章 选择结构一、选择题1、D 此题主要是考语句的特征。一条语句只包含一个分号,D项有两个分号,应该是两条语句,所以选D。2、C此题主要是考真假条件的等价。题目中的E为非0时条件为真,为0事为假。那么把非0和0带到选项中可知,C项正好是E为0时表达式为真,非0时为假,所以选C。3、D 任意合法的表达式都可以作为逻辑运算符的运算对象4、D 此题主要是考逻辑运算和关系运算的优先级别.只要掌握!、算术运算和&的优先级别便可选对.这几种运算符的具体优先级关系见P26第7行。5、A 此题主要是考逻辑运算符!、&和|之间的优先级别。!最高,&次之,|最低。先求得!a为0,所以不必计算!b的值,即!a&!b的值为0,由c=0,!c=1,而0|1=1,所以选D。6、A 此题主要是考了逻辑、关系和算术运算,熟练掌握逻辑运算、关系运算和算术运算的优先级别后,就不难了。A 选项中!a为0,所以!a=1为假,那么就不用计算&后面的表达式了,因为0与任何数均为假;B项中先计算出ab为假,则(ab)&!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,理解了这两点后,我们在看题目:具体的分析在教材第一册第三章P26页的例2。8、D 此题和题2非常的相似,也是考真假条件的转换,其中D项中只有k为0时,!k%2=1才成立,显然和A、B、C三项不同。9、C 此题主要是考if和else的配对问题。可在教材第一册第三章P32第4行找到答案。10、D 此题主要是考if和else的一般形式。if后面的语句要么是单条语句,要么是由 扩起来的复合语句,不能是if后有两条语句的,所以本题程序在运行的时候会出错。11、C 此题考到了关系运算和逻辑运算及一定数学知识。|x-y|10可等价为-10x-y10,首先选项A表示x-y的绝对值小于10,与题中的数学关系一样;将-10x-ya为真,所以(n=ba)为1,那么将不会去计算m=abc的值为0,所以不执行第一条语句;在判断第二个条件,c-1=d表达式的结果为真,所以执行其下面的语句,那么将输出d+1的值为3 ,所以选答案B。注意:本题中有一个错误,就是最后一条语句掉了个“;”,请大家补上分号,再做此题 ,否则本题将选答案D (这是打印错误,出题者的本意不是要选D)17、C 此题主要是考查条件表达式和条件运算符。首先要注意条件表达式的结合方向,它是从右至左的(可参照附录三) 第一个条件表达式的值为a,第二个条件表达式的值为c ,而c=6,所以答案选C 。18、A此题主要是考查if-else语句和条件表达式的转化。只要理解了if-else语句和条件表达式的运算规则的话,就很容易选出A19、D 此题主要是考查在switch语句中break和default的作用及break的适用范围。详细说明可参看教材第一册第三章 P33对switch的说明部分和第四章P45关于break语句的注意事项。20、B 此题考查的是条件表达式求解问题。先看第一个条件表达式语句,ac为假,所以k=k=2选 B21、A 此题考查的是条件表达式的求解顺序。参照附录三可知,它的结合方向是自右至左,所以先求得右边一个条件表达式的值为2,再求得左边一个的值为1,即选A22、C 此题考查的是真假条件的等价问题。x-y为真表示x-y是非0的,也即x-y0 即选C二、填空题1、答案是:10 20 0分析:多数同学得到的答案是10 20 1,显然是没有弄清楚第三条赋值语句:c=(a%b1).这是将后面一个逻辑表达式的值给c,那么关于逻辑表达式的考题,无非就是考察运算符的优先级,也就上说先算哪个,后算哪个的问题。在这个题里面,先计算第一个圆括号里面的内容,a%b的值是10,所以101为假。在逻辑或运算的时候,两个运算对象都为假,则结果为假。所以c的值为0.答案是:10 20 02、答案是: 1 分析:程序中是一个ifelse结构。这个题最容易出错的地方在于if的条件,注意,里面的是c=a是一个赋值表达式,不是将c与a的值进行比较。所以条件为真,输出赋值以后c的值,为1。3、答案是:4,5,99 分析:题中的重点在于两个if结构,大家要注意两点:第一,如果if后面没有花括号,则它后面的第一条语句是它的结构题,并且只有一条语句。(如果后面是一个结构,则整个结构都属于if结构的结构体)。第二,变量在不断的被重新赋值,所以其值在不断的变化。4、答案是:yes 分析:该题与第二题是同一回事。5、答案是:1 分析:这个题还上一个ifelse结构,考查点仍然是考察考生是否能够正确识别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,所以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 分析:这个题主要考察条件运算符。程序要输出(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。第四章 循环结构选择题:(1) 答案:B N的值为10,n7为真,执行循环体,n的值减1后为9,输出n的值9 N的值为9,n7为真,执行循环体,n的值减1后为8,输出n的值8 N的值为8,n7为真,执行循环体,n的值减1后为7,输出n的值7 N的值为7,n7为假,结束循环。(2)答案:Ak的值为5,进入循环,(-k)表达式的值为4(真),同时k的值改变为4,输出表达式k-=3的值1,同时k的值为1。 k为1,表达式(k)的值为0, 结束循环。(3)答案:A1 X=0,y=5,z=3,(z0&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) 答案:A(12)答案:C(13)答案:C分析:x的值为15。执行while循环,(x10)为真,执行循环体。执行x+;x的值为16。再执行if语句。(x%3)为真,执行x+,x的值为17,再执行break;语句,退出循环体,结束while语句的执行。最后输出x的值17。(14)答案:D(15)答案:D分析:continue语句会提前结束此次循环体的执行,不会结束整个for语句的执行。 (16 )答案:D(17)答案:B2*i-1(18)答案:A(19)答案:D分析:变量i的值为0,执行while循环,表达式(i10)为真,进入循环体,执行if(i1) continue; 表达式(i1)为真,执行continue; 提前结束此轮循环体的执行(后面两语句不执行),再判断表达式(i10)的值,为真,进入循环体,执行if(i1) continue; 因为i的值为1,没改变,表达式(i1)仍为真,执行continue; 提前结束此轮循环体的执行(后面两语句不执行),再判断表达式(i10)的值,为真,进入循环体。填空题:(1) 答案:1分析:此题的循环体是省略了大括号的空语句 ;,x的初值是2;执行while语句,先判断表达式的值,(x-)的值为1(真),同时x的值减1变为0,再执行循环体(空语句;),再判断表达式(x-)的值,表达式的值为0,同时x值减1,变为1,因为表达式的值为0(假),循环结束。最后输出x的值1。(2)答案:11(分析略)(3)答案:n=n/10(4)答案:0分析:i的值从5变化到0时,for语句中的第二个表达式都为真。t=5*4*3*2*1*00。最后输出i的值为0。(5)答案:5分析:for循环语句的循环体是空语句;(6)答案:6分析:此题属于循环的嵌套。当i=1时,输出0个号,当i=2时,输出1个号,当i=3时,输出2个号,当i=,4时,输出3个号,共输出6个号。 (7)答案:sum=120分析:i的值是1,sum的值是1,执行while循环。i=5为真,sum的值为1,i自加1,值为2。i=5为真,sum的值为2,i自加1,值为3。i=5为真,sum的值为6,i自加1,值为4。i=5为真,sum的值为24,i自加1,值为5。i=5为真,sum的值为120,i自加1,值为6。i=5为假,结束循环。输出sum=120. (8)答案:23分析:a的值为1,i的值为1。i4为真,执行switch体,i值为1,执行a+=5,a的值改变为5。执行i+,i的值为2。i4为真,执行switch体,i值为2,分别执行a+=3;a+=5,a的值改变为13。执行i+,i的值为.3。i4为真,执行switch体,i值为3,分别执行a+=2;a+=3;a+=5,a的值改变为23。执行i+,i的值为4。i4为假,结束for循环。输出a 的值23(9)答案:132分析: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. 此时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.(10)答案:i=A&x=A&x=Z)为真,因此执行x+32这个操作,所以x=C+32,因此打印输出的是c。7 答案:A分析:(1) x=B-A+a=66-65+97=98(2) y=x+2=98+2=100,ASCII值为100的是字符d所以最后输出的98,d8 答案:A分析:整型数据和字符型数据交替输入的时候输入形式只有两种:(1)40*50(2)40* 50#其他情况下,都会降空格符号作为字符读入,导致结果错误,所以选A)9 答案:A分析:A)两个相同的值进行位异或操作,结果为010 答案:A分析:(1) a=4|3: 00000100 | 00000011 _ 00000111所以 a=7(2) b=4&3: 00000100 & 00000011 _ 00000000所以b=0 11 答案:D分析:(1)z=1=0(2)x/y=3/2=1(3)x/y&z=1&0=012 答案:D分析:(1)2+x: 00000010 + 10100111 _ 10101001(2)3: 00000011 _ 11111100(3)(2+x)(3): 10101001 11111100 _ 01010101 13 答案:D分析:(1)0x3对应的二进制为:00000011 0x8对应的二进制为:00001000 b=a|0x8: 00000011 | 00001000 _ 00001011所以b的值被赋为11。(2)b: 00001011c=b1: 00010110所以c被赋值为22。14 答案:A15 答案:D分析:1,2,3依次赋给了c1,c2,c3,回车符也作为字符赋给了c4,所以c5,c6依次读入的是4,5。(3) 填空题1 答案:1分析:(1)输入字符a后,表达式getchar()=a成立,表达式的值为真, (2)将表示式的值赋给x(注意:=是赋值语句),所以x的值为1。2 答案:11110111分析:(1)x: 00000010 _ 11111101 (2)y: 00000101y1: 00001010 (3)z=xy1: 11111101 00001010 _ 111101113 答案:3分析:只有, b,xf三个是正确的转义字符。第六章 函数一、选择题:1. 答案:B分析:在C语言中,函数可以在任何地方出现,而main函数作为函数中的一类,没有特殊的限制和要求,故也可以在任何地方出现。2.答案:B分析:C语言默认规定3. 答案:D分析:对应每个形参的类型结构。4. 答案:A分析:sin(1/2)会当作sin(0)处理。实参的类型决定了重载函数的选择。5. 答案:D分析:函数的调用不可以作为一个函数的形参。6. 答案:D分析:fun(a,b)的作用是返回a、b中较大的。fun(x,y)=fun(3,8)=8, r=fun(fun(x,y),2*z)=fun(8,12)=127. 答案: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, 38. 答案:A分析:c程序的基本单位是函数。函数中不可以嵌套定义函数。main()函数可以放在任意位置。被调用的函数只要在调用之前说明了即可。9. 答案:B分析:fun(x,y)的作用是求x、y的和。fun(a+c,b)=a+c+b=15,(int) fun(a+c,b)=(int)15=15。fun((int) fun(a+c,b),a-c)=fun(15,-6)=9。10. 答案:D分析:fun(x,y)的作用是选择x,y里面较小的一个。fun(9,8)=8,fun(8,7)=7;fun(fun(a,b),fun(b,c)=fun(8,7)=711. 答案: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。 12. 答案:A分析:函数的说明有其自己的格式,应该包括函数类型、函数名、以及形参类型,形参名可有可无,但是一定要统一,形参名随便取。13. 答案:C分析:允许这种函数说明的方式存在。如果只在主函数中说明,则只能在主函数中调用f;如果在主函数以前说明,则包括主函数的所有函数都可以调用,如果同时主函数又说明了,则不影响。14. 答案:D分析:函数的形参不可以传给对应的实参。15. 答案:D分析:形式参数的改变不影响实参。所以本题是一个迷惑题,不需要看函数体的内容。二、填空题:1.答案:a=1.0,b=1.0,s=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)-fun(a+b,3);分析: 由程序可以看出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. 答案:-f fun(10)分析:1)函数的作用为计算m=1-2+3-4+5-6+7-8+9-10,实际上为计算m=1*1+(-1)*2+1*3+(-1)*4+1*9+(-1)*10,在循环体中,i为1,2,3.,f为1的符号。每循环一次,f的符号应该变换一下,所以变换的语句为f=-f。2)当n=1时,计算的是m=1;当n=2时,计算的是m=1-2因为计算的是m=1-2+3-4+5-6+7-8+9-10,所以答案为n=10,即fun(10)。5. 答案:9分析:1)函数的意思为f(x,y)=(y-x)*xf(3,4)= (4-3)*3=3f(3,5)=(5-3)*3=6 2)d=f(3,6)=(6-3)*3=9.6. 答案:double max分析:通过程序可以看出,main函数中使用了max函数,而其他地方没有对max函数进行说明。所以程序中应该对max函数进行说明。说明的格式为double max(double,double)。7. 答案:3,2,2,3分析:1)x=2,y=3,当调用fun(x,y)时,相当于执行fun(2,3)。x=x+y;x=2+3=5;y=x-y;y=5-3=2;x=x-y;x=5-2=3;此时x, y的值为3,2,所以输出的结果为3,2。2)在main函数中,实参不会因为形参的改变而改变, x,y的值仍为2,3,所以所以输出的结果为2,3.第七章 指针一、选择题1 A 本题主要考指针赋值,n2=n1;是把n2的值赋给n1,故根据指针赋值的定义可知选A,即把q所指对象的值赋给p所指对象。2 B 本题主要考指针定义,因为p指向变量x,故输出其值的时候应该是x的值。3 C 本题主要考指针的定义和赋值,C前面是定义一个量a并赋值为10,后面定义一个指针,并把a的值赋给这个指针。4 C 本题主要考指针的定义及赋值,开始时使p指向a,q指向b,把它们的值交换,然后再显示。故得正确答案C。5 C 本题主要考函数指针的定义,函数前面的*号表求返回值是指针类型,void表示返回无值弄的。故选C。6 A 本题主要考的是指针的变量的赋值,在使用scanf()函数的时候,后面跟的是一个地址,由于pa本身保存的是地址,故选A7 D 本题主要考的指针的赋值及指向指针的指针的赋值,根据定义知选D。B的正确形式是*q2;C的正确形式应该是q=&p;8 C 本题主要考的是全局变量和局部变量,以及指针的用法,第一个f(&a)的返回值是5,第二个返回值是2.9 B 本题主要考的是变量自加,指针传值,以及指针的赋值。通过第二行a=b可知p1,p2指向的变量的值相同,都指向了b所指的对象,也是p2所指的对象a,由于(*a)+;是实现a所指对象的自加,故由a变成b,故最终选A。10 A 本题主考NULL,一般来说当我们把一个空值以整数的形式输出出来的时候,默认的情况是0.11 C 本题考的是指针变量的赋值,虽然p没有赋值,表示没有指向某个具体的对象,但事实上系统会让它随机的指向存储单元里的一个对象,那么它的返回值应该是所指存储单元中的值。12 B 本题主要考函数中参数变量的定义,在B中连续定义两个变量,这在函数中是不可以的。13 C 本题主要考指针的指针,c先指向b,b是一个指针,它指向a,故c最终是指向a的,故其值是a中的值14 A 本题主要考指针的赋值,我们不能把一个具体的值赋给一个指针变量。B选项是w,p指向同一对象。C是p指向a。D是把w所指对象的值赋给p所指对象。15 B 本题主要考指针传值,p,q分别指向a,b,然而r会指向它们的较小值。16 D 在D中把一个整形变量的值赋给一个指针的地址,故而是错的。应该写成p=&a;17 D 本题主要考调用函数时指针传值和一般的变量的传值区别。指针通过地址传值,而变量是直接传值。c指针指向b,故对c指针里面的值的修改等于直接修改b中的值。18 D 本题主要考指针的定义及指针变量的值的输出方式,指针b指向a,故输出其值是51119 C 本题主要考指针标识符*和乘号*的区别,*p=*p1*(*p2)中第1,2,4个*号是指针标识符,而第三个是乘号,故其运算的结果是320 C 本题也是考指针标识符*和乘号*的区别,第一个函数中的*号是乘号,此时指针p中保存的是指针p1和指针p2指向对象的乘积。21 A 本题主考函数的嵌

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论