
第七章函数 1.函数pi的功能是根据以下近似公式求π值: (*r)/6=1+1/(2*2)+1/(3*3)++1/(n*n) 现在请你在下面的函数中填空,完成求π的功能。 #include"math.h" doublepi (longn) {doubles=0.0;longi: for(i=1:i=n:it+)s=s+【】: return (sqrt (6*s));} 2.若函数fun的类型为void,且有以下定义和调用语句: #defineM50 main ( (inta[M]: … fun (a); …小 定义fun函数首部可以用三种不同的形式,请写出这三种形式:【】、【】、【】。 (注意:①形参的名字请用q,②使用同一种风格)。 3.函数fun的功能是:使一个字符串按逆序存放,请填空。 voidfun (charstr[]) (charm:inti,j: for(i=0,j=strlen(str):i<【】:it+,j-) (m=str[i]; str[i]=【】: str[j-1]=m: printf ("%s\n",str):} 4.设在主函数中有以下定义和函数调用语句,且fun函数为void类型:请写出fun 函数的首部【】。要求形参名为b。 main (
第七章 函数 1.函数 pi 的功能是根据以下近似公式求π值: (π*π)/6=1+1/(2*2)+1/(3*3)+…+1/(n*n) 现在请你在下面的函数中填空,完成求π的功能。 #include"math.h" doublepi(longn) {doubles=0.0;longi; for(i=1;i<=n;i++)s=s+【】; return(sqrt(6*s));} 2.若函数 fun 的类型为 void,且有以下定义和调用语句: #defineM50 main() {inta[M]; … fun(a); …} 定义 fun 函数首部可以用三种不同的形式,请写出这三种形式:【】、【】、【】。 (注意:①形参的名字请用 q,②使用同一种风格)。 3.函数 fun 的功能是:使一个字符串按逆序存放,请填空。 voidfun(charstr[]) {charm;inti,j; for(i=0,j=strlen(str);i<【】;i++,j--) {m=str[i]; str[i]=【】; str[j-1]=m;} printf("%s\n",str);} 4.设在主函数中有以下定义和函数调用语句,且 fun 函数为 void 类型;请写出 fun 函数的首部【】。要求形参名为 b。 main()

{doubles[10][22]: intn; … fun (s); …} 5.有以下程序 #include"stdio.h" intabc (intu,intv); main ( {inta=24,b=16,c: c=abc (a,b); printf ("%d\n":c): } intabc (intu,intv) (intw: while (v) (w=u%v:u=v:v=w: returnu:} 输出结果是 A)6B)7C)8D)9 6.下面程序的输出结果是 #include main ( (inti=2,p: p=f(i,i+1): printf ("%d",p): intf (inta,intb) fintc: if (a>b)c=1;
{doubles[10][22]; intn; … fun(s); …} 5.有以下程序 #include"stdio.h" intabc(intu,intv); main() {inta=24,b=16,c; c=abc(a,b); printf("%d\n";c); } intabc(intu,intv) {intw; while(v) {w=u%v;u=v;v=w;} returnu;} 输出结果是 A)6B)7C)8D)9 6.下面程序的输出结果是 #include main() {inti=2,p; p=f(i,i+1); printf("%d",p); } intf(inta,intb) {intc; if(a>b)c=1;

