C语言函数题库及答案.docx
《C语言函数题库及答案.docx》由会员分享,可在线阅读,更多相关《C语言函数题库及答案.docx(15页珍藏版)》请在冰豆网上搜索。
C语言函数题库及答案
第六部分函数
一、单项选择题
1.C语言中的函数返回值的类型是由(D)决定
A.return语句中的表达式B.调用函数的主调函数
C.调用函数时临时D.定义函数时所指定的函数类型
2.下面不正确的描述是(B)。
A.调用函数时,实参可以是表达式
B.调用函数时,实参和形参可以共用内存单元
C.调用函数时,将形参分配内存单元
D.调用函数时,实参与形参的类型必须一致
3.在C语言中,调用一个函数时,实参变量和形参变量之间的数据传递是(D)
A.地址传递B.值传递
C.由实参传递给形参,并由形参传回给实参D.由用户指定传递方式
4.下面的函数调用语句中含有(A)个实参
inta,b,c;
intsum(intx1,intx2);
……
total=sum((a,b),c);
A.2B.3C.4D.5
5.在C语言中(C)
A.函数的定义可以嵌套,但函数的调用不可以嵌套
B.函数的定义和调用均不可以嵌套
C.函数的定义不可以嵌套,但是函数的调用可以嵌套
D.函数的定义和调用均可以嵌套
6.关于C语言中的return语句正确的是(C)
A.只能在主函数中出现
B.在每个函数中都必须出现
C.可以在一个函数中出现多次
D.只能在除主函数之外的函数中出现
7.两个形参中,第一个形参为指针类型、第二个形参为整型,则对函数形参的说明有错误的是(D)
A.inta(floatx[],intn)
B.inta(float*x,intn)
C.inta(floatx[10],intn)
D.inta(floatx,intn)
8.在C语言中,函数的数据类型是指(A)
A.函数返回值的数据类型
B.函数形参的数据类型
C.调用该函数时的实参的数据类型
D.任意指定的数据类型
9.已知如下定义的函数:
fun1(a)
{printf("\n%d",a);
}
则该函数的数据类型是(C)
A.与参数a的类型相同
B.void型
C.整型
D.无法确定
10.定义一个函数实现交换x和y的值,并将结果正确返回。
能够实现此功能的是(D)
A.swapa(intx,inty)
{inttemp;
temp=x;x=y;y=temp;
}
B.swapb(int*x,int*y)
{inttemp;
temp=x;x=y;y=temp;
}
C.swapc(int*x,int*y)
{inttemp;
temp=*x;*x=*y;*y=temp;
}
D.swapd(int*x,int*y)
{int*temp;
temp=x;x=y;y=temp;
}
11.求一个角的正弦函数值的平方。
能够实现此功能的函数是(B)
A.
sqofsina(x)
{floatx;
return(sin(x)*sin(x));
}
B.doublesqofsinb(x)
{floatx;
return(sin((double)x)*sin((double)x));
}
C.doublesqofsinc(x)
{return(((sin(x)*sin(x));
}
D.sqofsind(x)
{floatx;
return(double(sin(x)*sin(x)));
12.已知函数定义如下:
floatfun1(intx,inty)
{floatz;
z=(float)x/y;
return(z);
}
主调函数中有inta=1,b=0;可以正确调用此函数的语句是(D)
A.printf("%f",fun1(a,b));B.printf("%f",fun1(&a,&b));
C.printf("%f",fun1(*a,*b));D.调用时发生错误
13.下面函数的功能是(B)
a(s1,s2)
chars1[],s2[];
{while(s2++=s1++);
}
A.字符串比较
B.字符串复制
C.字符串连接
D.字符串反向
二、填空题
1.在C语言中,存储类型为局部和自动型的变量,只能在使用它们时才占用存储空间。
2.在一个源文件中定义的全局变量的作用域为整个源程序。
3.下面程序的执行结果是84
intd=1;
fun(intp)
{
intd=5;
d+=p++;
printf(“%d”,d);
}
main()
{
inta=3;
fun(a);
d+=a++;
printf(“%d”,d);
}
4.该fun函数的功能是求10的阶乘。
1)#include
2)longfun(intn)
3){if(___1___)
4)return(n*fun(___2___));
5)elseif(___3___)
6)return1;}
第一处:
n>1
第二处:
n-1·
第三处:
n==1
解析:
从第2、4行看到了函数名,函数体中又出现了函数的调用,则是递归。
我们知道:
n!
=n*(n-1)!
这就是一个递归的表达式,写成函数就是fun(n)=n*fun(n-1)。
因此,4行处填写n-1。
又:
1!
=1故3,5行就好填了。
因此答案是n>1n-1n==1。
还有0!
=1故,还可填写:
n>0n-1n==0
注意:
35行的条件是相反的,这也是if与else条件的互斥性。
5.程序的功能是计算s=1!
+2!
+3!
+……+n!
1)longfun(intn)
2){inti;
3)longs;
4)s=___1___;
5)for(i=1;i<=n;i++)
6)s=___2___;
7)returns;
8)}
9)main()
10){longs;
11)intk,n;
12)scanf("%d",&n);
13)s=___3___;
14)for(k=1;k<=n;k++)
15)s=___4___;
16)printf("%ld\n",s);
17)}
第一处:
1
第二处:
s*i
第三处:
0
第四处:
s+fun(k)
解析:
首先,搞清楚函数fun、main各自的功能。
Fun是求一个数的阶乘,我们知道:
n!
=1*2*3*…*n
同时要死记住:
求积,积的初值一般等于1。
故fun中s是用来存放积的,其初值等于1;求阶乘是连乘,故s=s*i
Main是求和,记住:
和的初值一般等于0.
两个函数中的局部变量s的作用是不同的。
Main中的s是存放和的。
最后:
注意一些变量的类型。
阶乘是求积,积的增长速度是比较快的,为防止溢出,fun的返回值类型是long。
输出中ld是输出长整数。
6.请在函数fun的横线上填写若干个表达式,使从键盘上输入一个整数n,输出斐波纳契数列。
斐波契数列是一种整数数列,其中每数等于前两数之后,如:
011235813……
1)intfun(intn){
2)if(___1___)
3)return0;
4)elseif(___2___)
5)return1;
6)else
7)return___3___;
8)}
第一处:
n==0
第二处:
n==1
第三处:
fun(n-1)+fun(n-2)
解析:
求斐波契数列:
一项等于其前两项的和。
这也是一个递归。
求斐波契数列的第n项的值,n从0开始。
7.请补全函数fun,该函数的功能是求出以下分数序列的前n项之和。
和值通过函数值返回到main函数。
1)#include
2)#include
3)___1___fun(intn)
4){inta,b,c,k;
5)doubles;
6)s=0.0;
7)a=2;
8)b=1;
9)for(k=1;k<=n;k++)
10){
11)s=s+(___2___)a/(___3___)b;
12)c=a;
13)a=a+b;
14)b=c;
15)}
16)returns;
17)}
第一处:
double
第二处:
double
第三处:
double
解析:
从第11----14总结出数列的表达式。
第1项是a/b=2/1;3/24/3
故:
s=2/1+3/2+4/3+……和的初值是0。
记住:
两个整数进行算术运算结果也是整数,算术运算中只要有一个操作数是实数,运算结果就是实数。
本题希望结果是实数,故要进行强制类型转换,2,3只要有一个进行强制转换就可以了。
最后,函数需要有一个返回值类型,当然也是双精度浮点数了。
8.给定程序的功能是计算并输出下列级数的前N项之和SN,直到SN大于q为止,q的值通过形参传入。
1)doublefun(doubleq)
2){intn;
3)doubles;
4)n=2;
5)s=2.0;
6)while(s___1___q)
7){
8)s=s+(double)(n+1)/n;
9)___2___;
10)}
11)printf("n=%d\n",n);
12)___3___;
13)}
第一处:
s<=q
第二处:
n++
第三处:
returns
解析:
从第8行,
从数学的角度总结出数列的表达式。
(n+1)/nn从2开始,每次增加1,故:
SN=2+3/2+4/3+……和的初值是2.0
循环条件是“SN大于q为止”,while是满足条件才循环,故填写s<=q
最后,函数需要有一个返回值。
9.给定程序功能是计算S=f(-n)+f(-n+1)+…+f(0)+f
(1)+f
(2)+…+f(n)的值。
floatf(doublex)
{
if(x==0.0||x==2.0)
return___1___;
elseif(x<0.0)
return(x-1)/(x-2);
else
return(x+1)/(x-2);
}
doublefun(intn)
{inti;doubles=0.0,y;
for(i=-n;i<=___2___;i++)
{y=f(1.0*i);s+=y;}
return___3___;
}
main()
{
printf("%f\n",fun(5));
}
第一处:
0.0
第二处:
n
第三处:
s
解析:
函数f(doublex)求每个单项的值。
if……else的条件是互斥的。
fun