第五章 函 数.docx
《第五章 函 数.docx》由会员分享,可在线阅读,更多相关《第五章 函 数.docx(42页珍藏版)》请在冰豆网上搜索。
![第五章 函 数.docx](https://file1.bdocx.com/fileroot1/2023-7/21/32252e21-332c-465a-994b-c74ca59356ed/32252e21-332c-465a-994b-c74ca59356ed1.gif)
第五章函数
第五章函数
5.1选择题
1.C语言是由(B)构成。
A.主程序和子程序
B.主函数和若干子函数
C.一个主函数和一个其他函数
D.主函数和子程序
2.以下说法中正确的是(C)。
A.C语言程序总是从第一个的函数开始执行
B.在C语言程序中,要调用的函数必须在main()函数中定义
C.C语言程序总是从main()函数开始执行
D.C语言程序中的main()函数必须放在程序的开始部分
3.以下对C语言函数的有关描述中,正确的是(A)。
A.调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参
B.C函数既可以嵌套定义又可以递归调用
C.函数必须有返回值,否则不能使用函数
D.C程序中有调用关系的所有函数必须放在同一个源程序文件中
4.C语言程序中,当函数调用时(A)。
A.实参和形参各占一个独立的存储单元
B.实参和形参共用一个存储单元
C.可以由用户指定是否共用存储单元
D.计算机系统自动确定是否共用存储单元
5.关于return语句,下列正确的说法是(C)。
A.在主函数和其他函数中均要出现
B.必须在每个函数中出现
C.可以在同一个函数中出现多次
D.只能在除主函数之外的函数中出现一次
6.一个函数返回值的类型是由(C)决定的。
A.return语句中表达式的类型
B.在调用函数时临时指定
C.定义函数时指定的函数类型
D.调用该函数的主调函数的类型
7.在C语言的函数中,下列正确的说法是(C)。
A.必须有形参
B.形参必须是变量名
C.可以有也可以没有形参
D.数组名不能作形参
8.以下描述正确的是(A)。
A.函数调用可以出现在执行语句或表达式中
B.函数调用不能作为一个函数的实参
C.函数调用可以作为一个函数的形参
D.以上都不正确
9.在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是(B)。
A.地址传递B.单向值传递
C.由实参传给形参,再由形参传回实参D.传递方式由用户指定
10.当调用函数时,实参是一个数组名,则向函数传送的是(B)。
A.数组的长度B.数组的首地址
C.数组每一个元素的地址D.数组每个元素中的值
11.如果在一个函数的复合语句中定义了一个变量,则该变量(A)。
A.只在该复合语句中有效,在该复合语句外无效
B.在该函数中任何位置都有效
C.在本程序的源文件范围内均有效
D.此定义方法错误,其变量为非法变量
12.下列说法不正确的是(A)。
A.主函数main中定义的变量在整个文件或程序中有效
B.不同函数中,可以使用相同名字的变量
C.形式参数是局部变量
D.在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效
13.在一个源程序文件中定义的全局变量的有效范围是(D)。
A.本源程序文件的全部范围
B.一个C程序的所有源程序文件
C.函数内全部范围
D.从定义变量的位置开始到源程序文件结束
14.以下叙述中不正确的是(D)。
A.在不同的函数中可以使用相同名字的变量
B.函数中的形式参数是局部变量
C.在一个函数内定义的变量只在本函数范围内有效
D.在一个函数内的复合语句中定义的变量在本函数范围内有效
15.如果要限制一个变量只能为本文件所使用,必须通过(C)来实现。
A.外部变量说明B.静态局部变量
C.静态外部变量D.局部变量说明
16.下列哪种数据不存放在动态存储区中(D)。
A.函数形参变量B.局部自动变量
C.函数调用时的现场保护和返回地址D.局部静态变量
17.以下叙述中不正确的是(C)。
A.函数中的自动变量可以赋初值,每调用一次,赋一次初值。
B.在调用函数时,实在参数和对应形参在类型上只需赋值兼容。
C.外部变量的隐含类别是自动存储类别。
D.函数形参可以说明为register变量。
18.以下只有在使用时才为该类型变量分配内存的存储类说明是(B)。
A.auto和staticB.auto和register
C.register和staticD.extern和register
19.C语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是(B)。
A.voidB.intC.floatD.double
20.在C语言中,函数的隐含存储类别是(C)。
A.autoB.staticC.externD.无存储类别
21.在C语言中,形参的缺省存储类是(A)。
A.autoB.registerC.staticD.extern
22.若有以下程序
#include
voidf(intn);
main()
{
voidf(intn);
f(5);
}
voidf(intn)
{
printf("%d\n",n);
}
则以下叙述中不正确的是(C)。
A.若只在主函数中对函数f进行说明,则只能在主函数中正确调用函数f
B.若在主函数前对函数f进行说明,则在主函数和其后的其它函数中都可以正确调用函数f
C.对于以上程序,编译时系统会提示出错信息:
提示对f函数重复说明
D.函数f无返回值,所以可用void将其类型定义为无值型
23.以下所列的各函数首部中,正确的是(C)。
A.voidplay(var:
Integer,varb:
Integer)
B.voidplay(inta,b)
C.voidplay(inta,intb)
D.Subplay(aasinteger,basinteger)
24.有如下函数调用语句
func(rec1,rec2+rec3,(rec4,rec5));
该函数调用语句中,含有的实参个数是(A)。
A.3B.4C.5D.有语法错
25.若有以下函数调用语句:
fun(a+b,(x,y),fun(n+k,d,(a,b)));在此函数调用语句中实参的个数是(A)。
A.3B.4C.5D.6
26.以下函数值的类型是(A)。
fun(floatx)
{
floaty;
y=3*x-4;
returny;
}
A.intB.不确定C.voidD.float
27.下列函数定义不正确的是(C)。
A.intmax()B.intmax(x,y)
{intx,y,z;intx,y;
z=x>y?
x:
y;{intz;
}z=x>y?
x:
y;
return(z);}
C.intmax(x,y)D.intmax()
{intx,y,z;{}
z=x>y?
x:
y;
return(z);
}
28.下列程序的运行结果是(D)。
main()
{
inti=3;
printf("%d,%d,%d\n",i,i++,i++);
}
A.5,5,4B.3,4,5C.3,3,4D.5,4,3
29.以下程序的输出结果是(C)。
fun(intx,inty,intz)
{z=x*x+y*y;}
main()
{
inta=31;
fun(5,2,a);
printf("%d",a);
}
A.0B.29C.31D.无定值
30.下列程序执行后的输出结果是(C)。
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");
}
A.helloB.helC.hloD.hlm
31.有如下程序
intfunc(inta,intb)
{return(a+b);}
main()
{
intx=2,y=5,z=8,r;
r=func(func(x,y),z);
printf("%d\n",r);
}
该程序的输出的结果是(D)。
A.12B.13C.14D.15
32.有以下程序
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.9C.21D.9.0
33.有以下程序
#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;
}
输出结果是(C)。
A.6B.7C.8D.9
34.阅读以下函数:
fun(chars[],chart[])
{
inti=-1;
while(++i,s[i]==t[i]&&s[i]!
=’\0’);
return(s[i]==’\0’&&t[i]==’\0’);
}
以上函数的功能是(C)。
A.比较串s和t的长度B.比较串s和t的大小
C.比较串s和t是否相等D.将串t赋给串s
35.以下程序的输出结果是(A)。
f(intb[],intm,intn)
{
inti,s=0;
for(i=m;ireturns;
}
main()
{
intx,a[]={1,2,3,4,5,6,7,8,9};
x=f(a,3,7);
printf("%d\n",x);
}
A.10B.18C.8D.15
36.以下程序中函数reverse的功能是将a所指数组中的内容进行逆置。
voidreverse(inta[],intn)
{
inti,t;
for(i=0;i{
t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;
}
}
main()
{
intb[10]={1,2,3,4,5,6,7,8,9,10};inti,s=0;
reverse(b,8);
for(i=6;i<10;i++)s+=b[i];
printf("%d\n",s);
}
程序运行后的输出结果是(A)。
A.22B.10C.34D.30
37.请读程序:
#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);
}
上面程序的输出结果是(B)。
A.11B.19C.21D.31
38.请读程序:
#include
f(inb[],intn)
{
inti,r;
r=1;
for(i=0;i<=n;i++)r=r*b[i];
returnr;
}
main()
{
intx,a[]={2,3,4,5,6,7,8,9};
x=f(a,3);
printf("%d\n",x);
}
上面程序的输出结果是(B)。
A.720B.120C.24D.6
39.下面程序的输出是(D)。
main()
{
intt=1;
fun(fun(t));
}
fun(inth)
{
staticinta[3]={1,2,3};
intk;
for(k=0;k<3;k++)a[k]+=a[k]-h;
for(k=0;k<3;k++)printf("%d",a[k]);
printf("\n");return(a[h]);
}
A.1,2,3,B.1,3,5,C.1,3,5,D.1,3,5,
1,5,9,1,3,5,0,4,8,-1,3,7,
40.有如下程序
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
41.以下程序的输出结果是(A)。
longfun(intn)
{
longs;
if(n==1||n==2)s=2;
elses=n-fun(n-1);
returns;
}
main()
{
printf("%ld\n",fun(3));
}
A.1B.2C.3D.4
42.以下程序的输出结果是(A)。
func(intx)
{
intp;
if(x==0||x==1)return(3);
p=x-func(x-2);
returnp;
}
main()
{
printf("%d\n",func(9));
}
A.7B.2C.0D.3
43.有以下程序
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
44.下面程序的输出是(B)。
intw=3;
main()
{
intw=10;
printf("%d\n",fun(5)*w);
}
fun(intk)
{
if(k==0)returnw;
return(fun(k-1)*k);
}
A.360B.3600C.1080D.1200
45.以下程序的输出结果是(B)。
#include"stdio.h"
inti=5;
main()
{
inti=3;
{inti=10;i++;}
f1();
i+=1;
printf("%d\n",i);
}
intf1()
{
i=i+1;
return(i);
}
A.7B.4C.12D.6
46.以下程序的输出结果是(B)。
inta,b;
voidfun()
{
a=100;b=200;
}
main()
{
inta=5,b=7;
fun();
printf("%d%d\n",a,b);
}
A.100200B.57C.200100D.75
47.以下程序输出结果是(B)。
main()
{
inti;
for(i=0;i<2;i++)add();
}
add()
{
intx=0;staticinty=0;
printf("%d,%d\n",x,y);
x++;y=y+2;
}
A.0,0B.0,0C.0,0D.0,0
0,00,21,01,2
48.设有以下函数:
f(inta)
{
intb=0;
staticintc=3;
b++;c++;
return(a+b+c);
}
如果在下面的程序中调用该函数,则输出结果是(A)。
main()
{
inta=2,i;
for(i=0;i<3;i++)printf("%d\n",f(a));
}
A.7B.7C.7D.7
89107
911137
49.以下程序的输出的结果是(C)。
intx=3;
main()
{
inti;
for(i=1;i}
incre()
{
staticintx=1;
x*=x+1;
printf("%d",x);
}
A.33B.22C.26D.25
50.有以下程序
inta=3;
main()
{
ints=0;
{inta=5;s+=a++;}
s+=a++;printf("%d\n",s);
}
程序运行后的输出结果是(A)。
A.8B.10C.7D.11
51.下面程序的输出是(C)。
fun3(intx)
{
staticinta=3;
a+=x;
return(a);
}
main()
{
intk=2,m=1,n;
n=fun3(k);
n=fun3(m);
printf("%d\n",n);
}
A.3B.4C.6D.9
52.下面程序的输出是(B)。
intm=13;
intfun2(intx,inty)
{
intm=3;
return(x*y-m);
}
main()
{
inta=7,b=5;
printf("%d\n",fun2(a,b)/m);
}
A.1B.2C.7D.10
53.下列程序执行后输出的结果是(D)。
#include
f(inta)
{
intb=0;staticc=3;
a=c++,b++;
return(a);}
main()
{
inta=2,i,k;
for(i=0;i<2;i++)k=f(a++);
printf("%d\n",k);
}
A.3B.0C.5D.4
54.下列程序执行后输出的结果是(A)。
intd=1;
fun(intp)
{
intd=5;
d+=p++;
printf("%d",d);
}
main()
{
inta=3;
fun(a);
d+=a++;printf("%d\n",d);
}
A.84B.96C.94D.85
55.以下程序的输出结果是(C)。
intd=1;
fun(intp)
{
staticintd=5;
d+=p;
printf("%d",d);
return(d);
}
main()
{
inta=3;
printf("%d\n",fun(a+fun(d)));
}
A.699B.669C.61515D.6615
5.2填空题
1.下面程序的输出结果是56。
intt(intx,inty,intcp,intdp)
{
cp=x*x+y*y;
dp=x*x-y*y;
}
main()
{
inta=4,b=3,c=5,d=6;
t(a,b,c,d);
printf("%d%d\n",c,d);
}
2.下面程序运行后的输出结果是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);
}
3.下面程序的输出结果是246。
voidfun()
{
staticinta=0;
a+=2;printf("%d",a);
}
main()
{
intcc;
for(cc=1;cc<4;cc++)fun();
printf("\n");
}
4.下面程序输出的最后一个值是120。
intff(intn)
{
staticintf=1;
f=f*n;
returnf;
}
main()
{
inti;
for(i=1;i<=5;i++)printf("%5d",ff(i));
}
5.下面程序运行结果为0,0
0,1。
#include
main()
{
inti;
for(i=0;i<2;i++)as();
}
as()
{
intlv=0;
staticintsv=0;
printf("%d,%d\n",lv,sv);
lv++;sv++;
return;
}
6.下面程序的输出是12。
unsignedfun6(unsignednum)
{
unsignedk=1;
do{
k*=num%10;
num/=10;
}while(num);
return(k);
}
main()
{
unsignedn=26;
printf("%d\n",fun6(n));
}
7.下面程序的输出结果是7_。
#include
fun(intx)
{
intp;
if(x==0||x==1)return(3);
p=x-fun(x-2);
returnp;
}
main()
{
printf("%d\n",fun(9));
}
8.下面程序的输出是9。
longfun5(intn)
{
longs;
if((n==1)||(n==2))
s=2;
else
s=n+fun5(n-1);
return(s);
}
main()
{
longx;
x=fun5(4);
printf("%ld\n",x);
}
9.下面程序的输出是_024*******。
#defineMAX5
inta[MAX],k;
main()
{
fun1();fun3();fun2();fun3();
printf("\n");
}
fun1()
{
for(k=0;k