elseif (a==b)c=0: elsec=-1; return (c):} A)-1B)0C)1D)2 7.请读程序: #include FUNC (intA,intB) (intC;C=A+B:returnC;} main ( {intX=6,Y=7,Z=8,R: R=FUNC ((X--,Y++,X+Y),Z--); printf ("%d\n",R); 上面程序的输出结果是【】。 8.以下正确的说法是 建立函数的目的之一是 A)提高程序的执行效率B)提高程序的可读性 C)减少程序的篇幅D)减少程序文件所占内存 9.以下正确的说法是 A)用户若需调用标准库函数,调用前必须重新定义 B)用户可以重新定义标准库函数,若如此,该函数将失去原有含义 C)系统根本不允许用户重新定义标准库函数 D)用户若需调用标准库函数,调用前不必使用预编译命令将该函数所在文件包到用户 源文件中,系统自动去调 10.设有如下的函数 ggg (floatx) (printf ("\n%d",x*x);} 则函数的类型 A)与参数x的类型相同B)void C)intD)无法确定 11.下面程序的输出是【】
elseif(a==b)c=0; elsec=-1; return(c);} A)-1B)0C)1D)2 7.请读程序: #include FUNC(intA,intB) {intC;C=A+B;returnC;} main() {intX=6,Y=7,Z=8,R; R=FUNC((X--,Y++,X+Y),Z--); printf("%d\n",R);} 上面程序的输出结果是【】。 8.以下正确的说法是 建立函数的目的之一是 A)提高程序的执行效率 B)提高程序的可读性 C)减少程序的篇幅 D)减少程序文件所占内存 9.以下正确的说法是 A)用户若需调用标准库函数,调用前必须重新定义 B)用户可以重新定义标准库函数,若如此,该函数将失去原有含义 C)系统根本不允许用户重新定义标准库函数 D)用户若需调用标准库函数,调用前不必使用预编译命令将该函数所在文件包到用户 源文件中,系统自动去调 10.设有如下的函数 ggg(floatx) {printf("\n%d",x*x);} 则函数的类型 A)与参数 x 的类型相同 B)void C)intD)无法确定 11.下面程序的输出是【】

unsignedfun6 (unsignedintnum) (unsignedintk=1; do {k*=num%10:num/=10:while (num): return (k);} main ( {unsignedintn=26: printf ("%d\n",fun6 (n));} 12.有以下程序 viodfun (inta,intb,intc) {a=456;b=567:c=678:} main ( {intx=10,y=20,z=30: fun (x,y,z); printf ("%d:%d:%d\n",x,y,z); 输出结果是 A)30:20:10B)10:20:30 C)456:567:678D)678:567:456 13.有如下程序 intfunc (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)15 14.有以下函数 char*fun (char*p)(returnp; 该函数的返回值是 A)无确切的值B)形参p中存放的地址值
unsignedfun6(unsignedintnum) {unsignedintk=1; do{k*=num%10;num/=10;}while(num); return(k);} main() {unsignedintn=26; printf("%d\n",fun6(n));} 12.有以下程序 viodfun(inta,intb,intc) {a=456;b=567;c=678;} main() {intx=10,y=20,z=30; fun(x,y,z); printf("%d;%d;%d\n",x,y,z);} 输出结果是 A)30;20;10B)10;20;30 C)456;567;678D)678;567;456 13.有如下程序 intfunc(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)15 14.有以下函数 char*fun(char*p){returnp;} 该函数的返回值是 A)无确切的值 B)形参 p 中存放的地址值

