第5章 函数答案.docx
《第5章 函数答案.docx》由会员分享,可在线阅读,更多相关《第5章 函数答案.docx(17页珍藏版)》请在冰点文库上搜索。
第5章函数答案
第5章函数
一、选择题
1、以下所列的各函数首部中,正确的是(C)
A)voidplay(var:
Integer,varb:
Integer)
B)voidplay(inta,b)
C)voidplay(inta,intb)
D)Subplay(aasinteger,basinteger)
2、以下正确的函数的形式是(B)
A)doublefun(intx,inty)B)fun(intx,inty)
{z=x+y;returnz;}{intz=9;returnz;}
C)fun(intx,inty);D)doublefun(intx,y)
{intx,y;doublez;{doublez;
z=x+y;returnz;}z=x+y;returnz;}
3、以下正确的函数定义形式是(C)
A)doublefun(intx,inty)B)doublefun(intx;inty)
C)doublefun(intx,inty);D)doublefun(intx,y);
4、C语言规定,函数返回值的类型是由(D)
A)return语句中的表达式类型决定的
B)调用该函数时的主调函数类型决定
C)调用该函数时系统临时决定
D)在定义该函数时所指定的函数类型所决定
5、若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是(D)
A)函数调用可以作为独立的语句存在
B)函数调用可以作为一个函数的实参
C)函数调用可以出现在表达式中
D)函数调用可以作为一个函数的形参
6、C语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是(B)
A)voidB)intC)floatD)double
7、以下函数值的类型是(A)
fun(floatx)
{floaty;
y=3*x-4;
returny;
}
A)intB)不确定
C)voidD)float
8、以下函数调用语句中,含有的实参个数是(B)
A)1B)2C)4D)5
func((exp1,exp2),(exp3,exp4,exp5));
9、有以下程序
voidf(intx,inty){
intt;
if(x}
main(){
inta=4,b=3,c=5;
f(a,b);f(a,c);f(b,c);
printf("%d,%d,%d\n",a,b,c);
}执行后输出的结果是(D)
A)3,4,5B)5,3,4C)5,4,3D)4,3,5
10、以下程序的输出结果是(C)
A)0B)29C)31D)无定值
fun(intx,inty,intz)
{z=x*x+y*y;}
main()
{inta=31;
fun(5,2,a);
printf(“%d”,a);
}
11、有以下程序
fun(inta,intb){
if(a>b)return(a);
elsereturn(b);
}
main(){
intx=3,y=8,z=6,r;
r=fun(fun(x,y),2*z);
printf("%d\n",r);
}
程序运行后的输出结果是(D)
A)3B)6C)8D)12
12、有以下程序
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));
}
程序运行后的输出结果是(B)
A)编译出错B)9
C)21D)9.0
13、有如下程序
longfib(intn){
if(n>2)return(fib(n-1)+fib(n-2));
elsereturn
(2);
}
main(){
printf("%d\n",fib(3));
}
该程序的输出结果是(B)
A)2B)4C)6D)8
14、以下程序的输出结果是(A)
A)1B)2C)3D)4
longfun(intn)
{longs;
if(n==1||n==2)s=2;
elses=n-fun(n-1);
returns;
}
main()
{printf("%ld\n",fun(3));}
15、有以下程序
intf(intn){
if(n==1)return1;
elsereturnf(n-1)+1;
}
main(){
inti,j=0;
for(i=1;i<3;i++)j+=f(i);
printf("%d\n",j);
}
程序运行后的输出结果是(B)
A)4B)3C)2D)1
16、以下叙述中不正确的是(D)
A)在不同的函数中可以使用相同名字的变量
B)函数中的形式参数是局部变量
C)在一个函数内定义的变量只在本函数范围内有效
D)在一个函数内的复合语句中定义的变量在本函数范围内有效
17、以下叙述中正确的是(A)
A)全局变量的作用域一定比局部变量的作用域范围大
B)静态(static)类别变量的生存期贯穿于整个程序的运行期间
C)函数的形参都属于全局变量
D)未在定义语句中赋初值的auto变量和static变量的初值都是随机值
18、以下程序的输出结果是(B)
inta=5;
fun(intb){
inta=10;
a+=b++;
printf("%d",a);
}
main(){
intc=20;
fun(c);
a+=c++;
printf("%d\n",a);
}
A)3126B)3025C)2525D)3030
19、以下只有在使用时才为该类型变量分配内存的存储类说明是(A)
A)auto和staticB)auto和register
C)register和staticD)extern和register
20、以下叙述中不正确的是(C)
A)一个变量的作用域完全取决于变量定义语句的位置
B)全局变量可以在函数以外的任何部分进行定义
C)局部变量的“生存期”只限于本次函数调用,因此不可能将局部变量的运算结果保持至下一次调用
D)一个全局变量说明为static存储类是为了限制其他编译单位的引用
21、有以下程序
inta=4;
intf(intn){
intt=0;
staticinta=5;
if(n%2){inta=6;t+=a++;}
else{inta=7;t+=a++;}
returnt+a++;
}
main(){
ints=a,i=0;
for(;i<2;i++)s+=f(i);
printf("%d\n",s);
}
程序运行后的输出结果是(B)
A)24B)28C)32D)36
22、有以下程序
intf(intx,inty)
{return((y-x)*x);}
main(){
inta=3,b=4,c=5,d;
d=f(f(a,b),f(a,c));
printf(“%d\n”,d);
}
程序运行后的输出结果是(B)
A)10B)9C)8D)7
23、有以下程序
intfun(intx,inty)
{if(x==y)return(x);
elsereturn((x+y)/2);
}
main(){
inta=4,b=5,c=6;
printf(“%d\n”,fun(2*a,fun(b,c)));
}
程序运行后的输出结果是(B)
A)3B)6C)8D)12
24、有以下程序
int fun(int a,int b)
{ if(b==0) return a;
else return(fun(--a,--b));
}
main()
{ printf("%d\n", fun(4,2));}
程序的运行结果是(B)
A)1 B)2 C)3 D)4
25、有以下程序
intf(intx){
inty;
if(x==0||x==1)return(3);
y=x*x-f(x-2);
returny;
}
main(){
intz;
z=f(3);
printf("%d\n",z);
程序的运行结果是(C)
}A)0B)9C)6D)8
二、程序阅读题
1、以下程序的正确结果是2,5,1,2,3,-2
main()
{
inta=3,b=2,c=1;
c-=++b;
b*=a+c;
{
intb=5,c=12;
c/=b*2;
a-=c;
printf("%d,%d,%d,",a,b,c);
a+=--c;
}
printf("%d,%d,%d\n",a,b,c);
}
2、有以下程序,当执行后,其结果是14
inta=1;
intf(intc){
staticinta=2;
c=c+1;
return(a++)+c;
}
main(){
inti,k=0;
for(i=0;i<2;i++){inta=3;k+=f(a);}
k+=a;
printf(“%d\n”,k);
}
3、以下程序运行后的输出结果是136
fun(intx)
{if(x/2>0)fun(x/2);
printf("%d",x);
}
main()
{fun(6);}
4、若有以下程序
intf(intx,inty)
{return(y-x)*x;}
main()
{inta=3,b=4,c=5,d;
d=f(f(3,4),f(3,5));
printf("%d\n",d);
}
执行后输出结果是9
5、有以下程序
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));
}
程序运行后的输出结果是9。
6、以下程序的输出结果是1,6,3,2,3
main(){
inti=1,j=3;
printf("%d,",i++);
{
inti=0;
i+=j*2;
printf("%d,%d,",i,j);
}
printf("%d,%d\n",i,j);
}
7、以下程序的输出结果是15
intf()
{staticinti=0;
ints=1;
s+=i;i++;
returns;
}
main()
{inti,a=0;
for(i=0;i<5;i++)a+=f();
printf("%d\n",a);
}
8、以下程序运行后的输出结果是3,2,2,3
voidfun(intx,inty)
{x=x+y;y=x-y;x=x-y;
printf(“%d,%d,”,x,y);}
main()
{intx=2,y=3;
fun(x,y);
printf(“%d,%d\n”,x,y);}
9、以下程序的运行结果是m=4k=4i=5j=5 。
intk=0;
voidfun(intm)
{m+=k;k+=m;printf("m=%dk=%d",m,k++);}
main()
{inti=4;
fun(i++);printf("i=%dk=%d\n",i,k);
}
10、有以下程序
intsub(intn){return(n/10+n%10);}
main()
{intx,y;
scanf("%d",&x);
y=sub(sub(sub(x)));
printf("%d\n",y);
}
若运行时输入:
1234<回车>,程序的输出结果是10
11、以下程序的输出结果是 15 。
int fun(int x)
{ static int t=0;
return(t+=x);
}
main()
{ int s,i;
for(i=1;i<=5;i++) s=fun(i);
printf("%d\n",s);
}
三、程序填空题
1、请在以下程序第一行的下划线处填写适当内容,使程序能正确运行。
doublemax(double,double);
main()
{doublex,y;
scanf("%lf%lf",&x,&y);
printf("%lf\n",max(x,y));
}
doublemax(doublea,doubleb)
{return(a>b?
a:
b);}
2、下面程序的功能是:
将任意输入的一个偶数n分解为两个素数之和,程序中函数check用来判断一个整数x是否是素数,若是,返回1,否则返回0。
main(){
intn,i;
intcheck(intx);
do{
printf("Inputn:
");
scanf("%d",&n);
}while(n%2!
=0);
for(i=3;i<=n/2;i++)
if(check(i)&&check(n-i))
printf("%d=%d+%d\n",n,i,n-i);
}
intcheck(intx){
inti;
for(i=2;iif(x%i==0)return(0);
return
(1);}
3、以下isprime函数的功能是判断形参a是否为素数,是素数,函数返回1,否则返回0,请填空
intisprime(inta)
{
inti;
for(i=2;i<=a/2;i++)
if(a%i==0)return0;
return1;
}
4、请将以下程序中的函数声明语句补充完整。
intmax(int,int);
main()
{intx,y,(*p)();
scanf(“%d%d”,&x,&y);
p=max;
printf(“%d\n”,(*p)(x,y));
}
intmax(inta,intb)
{return(a>b?
a:
b);}
5、以下程序的功能是:
通过函数func输入字符并统计输入字符的个数。
输入时用字符@作为输入结束标志。
请填空。
long func() /* 函数说明语句 */
main()
{ long n;
n=func(); printf("n=%ld\n",n);
}
long func()
{ long m;
for(m=0;getchar()!
='@'; m++ );
return m;
}
6、以下程序的功能是调用函数fun计算:
m=1-2+3-4+…+9-10,并输出结果。
请填空。
intfun(intn){
intm=0,f=1,i;
for(i=1;i<=n;i++){
m+=i*f;
f=-f;
}
returnm;
}
main()
{printf("m=%d\n",fun(10));}
7、以下sum函数的功能是计算下列级数之和。
s=1+x+x2/2!
+x3/3!
+........+xn/n!
请给函数中的各变量正确赋初值。
doublesum(doublex,intn){
inti;doublea,b,s;
s=1;
for(i=1;i<=n;i++){
a=a*x;
b=b*i;
s=s+a/b;
}
returns;
}
8、通过函数求f(x)的累加和,其中f(x)=x2+1
main(){
printf("Thesum=%d\n",SunFun(10));
}
SunFun(intn){
intx,s=0;
for(x=0;x<=n;x++)s+=F(x);
returns;
}
F(intx)
{returnx*x+1;}
四、程序编程题
1、请编写函数fun,它的功能是:
计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。
例如,当n为20时,返回的值为0.583333。
下面已经给出了函数的首部,请编写函数体部分。
doublefun(intn)
{
请完成函数体部分
}
2、请编写一个函数fun,它的功能是:
计算并输出给定整数n的所有因子(不包括1和自身)之和。
规定n的值不大于1000。
例如整数856的所有因子之和等于763。
下面已经给出了函数的首部,请编写函数体部分。
intfun(intn)
{
请完成函数体部分
}
3、请编写函数fun,其功能是:
计算并输出3到n之间的(含3和n)所有素数的平方根之和。
例如,n为100,则返回值为148.872470。
要求n的值大于2但不大于100。
下面已经给出了函数的首部,请编写函数体部分。
doublefun(intn)
{
请完成函数体部分
}
4、请编写一个函数,函数的功能是使实型数保留2位小数,并对第三位进行四舍五入(规定实型数为正数)。
例如:
实型数为1234.567,则函数返回1234.570000
实型数为1234.564,则函数返回1234.560000
下面已经给出了函数的首部,请编写函数体部分。
floatfun(floath)
{
请完成函数体部分
}