第七章函数一、选择题1.以下函数定义正确的是:。A)doublefun(intx,inty)B)doublefun(intx;inty)C)doublefun(intx,inty);D)doublefun(intx,y)2.C语言规定,简单变量作实参,它与对应形参之间的数据传递方式是:。A)地址传递;B)单向值传递;C)双向值传递;D)由用户指定传递方式3.以下关于C语言程序中函数的说法正确的是:。A)函数的定义可以嵌套,但函数的调用不可以嵌套;B)函数的定义不可以嵌套,但函数的调用可以嵌套;C)函数的定义和调用均不可以嵌套;D)函数的定义和点用都可以嵌套。4.以下正确的函数形式是:。*A)doublefun(intx,inty)B)fun(intx,y){z=x+y;returnz;}{intz;returnz;}C)fun(x,y)D)doublefun(intx,inty){intx,y;doublez;{doublez;z=x+y;returnz;}z=x+y;returnz;}5.以下说法不正确的是:。*C语言规定A)实参可以是常量、变量或表达式B)形参可以是常量、变量或表达式C)实参可以是任意类型D)形参应与其对应的实参类型一致6.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是。A)float型B)int型C)long型D)double型7.以下错误的描述是。函数调用可以A)出现在执行语句中B)出现在一个表达式中C)做为一个函数的实参D)做为一个函数的形参8.若用数组名作为函数调用的实参,传递给形参的是。A)数组的首地址B)数组第一个元素的值C)数组中全部元素的值D)数组元素的个数9.以下正确的说法是。如果在一个函数中的复合语句中定义了一个变量,则该变量A)只在该复合语句中有效B)在该函数中有效C)在本程序范围内有效D)为非法变量10.以下不正确的说法为。A)在不同函数中可以使用相同名字的变量B)形式参数是局部变量C)在函数内定义的变量只在本函数范围内有效D)在函数内的复合语句中定义的变量在本函数范围内有效11.凡是函数中未指定存储类别的局部变量,其隐含的存储类别为。A)自动(auto)B)静态(static)C)外部(extern)D)寄存器(register)12.下面程序的正确运行结果是:。*main(){inta=2,i;for(i=0;i3;i++)printf(“%4d”,f(a));}f(inta){intb=0;staticintc=3;b++;c++;return(a+b+c);}A)777B)71013C)7911D)789C语言规定:函数返回值类型是由:。A)return语句中的表达式类型决定B)调用该函数时的主调函数类型决定C)调用该函数时系统临时决定D)定义该函数时所指定的函数类型决定下面函数调用语句中实参的个数为:。*func((exp1,exp2),(exp3,exp4,exp5))A)1B)2C)4D)5。*A)与参数a的类型相同B)void类型C)没有返回值D)无法确定。建立函数的目的之一是:A)提高程序的执行效率B)提高程序的可读性C)减少程序的篇幅D)减少程序文件所占内存17.。A)定义函数时,形参的类型说明可以放在函数体内B)return后边的值不能为表达式C)如果函数值的类型与返回值类型不一致,以函数值类型为准D)如果形参与实参的类型不一致,以实参类型为准18.以下正确的说法是。A)用户若需调用标准库函数,调用前必须重新定义B)用户可以重新定义标准函数,若如此,该函数将失去原有含义C)系统根本不允许用户重新定义标准库函数D)用户若需调用标准库函数,调用前不必使用预编译命令将该函数所在文件包括到用户源文件中,系统自动去调19.以下正确的说法是。在C语言中:A)实参和与其对应的形参各占用独立的存储单元B)实参和与其对应的形参共占用一个存储单元C)只有当实参和与其对应的形参同名时才共占用存储单元D)形参是虚拟的,不占用存储单元20.若使用一维数组名作函数实参,则以下正确的说法是。A)必须在主调函数中说明此数组的大小B)实参数组类型与形参数组类型可以不匹配C)在被调函数中,不需要考虑形参数组的大小D)实参数组名与形参数组名必须一致21.有如下函数调用语句func(rec1,rec2+rec3,(rec4,rec5);该函数调用语句中,含有的实参个数是。*A)3B)4C)5D)有语法错22.有如下程序intrunc(inta,intb){return(a+b);}main(){intx=2,y=5,z=8,r;r=func(func(x,y),z);printf(“%\d\n”,r);}该程序的输出的结果是。*A)12B)13C)14D)1523.有如下程序longfib(intn){if(n2)return(fib(n-1)+fib(n-2));elsereturn(2);}main(){printf(“%d\n”,fib(3));该程序的输出结果是。*A}2B}4C}6D}824.有以下程序voidf(intx,inty){intt;if(xy){t=x;x=y;y=t;}}main(){inta=4,b=3,c=5;f(a,b);f(a,c);f(b,c);printf(%d,%d,%d\n,a,b,c);}执行后输出的结果是。*A)3,4,5B)5,3,4C)5,4,3D)4,3,525.以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。#defineN10voidarrin(intx[N]){inti=0;while(iN)scanf(%d,_________);}在下划线处应填入的是。**A)x+iB)&x[i+1]C)x+(i++)D)&x[++i]26.有以下程序main(){chars[]=\n123\\;printf(%d,%d\n,strlen(s),sizeof(s));}执行后输出结果是。*A)赋初值的字符串有错B)6,7C)5,6D)6,627.以下叙述中正确的是。(0级)A)全局变量的作用域一定比局部变量的作用域范围大B)静态(static)类别变量的生存期贯穿于整个程序的运行期间C)函数的形参都属于全局变量D)未在定义语句中赋初值的auto变量和static变量的初值都是随机值28.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);}f1(intx,inty){intz;z=(xy)?x:y;return(z);}f2(intx,inty){intz;z=(xy)?x:y;return(z);}执行后输出的结果是。*A)3,4,5B)5,3,4C)5,4,3D)3,5,429.以下程序的输出结果是。*#includestdio.hintf(void){staticinti=0;ints=1;s+=i;i++;return(s);}voidmain(void){inti,a=0;for(i=0;i5;i++)a+=f()printf(“%d\n”,a);}A)1B)0C)非0的数D)–130.以下C语言中,对函数不正确的描述是。A)当用数组名作形参时,形参数组改变可使实参数组随之改变B)允许函数递归调用C)函数形参的作用范围只是局限于所定义的函数内D)函数说明必须在主调函数之前31.以下所列的各函数首部中,正确的是。*A)voidplay(var:Integer,varb:Integer)B)voidplay(inta,b)C)voidplay(inta,intb)D)Subplay(aasinteger,basinteger)32.以下叙述中不正确的是。A)在C中,函数中的自动变量可以赋初值,每调用一次,赋一次初值。B)在C中,在调用函数时,实在参数和对应形参在类型上只需赋值兼容。C)在C中,外部变量的隐含类别是自动存储类别。D)在C中,函数形参可以说明为register变量。33.以下对C语言函数的有关描述中,正确的是。A)在C中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参B)C函数既可以嵌套定义又可以递归调用C)函数必须有返回值,否则不能使用函数D)C程序中有调用关系的所有函数必须放在同一个源程序文件中34.一个数据类型为void的函数中可以没有return语句,那么函数的被调用时。A)没有返回值B)返回一个系统默认值B)返回值由用户临时决定D)返回一个不确定的值35.在下面的函数声明中,存在着语法错误的是。*A)BC(inta,int);B)BC(int,int);C)DC(int,int=5);D)BC(intx,inty);36.以下函数值的类型是。*fun(floatx){floaty;y=3*x-4;returny;}A)intB)不确定C)voidD)float37.有如下程序段,在TurboC环境下运行的结果为。main(){inti=2,p,k=1;intf(inta,intb)p=f(i,++k);{intc;printf(“I=%d,p=%d”,k,p);if(ab)c=1;}elseif(a==b)c=0;elsec=-1;return(c);}A)1,0B)2,0C)2,-1D)1,138.下面程序的输出结果是:。intm=13;intfun(intx,inty){intm=3;return(x*y-m);}main(){inta=7,b=5;printf(“%d\n”,fun(a,b)/m);}A)1B)2C)7D)1039.若有说明语句:staticinta[3][4]={0};则下面叙述正确的是:。A)只有a[0][0]元素可得到初值0;B)数组a中每个元素均可得到初值0。C)数组a中各元素都可得到初值,但值不一定为0;D)此说明语句不正确40.以下程序的运行结果是:。main(){inta=2,i;for(i=0;i3;i++)printf(“%4d”,f(a));}f(inta){intb=0,c=3;b++;c++;return(a+b+c);}A)71013B)777C)7911D)789二、填空题1.C语言规定,可执行程序的开始执行点是。2.在C语言中,一个函数一般由两个部分组成,它们是和。3.函数swap(intx,inty)可完成对x和y值的交换。在运行调用函数中的如下语句后,a[0]和a[1]的值分别为,原因。*4.函数swap(arr,n)可完成对arr数组从第1个元素到第n个元素两两交换。在运行调用函数中的如下语句后,a[0]和a[1]的值分别为,原因。*5.设在主函数中有以下定义和函数调用语句,且fun函数为void类型;请写出fun函数的首部。要求形参名为b。*main(){doubles[10][22];intn;┆┆fun(s);┆}6.返回语句的功能是从返回。三、程序填空题1.下面程序的功能是利用函数调用求两整数的最大公约数和最小公倍数,请填空。*main(){inta,b,c,d;scanf(“%d,%d”,&a,&b);c=gongyue(a,b);(1);printf(“gongyue=%d,gongbei=%d\n”,c,d);}gongyue(intnum1,intnum2){inttemp,x,y;if(__(2)__){temp=num1;num1=num2;num2=temp;}x=num1;y=num2;while(__(3)_____){temp=x%y;x=y;y=temp;}return(y);}#includestdio.hviodYesNo(charch){switch(ch){case‘y’:case‘Y’:printf(“\nThisisYES.\n”);(1);case‘n’:case‘N’:printf(“\nThis