C)一个临时存储单元的地址D)形参p自身的地址值 15.以下正确的说法是 在C语言中,函数调用时, A)实参和与其对应的形参各占用独立的存储单元 B)实参和与其对应的形参共用一个的存储单元 C)只有当实参和与其对应的形参同名时才共用存储单元 D)形参是虚拟的,不占用存储单元 16.C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是 A)地址传递B)由实参传给形参,再由形参传给实参 C)单向值传递D)由用户指定传递方式 17.若调用一个函数,且此函数中没有return语句,则正确的说法是 该函数 A)没有返回值B)返回若干个系统默认值 C)能返回一个用户所希望的函数值D)返回一个不确定的值 18.以下不正确的说法是 C语言规定: A)实参可以是常量、变量或表达式 B)形参可以是常量、变量或表达式 C)实参可以为任意类型 D)形参应与其对应的实参类型一致 19.以下说法正确的是 A)定义函数时,形参的类型说明可以放在函数体内 B)return后边的值不能为表达式 C)如果函数值的类型与返回值的类型不一致,以函数值的类型为准 D)如果形参与实参的类型不一致,以实参类型为准 20.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是 A)f1oat型B)int型C)long型D)double型 21.C语言规定,函数返回值的类型是由 A)return语句中的表达式类型决定 B)调用该函数时的主调函数类型所决定
C)一个临时存储单元的地址 D)形参 p 自身的地址值 15.以下正确的说法是 在 C 语言中,函数调用时, A)实参和与其对应的形参各占用独立的存储单元 B)实参和与其对应的形参共用一个的存储单元 C)只有当实参和与其对应的形参同名时才共用存储单元 D)形参是虚拟的,不占用存储单元 16.C 语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是 A)地址传递 B)由实参传给形参,再由形参传给实参 C)单向值传递 D)由用户指定传递方式 17.若调用一个函数,且此函数中没有 return 语句,则正确的说法是 该函数 A)没有返回值 B)返回若干个系统默认值 C)能返回一个用户所希望的函数值 D)返回一个不确定的值 18.以下不正确的说法是 C 语言规定: A)实参可以是常量、变量或表达式 B)形参可以是常量、变量或表达式 C)实参可以为任意类型 D)形参应与其对应的实参类型一致 19.以下说法正确的是 A)定义函数时,形参的类型说明可以放在函数体内 B)return 后边的值不能为表达式 C)如果函数值的类型与返回值的类型不一致,以函数值的类型为准 D)如果形参与实参的类型不一致,以实参类型为准 20.C 语言允许函数值类型缺省定义,此时该函数值隐含的类型是 A)float 型 B)int 型 C)long 型 D)double 型 21.C 语言规定,函数返回值的类型是由 A)return 语句中的表达式类型决定 B)调用该函数时的主调函数类型所决定

C)调用该函数时系统临时决定 D)在定义该函数时所指定的函数类型所决定 22.有如下函数调用语句 func (recl,rec2+rec3,(rec4,rec5)); 该函数调用语句中,含有的实参个数是 A)3B)4C)5D)有语法错 23.以下错误的描述是 函数调用可以 A)出现在执行语句中B)出现在一个表达式中 C)做为一个函数的实参D)做为一个函数的形参 24.下列程序执行后的输出结果是 A)helloB)helC)hloD)hlm voidfuncl (inti); voidfunc2 (inti): charst[]="hello,friend!": voidfuncl (inti) (printf ("%c",st[i]): if(i<3){i+=2:func2(i):} } voidfunc2 (inti) (printf ("%c",st[i]): if (i<3){i+=2;funcl (i);} main ( (inti=0;funcl (i);printf ("\n"); 25.C语言规定,程序中各函数之间 A)既允许直接递归调用也允许间接递归调用 B)不允许直接递归调用也不允许间接递归调用 C)允许直接递归调用不允许间接递归调用 D)不允许直接递归调用允许间接递归调用 26.以下正确的描述是
C)调用该函数时系统临时决定 D)在定义该函数时所指定的函数类型所决定 22.有如下函数调用语句 func(rec1,rec2+rec3,(rec4,rec5)); 该函数调用语句中,含有的实参个数是 A)3B)4C)5D)有语法错 23.以下错误的描述是 函数调用可以 A)出现在执行语句中 B)出现在一个表达式中 C)做为一个函数的实参 D)做为一个函数的形参 24.下列程序执行后的输出结果是 A)helloB)helC)hloD)hlm voidfunc1(inti); voidfunc2(inti); charst[]="hello,friend!"; voidfunc1(inti) {printf("%c",st[i]); if(i<3){i+=2;func2(i);} } voidfunc2(inti) {printf("%c",st[i]); if(i<3){i+=2;func1(i);}} main() {inti=0;func1(i);printf("\n");} 25.C 语言规定,程序中各函数之间 A)既允许直接递归调用也允许间接递归调用 B)不允许直接递归调用也不允许间接递归调用 C)允许直接递归调用不允许间接递归调用 D)不允许直接递归调用允许间接递归调用 26.以下正确的描述是

