C语言试题库(第9章)一、选择题1、宏定义#definePI31.14159中,宏名PI代替______________。A、浮点型B、整型C、常量D、字符串答案A难度12、设有以下宏定义:#defineN3#defineY(n)((N+1)*n)执行语句z=2*(N+Y(5+1));后,z的值为_____________。A、出错B、42C、48D、54答案C33、以下说法正确的是_____________。A、#define和printf都是C语句B、#define是C语句,而printf不是C、printf是C语句,但#define不是D、#define和printf都不是C语句答案D难度24、宏定义的宏展开是在__________阶段完成的。A、第一遍编译B、第二遍编译C、程序执行D、预编译答案D难度15、编译预处理命令以___________结尾。A、;B、.C、\D、回车答案D难度16、以下叙述中正确的是________.a)在程序的一行上可以出现多个有效的预处理命令行b)使用带参的宏时,参数的类型应与宏定义时的一致c)宏替换不占用运行时间,只占用编译时间d)在以下定义中CR是称为“宏名”的标识符#defineCR045答案C难度37、以下程序的运行结果是________.#defineMIN(x,y)(x)(y)?(x):(y)main(){inti=10,j=15,k;k=10*MIN(i,j);printf(%d\n,k);}a)10b)15c)100d)150答案B难度48、若有宏定义如下:#defineX5#defineYX+1#defineZY*X/2则执行以下printf语句后,输出结果是_______.inta;a=Y;printf(%d\n,Z);printf(%d\n,a);a)7b)12c)12d)76655答案A难度29、请读程序:#includestdio.h/Pp#defineMUL(x,y)(x)*ymain(){inta=3,b=4,c;c=MUL(a++,b++);printf(%d\n,c);}上面程序的输出结果是__________.a)12b)15c)20d)16答案A难度410、对下面程序段:#defineA3#defineB(a)((A+1)*a)...x=3*(A+B(7));正确的判断是_________.a)程序错误,不许嵌套宏定义b)x=93c)x=21d)程序错误,宏定义不许有参数答案B难度311、以下正确的描述是____________.a)C语言的预处理功能是指完成宏替换和包含文件的调用b)预处理指令只能位于C源程序文件的首部c)凡是C源程序中行首以#标识的控制行都是预处理指令d)C语言的编译预处理就是对源程序进行初步的语法检查答案C难度212、在文件包含预处理语句的使用形式中,当#include后面的文件名用(尖括号)括起时,找寻被包含文件的方式是_______.a)仅仅搜索当前目录b)仅仅搜索源程序所在目录c)直接按系统设定的标准方式搜索目录d)先在源程序所在目录搜索,再按照系统设定的标准方式搜索(双撇号的)答案C难度313、有以下程序#defineF(X,Y)(X)*(Y)main(){inta=3,b=4;printf(%d\n,F(a++,b++));}程序运行后的输出结果是()A)12B)15C)16D)20正确答案:A难度414、以下叙述中不正确的是()A)预处理命令行都必须以#号开始B)在程序中凡是以#号开始的语句行都是预处理命令行C)宏替换不占用运行时间,只占编译时间D)在以下定义是正确的:#definePI3.1415926;正确答案:D难度215、有如下程序:#defineN2#defineMN+1#defineNUM2*M+1main(){inti;for(i=1;i=NUM;i++)printf(%d\n,i);}该程序中的for循环执行的次数是()A)5B)6C)7D)8正确答案:B难度416、以下程序的运行结果是()#defineMIN(x,y)(x)(y)?(x):(y)main(){inti=10,j=15,k;k=10*MIN(i,j);printf(%d\n,k);}A)10B)15C)100D)150正确答案:B难度117、有如下定义#defineD2intx=5;floaty=3.83;charc=′D′;则下面选项中错误的是()A)x++;B)y++;C)c++;D)D++;正确答案:D难度418、以下程序段的执行结果为()#definePLUS(X,Y)X+Ymain(){intx=1,y=2,z=3,sum;sum=PLUS(x+y,z)*PLUS(y,z);printf(SUM=%d,sum);}A)SUM=9B)SUM=12C)SUM=18D)SUM=28正确答案:B难度319、下列程序的输出结果是()#includestdio.h#defineM(x,y)x%ymain(){inta,m=12,n=100;a=M(n,m);printf(%d\n,a--);}A)2B)3C)4D)5正确答案:C难度420、阅读下列程序段,则程序的输出结果为()#includestdio.h#defineM(X,Y)(X)*(Y)#defineN(X,Y)(X)/(Y)main(){inta=5,b=6,c=8,k;k=N(M(a,b),c);printf(%d\n,k);}A)3B)5C)6D)8正确答案:A难度221、已知#defineM2;的宏定义,执行语句k=M*5;后,k的值是()A)10B)5C)2D)以上答案都不对正确答案:D难度122、以下关于宏替换叙述中,错误的是()A)宏替换占用编译时间B)替换文本中可以包含已定义过的宏名C)宏名可以由+号组成D)宏替换只能是字符替换正确答案:D难度223、以下程序的运行结果是________.#defineMIN(x,y)(x)(y)?(x):(y)main(){inti=10,j=15,k;k=10*MIN(i,j);printf(%d\n,k);}a)10b)15c)100d)150答案B难度224、若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是()A)函数调用可以作为独立的语句存在B)函数调用可以作为一个函数的实参C)函数调用可以出现在表达式中D)函数调用可以作为一个函数的形参正确答案:D难度125、以下正确的说法是()A)定义函数时,形参的类型说明可以放在函数体内B)return后边的值不能为表达式C)如果函数值的类型与返回值类型不一致,以函数值类型为准D)如果形参与实参类型不一致,以实参类型为准正确答案:C难度226、以下正确的说法是()A)用户若需调用标准库函数,调用前必须重新定义B)用户可以重新定义标准库函数,若如此,该函数将失去原有含义C)系统根本不允许用户重新定义标准库函数D)用户若需调用标准库函数,调用前不必使用预编译命令将该函数所在文件包括到用户源文件中,系统自动调用正确答案:B难度127、以下叙述正确的是()A)函数可以嵌套定义但不能嵌套调用B)函数既可以嵌套调用也可以嵌套定义C)函数既不可以嵌套定义也不可以嵌套调用D)函数可以嵌套调用但不可以嵌套定义正确答案:D难度128、以下程序有语法错误,有关错误原因的正确说法是()main(){intG=5,k;voidprt_char();...k=prt_char(G);...}A)语句voidprt_char();有错,它是函数调用语句,不能用void说明B)变量名不能使用大写字母C)函数说明和函数调用语句之间有矛盾D)函数名不能使用下划线正确答案:C难度329、以下正确的函数头定义形式是()A)doublefun(intx,inty)B)doublefun(intx;inty)C)doublefun(intx,inty);D)doublefun(intx,y);正确答案:A难度230、以下所列的各函数首部中,正确的是()A)voidplay(var:Integer,varb:Integer)B)voidplay(inta,b)C)voidplay(inta,intb)D)Subplay(aasinteger,basinteger)正确答案:C难度131下面函数调用语句含有实参的个数为()func((exp1,exp2),(exp3,exp4,exp5));A)1B)2C)4D)5正确答案:B难度432、有以下程序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)编译出错B)9C)21D)9.0正确答案:B难度233、下列程序执行后的输出结果是()voidfunc1(inti);voidfunc2(inti);charst[]=hello,friend!;voidfunc1(inti){printf(%c,st[i]);if(i3){i+=2;func2(i);}}voidfunc2(inti){printf(%c,st[i]);if(i3){i+=2;func1(i);}}main(){inti=0;func1(i);printf(\n);}A)helloB)helC)hloD)hlm考生答案:正确答案:C34、下列函数的运行结果是()main(){inti=2,p;intj,k;j=i;k=++i;p=f(j,k);printf(%d,p);}intf(inta,intb){intc;if(ab)c=1;elseif(a==b)c=0;elsec=-1;return(c);}A)-1B)1C)2D)编译出错,无法运行正确答案:A难度335、有以下函数char*fun(char*p){returnp;}该函数的返回值是()A、无确切的值B、形参p中存放的地址值C、一个临时存储单元的地址D、形参p自身的地址值正确答案:B难度136、下面程序应能对两个整型变量的值进行交换。以下正确的说法是()main(){inta=10,b=20;printf((1)a=%d,b=%d\n,a,b);swap(&a,&b);printf((2)a=%d,b=%d\n,a,b);}swap(intp,intq){intt;t=p;p=q;q=t;}A)该程序完全正确B)该程序有错,只要将语句swap(&a,&b);中的参数改为a,b即可C)该程序有错,只要将swap()函数中的形参p和q以及t均定义为指针(执行语句不变)即可D)以上说法都不对正确答案:D难度337、以下程序的输出结果是()intf(){staticinti=0;ints=1;s+=i;i++;returns;}main(){inti,a=0;for(i=0;i5;i++)a+=f();printf(%d\n,a);}A)20B)24C)25D)15正确答案:D难度438、阅读下面程序段,则执行后输出的结果是()#includestdio.hmain(){charfun(char,int);chara=′A′;intb=13;a=fun(a,b);putchar(a);}charfun(chara,intb){chark;k=a+b;returnk;}A)AB)MC)ND)L正确答案:C难度339、编写求两个双精度数之和的函数,选项中正确的是()A)doubleadd(doublea,doubleb){doubles;s=a+b;returns;}B)doubleadd(doublea,b){doubles;s=a+b;return(s);}C)doubleadd(doubleadoubleb){doubles;s=a+b;returns;}D)doubleadd(a,b){doublea,b,s;s=a+b;retur