第五章1.以下合法的字符常量是A'0xDE'B\101C'\'D'\''答案:D分析:表示转义字符中的单引号字符2.以下不合法的字符常量是A'a'B'\179'C'\xee'D'\n'答案:B分析:B)’\179’中的9中超出了八进制数值的范畴3.已定义ch为字符型变量,以下赋值语句中错误的是Ach=\;Bch=62+3;Cch='\0';Dch='\xaa';答案:A分析:A)字符变量要保存字符常量,字符常量要用单引号引起来,同时,这应是一个转义字符,正确的应为:ch=’\\’B)等价于ch=’A’C)’\0’为转义字符,赋值正确D)十六进制表示的转义字符4.以下程序的输出结果是main(){charx='C';x=(x='A'&&x='Z')?(x+32):x;printf(%c,x);}ACBcC67D99答案:B分析:条件表达式x=(x=’A’&&x=’Z’)?(x+32):x的第一个式子(x=’A’&&x=’Z’)为真,因此执行x+32这个操作,所以x=’C’+32,因此打印输出的是c。5.以下程序的输出结果是main(){charx,y;x='B'-'A'+'a';y=x+2;printf(%d,%c,x,y);}A98,dBb,dCB,DD98,100答案:A分析:(1)x=’B’-’A’+’a’=66-65+97=98(2)y=x+2=98+2=100,ASCII值为100的是字符’d’所以最后输出的98,d6.若变量均正确定义,要求用scanf(%d%c%d%c,&a,&x,&b,&y);进行数据输入,使得a的值为40,b的值为50,为x赋'*',为y赋'#',以下正确的输入形式是A40*50#B40*50#C40*50#D40*50#分析:整型数据和字符型数据交替输入的时候输入形式只有两种:(1)40*50#回车(2)40*50#回车其他情况下,都会降空格符号作为字符读入,导致结果错误,所以选A)7.要求通过while循环不断读入字符,当读入字母N时结束循环,若变量已正确定义,则正确的程序段是Awhile((ch=getchar())!='N')printf(%c,ch);Bwhile(ch=getchar()!='N')printf(%c,ch);Cwhile(ch=getchar()=='N')printf(%c,ch);Dwhile((ch=getchar())=='N')printf(%c,ch);8.以下程序:main(){charc1,c2,c3,c4,c5,c6;scanf(%c%c%c%c,&c1,&c2,&c3,&c4);c5=getchar();c6=getchar();putchar(c1);putchar(c2);printf(%c%c\n,c5,c6);}程序运行后,若从键盘输入123回车45678回车则输出结果是A1267B1256C1278D1245答案:D分析:1,2,3依次赋给了c1,c2,c3,回车符也作为字符赋给了c4,所以c5,c6依次读入的是4,5。9.在C程序中Amain函数必须出现在所有函数之前Bmain函数可以在任何地方出现Cmain函数必须出现在所有函数之后Dmain函数必须出现在固定位置答案:B分析:在C语言中,函数可以在任何地方出现,而main函数作为函数中的一类,没有特殊的限制和要求,故也可以在任何地方出现。10.C语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是AvoidBintCfloatDdouble答案:B分析:C语言默认规定11.设函数fun的定义形式是voidfun(charch,floatx){......}则以下对函数fun的调用语句中,正确的是Afun(abc,3.0);Bt=fun('D',16.5);Cfun('65',2.8);Dfun(32,32);答案:D分析:对应每个形参的类型结构。12.若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是A调用可以作为独立的语句存在B调用可以作为一个函数的实参C调用可以出现在表达式中D调用可以作为一个函数的形参答案:D分析:函数的调用不可以作为一个函数的形参。13.以下程序的运行后的结果是fun(inta,intb){if(ab)return(a);elsereturn(b);}main(){intx=3,y=8,z=6,r;r=fun(fun(x,y),2*z);printf(%d\n,r);}A3B6C8D12答案:D分析:fun(a,b)的作用是返回a、b中较大的。fun(x,y)=fun(3,8)=8,r=fun(fun(x,y),2*z)=fun(8,12)=1214.以下程序:intf1(intx;inty){returnxy?x:y;}intf2(intx,inty){returnxy?y:x;}main(){inta=4,b=3,c=5,d,e,f;d=f1(a,b);d=f1(d,c);e=f2(a,b);e=f2(e,c);f=a+b+c-d-e;printf(%d,%d,%d\n,d,f,e);}执行后输出结果是A3,4,5B5,3,4C5,4,3D3,5,4答案: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,315.以下叙述正确的是A构成C程序的基本单位是函数B可以在一个函数中定义另一个函数Cmain()函数必须放在其他函数之前D所以被调用的函数一定要在调用之前进行定义答案:A分析:c程序的基本单位是函数。函数中不可以嵌套定义函数。main()函数可以放在任意位置。被调用的函数只要在调用之前说明了即可。16.以下程序:floatfun(intx,inty){return(x+y);}main(){inta=2,b=5,c=8;printf(%3.0f\n,fun((int)fun(a+c,b),a-c));}程序运行后的输出结果是A编译出错B9C21D9.0答案: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。17.以下程序:charfun(charx,chary){if(xy)returnx;returny;}main(){inta='9',b='8',c='7';printf(%c\n,fun(fun(a,b),fun(b,c)));\}程序的执行结果是A函数调用出错B8C9D7答案:D分析:fun(x,y)的作用是选择x,y里面较小的一个。fun(9,8)=8,fun(8,7)=7;fun(fun(a,b),fun(b,c))=fun(8,7)=718.以下程序:intfun1(doublea){returna*=a;}intfun2(doublex,doubley){doublea=0,b=0;a=fun1(x);b=fun1(y);return(int)(a+b);}main(){doublew;w=fun2(1.1,2.0);printf(%f\n,w);}程序执行后变量w的值是A5.21B5C5.0D0.0答案: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。19.若程序中定义了以下函数doublemyadd(doublea,doubleB){return(a+B);}并将其放在调用语句之后,则在调用之前应该对该函数进行说明,以下选项中错误的说明是Adoublemyadd(doublea,B);Bdoublemyadd(double,double);Cdoublemyadd(doubleb,doubleA)Ddoublemyadd(doublex,doubley);答案:A分析:函数的说明有其自己的格式,应该包括函数类型、函数名、以及形参类型,形参名可有可无,但是一定要统一,形参名随便取。20.以下程序:#includestdio.hvoidf(intn)main(){voidf(intn);f(5);}voidf(intn);{printf(%d\n,n);}则以下叙述中不正确的是A若只在主函数中对函数f进行说明,则只能在主函数中正确调用函数f。B若在主函数前对函数f进行说明,则在主函数和其他函数中都可以正确调用函数f.C对于以上程序,编译时系统会提示出错信息:提示对f函数重复说明。D函数f无返回值,所以可用void将其类型定义为无值型。答案:C分析:允许这种函数说明的方式存在。如果只在主函数中说明,则只能在主函数中调用f;如果在主函数以前说明,则包括主函数的所有函数都可以调用,如果同时主函数又说明了,则不影响。21以下叙述中错误的是AC程序必须由一个或一个以上的函数组成。B函数调用可以作为一个独立的语句存在C若函数有返回值,必须通过return语句返回。D函数形参的值也可以传回给对应的实参22以下程序:intf(intx,inty){return(y-x)*x;}main(){inta=3,b=4,c=5,d;d=f(f(3,4),f(3,5));printf(%d\n,d);}执行后输出结果是A8B7C6D9答案:9分析:1)函数的意思为f(x,y)=(y-x)*xf(3,4)=(4-3)*3=3f(3,5)=(5-3)*3=62)d=f(3,6)=(6-3)*3=9.23.以下程序运行后输出结果是3,2,2,3voidfun(intx,inty){x=x+y;y=x-y;x=x-y;printf(%d,%d,,x,y);}main(){intx=2,y=3;fun(x,y);printf(%d,%d\n,x,y);}答案: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.