在C语言程序中 A)函数的定义可以嵌套,但函数的调用不可以嵌套 B)函数的定义不可以嵌套,但函数的调用可以嵌套 C)函数的定义和函数的调用均不可以嵌套 D)函数的定义和函数的调用均可以嵌套 27.下面程序的输出结果是【】。 fun (intx) (intp: if (x==0|x==1)return (3); p=x-fun (x-2); returnp:} main ( {printf ("%d\n",fun (4)): 28.下面程序的输出是【】。 longfun5 (intn) {longs: if((n=1)|l(n=2)s=2: elses=n+fun5(n-1); return (s):} main ( {longx: x=fun5(4): printf("%ldn”,x):} 29.有如下程序 longfib (intn) (if (n>2)return (fib (n-1)+fib (n-2)); elsereturn(2): } main ( (printf ("%d\n",fib (3));
在 C 语言程序中 A)函数的定义可以嵌套,但函数的调用不可以嵌套 B)函数的定义不可以嵌套,但函数的调用可以嵌套 C)函数的定义和函数的调用均不可以嵌套 D)函数的定义和函数的调用均可以嵌套 27.下面程序的输出结果是【】。 fun(intx) {intp; if(x==0││x==1)return(3); p=x-fun(x-2); returnp;} main() {printf("%d\n",fun(4));} 28.下面程序的输出是【】。 longfun5(intn) {longs; if((n==1)||(n==2))s=2; elses=n+fun5(n-1); return(s);} main() {longx; x=fun5(4); printf("%ld\n",x);} 29.有如下程序 longfib(intn) {if(n>2)return(fib(n-1)+fib(n-2)); elsereturn(2); } main() {printf("%d\n",fib(3));}

该程序的输出结果是 A)2B)4C)6D)8 30.若输入3个整数3,2,1,则下面程序的输出结果是【】。 #include voidsub (intn,intuu[]) (intt: t=uu[n-];t+=3*uu[n]: n=n++; if(t>=10){uu[n+]=t/10:uu[n]=t%10:} elseuu[n]=t;} main ( {inti,n,aa[10]={0,0,0,0,0,0} scanf("%d%d%d”,&n,&aa[0],&aa[1]): for (i=1;i<n;i++)sub (i,aa); for (i=0:i<=n:i++)printf ("%d",aa[i]): printf ("\n"); 31.用数组名作为函数调用的实参,传递给形参的是 A)数组的首地址B)数组第一个元素的值 C)数组中全部元素的值D)数组元素的个数 32.若使用一维数组名作为函数的实参,则以下正确的说法是 A)必须在主调函数中说明此数组的大小 B)实参数组类型与形参数组类型可以不匹配 C)在被调函数中,不需要考虑形参数组的大小 D)实参数组名与形参数组名必须一致 33.下列程序执行后输出的结果是 #include (stdio.h) f (inta) (intb=0: staticintc=3: a=c++,b++;
该程序的输出结果是 A)2B)4C)6D)8 30.若输入 3 个整数 3,2,1,则下面程序的输出结果是【】。 #include voidsub(intn,intuu[]) {intt; t=uu[n--];t+=3*uu[n]; n=n++; if(t>=10){uu[n++]=t/10;uu[n]=t%10;} elseuu[n]=t;} main() {inti,n,aa[10]={0,0,0,0,0,0} scanf("%d%d%d",&n,&aa[0],&aa[1]); for(i=1;i<n;i++)sub(i,aa); for(i=0;i<=n;i++)printf("%d",aa[i]); printf("\n");} 31.用数组名作为函数调用的实参,传递给形参的是 A)数组的首地址 B)数组第一个元素的值 C)数组中全部元素的值 D)数组元素的个数 32.若使用一维数组名作为函数的实参,则以下正确的说法是 A)必须在主调函数中说明此数组的大小 B)实参数组类型与形参数组类型可以不匹配 C)在被调函数中,不需要考虑形参数组的大小 D)实参数组名与形参数组名必须一致 33.下列程序执行后输出的结果是 #include〈stdio.h〉 f(inta) {intb=0; staticintc=3; a=c++,b++;

