C语言题库第4章 函数.docx
《C语言题库第4章 函数.docx》由会员分享,可在线阅读,更多相关《C语言题库第4章 函数.docx(19页珍藏版)》请在冰点文库上搜索。
C语言题库第4章函数
第四章函数
一、单项选择
1.有以下程序,程序运行的输出结果(A)
#include
intf(intx);
intmain()
{intn=1,m;
m=f(f(f(n)));printf(“%d\n”,m);
return0;
}
intf(intx)
{returnx*2;}
A.8B.4C.1D.2
2.有以下程序,程序执行后变量w中的值是(C)
#include
intfunl(doublea){returna*=a;}
intfun2(doublex,doubley)
{doublea=0,b=0;
a=funl(x);b=funl(y);return(int)(a+b);
}
intmain()
{doublew;w=fun2(1.1,2.0);……}
3.有以下程序,程序运行后的输出结果是(B)
#include
voidfun(intp)
{intd=2;p=d++;printf(“%d”,p);}
intmain()
{inta=1;
fun(a);printf(“%d\n”,a);
return0;
}
4.有以下程序,程序运行后的输出结果是(B)
#include
intfun()
{staticintx=1;
x*=2;
returnx;
}
intmain()
{inti,s=1;
for(i=1;i<=3;i++)s*=fun();
printf("%d\n",s);
}
5.有以下程序,程序运行后的输出结果是(B)
#include
intfun(intx,inty)
{if(x!
=y)return((x+y)/2);
elsereturn(x);
}
intmain()
{inta=4,b=5,c=6;
printf("%d\n",fun(2*a,fun(b,c)));
return0;
}
6.有以下程序,程序运行后的输出结果是(D)
#include
intf(intx,inty)
{return((y-x)*x);}
intmain()
{inta=3,b=4,c=5,d;
d=f(f(a,b),f(a,c));
printf("%d\n",d);
}
7.有以下程序:
程序运行后的输出结果是(A)
#include
intf()
{staticintx=1;
x+=1;returnx;
}
intmain()
{inti,s=1;
for(i=1;i<=5;i++)s+=fun();
printf("%d\n",s);
return0;
}
8.设函数中有整形变量n,为保证其在未赋初值的情况下初值为0,应该选择的存储类别是(D)
9.在函数调用过程中,如果函数funA调用了函数funB,函数funB又调用了函数funA,则(C)
10.在C语言中,只有在使用时才占用内存单元的变量,其存储类型是( B)。
11.下列叙述中正确的是(A)
12.以下叙述正确的是(A )
13.在一个C语言源程序文件中所定义的全局变量,其作用域为( C)
14.以下程序的主函数中调用了在其前面定义的fun函数,则以下选项中错误的fun函数首部是(B)
#include
intmain()
{
doublea[15],k;
k=fun(a);
return0;}
15.若有代数式
(其中e仅代表自然对数的底数,不是变量),则以下能够正确表示该代数式的C语言表达式是( A )
16.以下说法不正确的是( C )
17.设有如下函数定义,若执行调用语句:
n=fun(3);,则函数fun总共被调用的次数是( B )
intfun(intk)
{if(k<1)return0;
elseif(k==1)return1;
elsereturnfun(k-1)+1;
}
18.以下正确的函数定义形式是:
(A)
19.以下关于return语句叙述中正确的是(D)
20.若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是(D)
二、程序设计
/*请编写函数fun,其功能是:
将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k传回。
例如,输入17,则应输出46891012141516。
注意:
部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
*/
#include
#include
#include
intfun(intm,intxx[])
{
/***************Begin************/
/***************End************/
}
intmain()
{
FILE*wf,*in;
intm,n,k,zz[100];
printf("\nPleaseenteranintegernumberbetween10and100:
");
scanf("%d",&n);
m=fun(n,zz);
printf("\n\nThereare%dnon-primenumberslessthan%d:
",m,n);
for(n=0;nprintf("%4d\n",zz[n]);
in=fopen("in01.dat","r");
wf=fopen("out01.dat","w");
fscanf(in,"%d",&k);
m=fun(k,zz);
for(n=0;nfprintf(wf,"%d\n",zz[n]);
fclose(in);
fclose(wf);
return0;
}
【参考代码】
inti,k,j=0;
for(i=2;ifor(k=2;k
if(i%k==0)break;
if(k
}
returnj;
三、程序改错
1./*下列给定程序中,函数fun的功能是:
将十进制正整数m转换成
进制数,并按位输出。
例如,若输入8和2,则应输出1000(即十进制数8转换成二进制表示是1000)。
请改正函数fun中的错误,使它能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
*/
#include
#include
/**********ERROR**********/
voidfun(intm,intk);
{intaa[20],i;
for(i=0;m;i++)
{
/**********ERROR**********/
aa[i]=m/k;
m/=k;
}
for(;i;i--)
/**********ERROR**********/
printf("%d",aa[i]);
}
intmain()
{
intb,n;
printf("\nPleaseenteranumberandabase:
\n");
scanf("%d%d",&n,&b);
fun(n,b);
printf("\n");
return0;
}
【改错1】voidfun(intm,intk)
【改错2】aa[i]=m%k;
【改错3】printf("%d",aa[i-1]);
2.如当n的值为20时,该数列为3,8,13,18,23,28,…,93,98。
符合此条件的累加值应为42,126,366,570,1010。
请改正程序中的错误,使它能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
*/
#include
#defineN20
intfun(intn,inta[])
/**********ERROR**********/
{inti,j,k,sum;
sum=0;
for(k=3,i=0;i{sum=sum+k;
/**********ERROR**********/
if(sum%4=2)
a[j++]=sum;
}
/**********ERROR**********/
returnj-1;
}
intmain()
{
inta[N],d,n,i;
printf("\nEntern(4<=n<=50):
");
scanf("%d",&n);
d=fun(n,a);
printf("\n\nTheresult:
\n");
for(i=0;iprintf("\n\n");
return0;
}
【改错1】inti,j=0,k,sum;
【改错2】if(sum%4==2)
【改错3】returnj++;
3./*下列给定程序中,函数fun的功能是:
用递归算法计算斐波拉契级数列中第n项的值。
从第一项起,斐波拉契级数序列为1,1,2,3,5,8,13,21,…例如,若给n输入7,该项的斐波拉契级数值为13。
请改正程序中的错误,使它能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
*/
#include
longfun(intg)
{
/**********ERROR**********/
switch(g);
{case0:
return0;
/**********ERROR**********/
case1;case2:
return1;
}
return(fun(g-1)+fun(g-2));
}
intmain()
{
longfib;intn;
printf("Inputn:
");
scanf("%d",&n);
printf("n=%d\n",n);
fib=fun(n);
printf("fib=%d\n\n",fib);
return0;
}
【改错1】switch(g)
【改错2】case1:
case2:
return1;
4./*下列给定程序中,函数fun的功能是:
按如下递归公式求函数值。
例如,当给n输入5时,函数值为18;当给n输入3时,函数值为14。
请改正程序中的错误,使它能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
*/
#include
/**********ERROR**********/
intfun(n)
{
intc;
/**********ERROR**********/
if(n=1)
c=10;
else
c=fun(n-1)+2;
return(c);
}
intmain()
{
intn;
printf("Entern:
");
scanf("%d",&n);
printf("Theresult:
%d\n\n",fun(n));
return0;
}
【改错1】intfun(intn)
【改错2】if(n==1)
5./*下列给定程序中,函数fun的功能是:
计算函数F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值。
其中x和y不相等,z和y不等。
例如,当x的值为9,y的值为11,z的值为15时,函数值为-3.50。
请改正程序中的错误,使它能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
*/
#include
#include
#include
/**********ERROR**********/
#defineFU(m,n)(m/n)
floatfun(floata,floatb,floatc)
{floatvalue;
value=FU(a+b,a-b)+FU(c+b,c-b);
/**********ERROR**********/
return(Value);
}
intmain()
{floatx,y,z,sum;
printf("Inputxyz:
:
");
scanf("%f%f%f",&x,&y,&z);
printf("x=%f,y=%f,z=%f\n",x,y,z);
if(x==y||y==z)
{printf("Dataerror!
\n");
exit(0);}
sum=fun(x,y,z);
printf("Theresultis:
%5.2f\n",sum);
return0;
}
【改错1】#defineFU(m,n)(m)/(n)
【改错2】return(value);
四、程序填空
/*请补充函数fun,函数fun的功能是求n的阶乘。
注意:
部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。
试题程序:
*/
#include
longfun(intn)
{
/**********FILL**********/
if([1])
/**********FILL**********/
return(n*fun([2]));
/**********FILL**********/
return[3];
}
intmain()
{
printf("10!
=%ld\n",fun(10));
return0;
}
【空1】if(n>1)
【空2】return(n*fun(n-1));
【空3】return1;