returu (a): main ( (inta=2,i,k: for(i=0:i<2:i+)k=f(a+): printf ("%d\n",k); A)3B)0C)5D)4 34.以下叙述中不正确的是 A)在C中,函数中的自动变量可赋初值,每调用一次,赋一次初值。 B)在C中调用函数时,实际参数和对应形参在类型上只需赋值兼容。 C)在C中,外部变量的隐含类别是自动存储类别。 D)在C中,函数形参可以说明为register变量。 35.下面程序的输出是 A)3B)4C)6D)9 fun3 (intx) (staticinta=3: a+=x; return (a); } main ( (intk=2,m=1,n: n=fun3 (k); n=fun3 (m); printf ("%d\n",n);} 36.以下程序的输出结果是【】。 voidfun ( {staticinta=0; a+=2;printf ("%d",a): main ( (intcc: for (cc=1:cc<4:cc++)fun ()
returu(a);} main() {inta=2,i,k; for(i=0;i<2;i++)k=f(a++); printf("%d\n",k);} A)3B)0C)5D)4 34.以下叙述中不正确的是 A)在 C 中,函数中的自动变量可赋初值,每调用一次,赋一次初值。 B)在 C 中调用函数时,实际参数和对应形参在类型上只需赋值兼容。 C)在 C 中,外部变量的隐含类别是自动存储类别。 D)在 C 中,函数形参可以说明为 register 变量。 35.下面程序的输出是 A)3B)4C)6D)9 fun3(intx) {staticinta=3; a+=x; return(a); } main() {intk=2,m=1,n; n=fun3(k); n=fun3(m); printf("%d\n",n);} 36.以下程序的输出结果是【】。 voidfun() {staticinta=0; a+=2;printf("%d",a);} main() {intcc; for(cc=1;cc<4;cc++)fun();

printf ("In"); 37.以下程序的输出结果是 A)699B)669C)61515D)6615 intd=1: fun (intp) {staticintd=5: d+=p:printf ("%d",d): return(d)片} main ( {inta=3:printf ("%d\n",fun (a+fun (d))); 38.以下正确的说法是 如果在一个函数中的复合语句中定义了一个变量,则该变量 A)只在该复合语句中有效B)在该函数中有效 C)在本程序范围内均有效D)为非法变量 39.C语言中,函数的隐含存储类别是 A)autoB)staticC)externD)无存储类别 40.下列叙述中正确的是 A)C语言编译时不检查语法 B)C语言的子程序有过程和函数两种 C)C语言的函数可以嵌套定义 D)C语言所有函数都是外部函数 41.下程序运行后,输出结果是 A)8,15B)8,16C)8,17D)8,8 func (inta,intb) (staticintm=0,i=2; i+=m+l:m=i+a+b: return (m); } main ( (intk=4,m=1,p:
printf("\n");} 37.以下程序的输出结果是 A)699B)669C)61515D)6615 intd=1; fun(intp) {staticintd=5; d+=p;printf("%d",d); return(d);} main() {inta=3;printf("%d\n",fun(a+fun(d)));} 38.以下正确的说法是 如果在一个函数中的复合语句中定义了一个变量,则该变量 A)只在该复合语句中有效 B)在该函数中有效 C)在本程序范围内均有效 D)为非法变量 39.C 语言中,函数的隐含存储类别是 A)autoB)staticC)externD)无存储类别 40.下列叙述中正确的是 A)C 语言编译时不检查语法 B)C 语言的子程序有过程和函数两种 C)C 语言的函数可以嵌套定义 D)C 语言所有函数都是外部函数 41.下程序运行后,输出结果是 A)8,15B)8,16C)8,17D)8,8 func(inta,intb) {staticintm=0,i=2; i+=m+1;m=i+a+b; return(m); } main() {intk=4,m=1,p;