函数.docx
《函数.docx》由会员分享,可在线阅读,更多相关《函数.docx(43页珍藏版)》请在冰豆网上搜索。
函数
习题六函数
选择题
1.在一个C源程序文件中所定义的全局变量,其作用域为______。
A、所在文件的全部范围B、所在程序的全部范围
C、所在函数的全部范围D、由具体定义位置和extern说明来决定范围
2.有以下程序
#include
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);
}
程序的运行结果是______。
A、14B、15C、16D、17
3.若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是______。
A、函数的实参和其对应的形参共占同一存储单元
B、形参只是形式上的存在,不占用具体存储单元
C、同名的实参和形参占同一存储单元
D、函数的形参和实参分别占用不同的存储单元
5.有以下程序
#include
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);
}
程序的运行结果是______。
A、0B、9C、6D、8
6.下面的函数调用语句中func函数的实参个数是______。
func(f2(v1,v2),(v3,v4,v5),(v6,max(v7,v8)));
A、3B、4C、5D、8
7.以下叙述中错误的是______。
A、用户定义的函数中可以没有return语句
B、用户定义的函数中可以有多个return语句,以便可以调用一次返回多个函数值
C、用户定义的函数中若没有return语句,则应当定义函数为void类型
D、函数的return语句中可以没有表达式
8.以下所列的各函数声明中,正确的是______。
A、voidplay(vara:
Integer,varb:
Integer)B、voidplay(inta,b)
C、voidplay(inta,intb)D、Subplay(aasinteger,basinteger)
9.以下叙述中错误的是______。
A、C程序必须由一个或一个以上的函数组成
B、函数调用可以作为一个独立的语句存在
C、若函数有返回值,必须通过return语句返回
D、函数形参的值也可以传回给对应的实参
10.有以下程序
#include
intfun(inta,intb)
{if(b==0)returna;
elsereturn(fun(--a,--b));
}
main()
{printf("%d\n",fun(4,2));}
程序的运行结果是______。
A、1B、2C、3D、4
11.若各选项中所有变量已正确定义,函数fun中通过return语句返回一个函数值,以下选项中错误的程序是______。
A、main()B、floatfun(inta,intb){……}
{……x=fun(2,10);……}main()
floatfun(inta,intb){……}{……x=fun(i,j);……}
C、floatfun(intint);D、main()
main(){floatfun(inti,intj);
{……x=fun(2,10);……}……x=fun(i,j);……}
floatfun(inta,intb){……}floatfun(inta,intb){……}
12.以下存储类型中,只有在使用时才为该类型的变量分配内存的是______。
A、auto和staticB、auto和registerC、register和staticD、extern和register
13.以下程序的输出结果是______。
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
14.设函数fun的定义形式为
voidfun(charch,floatx){……}
则以下对函数fun的调用语句中,正确的是______。
A、fun("abc",3.0);B、t=fun('D',16.5);C、fun('65',2.8);D、fun(32,32);
15.设有以下函数;
f(inta)
{intb=0;
staticintc=3;
b++;c++;
return(a+b+c);
}
如果在下面的程序中调用该函数,则输出结果是______。
main()
{inta=2,i;
for(i=0;i<3;i++)printf("%d\n",f(a));
}
A)B)C)D)
7777
89107
911137
A、A)B、B)C、C)D、D)
16.以下程序的结果是______。
inta,b;
voidfun()
{a=100;b=200;}
main()
{inta=5,b=7;
fun();
printf("%d%d\n",a,b);
}
A、100200B、57C、200100D、75
17.在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是______。
A、地址传递B、单向值传递C、由实参传给形,再由形参传回实参D、传递方式由用户指定
18.以下函数值的类型是______。
fun(floatx)
{floaty;
y=3*x-4;
returny;
}
A、intB、不确定C、voidD、float
19.在函数调用过程中,如果函数funA调用了函数funB,函数funB又调用了函数funA,则______。
A、称为函数的直接递归调用B、称为函数的间接递归调用
C、称为函数的循环调用D、C语言中不允许这样的递归调用
20.以下叙述中正确的是______。
A、局部变量说明为static存储类,其生存期将得到延长
B、全局变量说明为static存储类,其作用域将被扩大
C、任何存储类的变量在未赋初值时,其值都是不确定的
D、形参可以使用的存储类说明符与局部变量完全相同
21.有以下程序
voidf(intv,intw)
{intt;
t=v;v=w;w=t;}
main()
{intx=1,y=3,z=2;
if(x>y)f(x,y);
elseif(y>z)f(y,z);
elsef(x,z);
printf("%d,%d,%d\n",x,y,z);}
执行后输出结果______。
A、1,2,3B、3,1,2C、1,3,2D、2,3,1
22.若程序中定义了以下函数:
doublemyadd(doublea,doubleb)
{return(a+b);}
并将其放在调用语句之后,则在调用之前应该对函数进行说明,以下选项中错误的说明是______。
A、doublemyadd(doublea,b);B、doublemyadd(double,double);
C、doublemyadd(doubleb,doublea);D、doublemyadd(doublex,doubley);
23.有以下程序:
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));
}
程序运行后的输出结果是______。
A、编译出错B、9C、21D、9.0
24.有以下程序
inta=3;
main()
{ints=0;
{inta=5;s+=a++;}
s+=a++;printf("%d\n",s);
}
程序运行后的输出结果是_______。
A、8B、10C、7D、11
25.下面程序的输出是______。
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
26.下列函数定义中,会出现编译错误的是______。
A、max(intx,inty,int*z)B、intmax(intx,y)
{*z=x>y?
x:
y;}{intz;
z=x>y?
x:
y;
returnz;}
C、max(intx,inty)D、intmax(intx,inty)
{intz;
z=x>y?
x:
y;return(z);}{return(x>y?
x:
y);}
27.以下叙述中正确的是______。
A、全局变量的作用域一定比局部变量的作用域范围大
B、静态(static)类别变量的生存期贯穿于整个程序的运行期间
C、函数的形参都属于全局变量
D、未在定义语句中赋初值的auto变量和static变量的初值都是随机值
28.有以下程序
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);
}
执行后输出的结果是______。
A、3,4,5B、5,3,4C、5,4,3D、4,3,5
29.若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是______。
A、函数的实参和其对应的形参共占同一存储单元
B、形参只是形式上的存在,不占用具体存储单元
C、同名的实参和形参占同一存储单元
D、函数的形参和实参分别占用不同的存储单元
30.下列叙述不正确的是______。
A、在不同的函数内可使用相同名字的变量
B、函数中的形式参数是局部变量
C、函数内的变量只在函数内有效
D、函数内复合语句中定义的变量在函数内都有效
四
1.C程序运行时的内存空间可以分成程序区,静态存储区和___动态存储区_______。
2.全局变量和静态局部变量具有静态生存期,存放在内存的____静态存储区_____区中。
3.局部变量具有局部生存期,存放在内存的____动态存储_____区中。
4.函数形参的作用域是该函数的____内部____。
5.在C语言中,一个函数由函数头和___函数体____组成。
6.函数调用的条件是:
实参与形参的个数应相等,类型应一致。
7.如果一个函数只允许同一程序文件中的函数调用,则应在该函数定义前加上__static________C保留字。
8.若“doublex=100;”是文件F1.C中的一个全局变量定义语句,若文件F2.C中的某个函数需要访问此x,则应在文件F2.C中添加对x的声明语句为__externdoublex;_。
9.如果一个函数直接或间接地调用自身,这样的调用称为___函数递归__调用。
10.对于无返回值函数,定义函数时要用____void______修饰函数类型。
11.如果一个函数定义中使用了__static__修饰,则该函数不允许被其它文件中的函数调用。
12.从一条函数原型语句“intfun1();”可知,该函数的返回类型为__int____,该函数带有___0___个参数。
13.当使用__void_____保留字作为函数类型时,该函数不返回任何值。
14.一个函数定义由_函数首部__和__函数体__两部分组成。
15.若一个函数的定义处于调用它的函数之前,则在程序开始可以省去该函数的__声明__语句。
16.C语言函数返回类型的默认定义类型是_int_____。
17.函数的实参传递到形参有两种方式:
__传值__和_传址_____。
18.在一个函数内部调用另一个函数的调用方式称为__嵌套调用____。
在一个函数内部直接或间接调用该函数称为函数_递归_____的调用方式。
19.C语言变量按其作用域分为_局部变量_____和__全局变量____。
21.已知函数定义:
voiddothat(intn,doublex){……},其函数声明的写法为
__voiddothat(intn,doublex);____。
22.凡在函数中未指定存储类别的局部变量,其默认的存储类别为__auto____。
23.在一个C程序中,若要定义一个只允许本源程序文件中所有函数使用的全局变量,则该变量需要定义的存储类别为__static____。
24.变量被赋初值可以分为两个阶段:
即__编译期__和_运行期_____。
函数阅读程序说明程序功能和写出输出结果
1.
#defineN3
intarray[N][N];
conv(intarray[3][3])
{intt,j,i;
for(i=0;i{t=array[i][j];
array[i][j]=array[j][i];
array[j][i]=t;
}
}
main()
{inti,j;
for(i=0;ifor(j=0;jscanf(“%d”,&array[i][j]);
conv(array);
printf(“\n\n”);
for(i=0;i{for(j=0;jprintf(“%5d”,array[i][j]);
printf(“\n”);
}
}
输入:
1,2,3,5,6,7,9,11,12
将N阶矩阵行列互换
159
2611
3712
2.
#include
intmaxvalue(intarray[3][4])
{
inti,j,max;
max=array[0][0];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
if(array[i][j]>max)
max=array[i][j];
returnmax;
}
voidmain()
{
inta[3][4]={{1,3,5,7},{2,4,6,8},{15,17,34,12}};
printf("maxvalueis%d\n",maxvalue(a));
}
有一个3×4的矩阵,求所有元素中的最大值。
maxvalueis34
3.
#defineN3
#defineM4
voidLineMax(intx[N][M])
{inti,j,p;
for(i=0;i{p=0;
for(j=1;jif(x[i][p]printf("%d,%d\n",i,x[i][p]);
}
}
main()
{intx[N][M]={1,5,7,4,2,6,4,3,8,2,3,1};
LineMax(x);
}
输出N×M矩阵中每一行的行号和最大值
0,7
1,6
2,8
4.
#include
#defineN20
intfmax(ints[],intn)
{
intk,p;
for(p=0,k=p;pif(s[p]>s[k])k=p;
return(k);
}
voidmain()
{
inti,a[N];
for(i=0;iscanf("%d",&a[i]);
printf("%d\n",a[fmax(a,N)]);
}
fmax函数返回n个元素的数组s中的最大元素所在的下标。
主函数定义数组并循环输入元素值,调用fmax函数并输入返回值。
5.
floatmax(floatx,floaty)
{floatz=x;
if(zreturn(z);
}
main()
{floata=3.5,b=8.7,c;
c=max(a,b);
printf("%4.2f\n",c);
}
定义函数求x,y最大值,主函数调用函数求a,b最大值
8.70
6.
#include
fun(inta,intb)
{inti,p=1;
for(i=1;i<=b;i++)
p=p*a;
return(p);
}
main()
{intx=5;
printf("%d\n",fun(x,3));
}
定义函数求ab
主函数调用函数求53
125
7.
fact(intn)
{intanswer;
if(n==1)return
(1);
answer=fact(n-1)*n;
return(answer);
}
main()
{intsum=0;
intnum;
for(num=1;num<=5;num+=2)
sum=sum+fact(num);
printf("%d",sum);
}
求sum=1!
+3!
+5!
127
8.
fact(intn)
{intanswer;
if(n==0)return
(1);
answer=fact(n-1)*n;
return(answer);
}
main()
{intsum=0;
intnum;
for(num=0;num<=5;num+=2)
sum=sum+fact(num);
printf("%d",sum);
}
求sum=0!
+2!
+4!
27
9.
inta=3,b=5;
max(inta,intb)
{intc;
c=a>b?
a:
b;
return(c);
}
main()
{inta=8;
printf("%d",max(a,b));
}
定义最大值函数,主函数中通过调用函数求局部变量m和全局变量n的最大值
8
10.
intm=4,n=6;
max(intx,inty)
{intmax;
max=x>y?
x:
y;
return(max);
}
main()
{intm=10;
printf("%d\n",max(m,n));
}
定义最大值函数,主函数中通过调用函数求局部变量m和全局变量n的最大值
10
11.
#include
intage(intn)
{
intc;
if(n==1)
c=10;
else
c=2+age(n-1);
return(c);
}
voidmain()
{
intn=5;
printf("age:
%d\n",age(5));//age表示年龄
}
计算学生的年龄。
已知第一位最小的学生年龄为10岁,其余学生的年龄一个比一个大2岁,求第5个学生的年龄。
age:
18
12.
#include
intsum(intn)
{
if(n<=0)
printf("dataerror\n");
if(n==1)
return
(1);
else
return(sum(n-1)+n);
}
main()
{printf(“%d\n”,sum(10));}
函数sum(intn)完成计算1~n的累加和。
55
13.
intfacto(intn)
{
if(n==1)
return
(1);
else
return(n*facto(n-1));
}
main()
{printf(“%d\n”,facto(5));}
facto(intn)是一个求阶乘的递归调用函数。
120
14.
intstrlen(char*str)
{
if(*str=='\0')
return(0);
else
return(1+strlen(str+1));
}
main()
{printf(“%d\n”,”abcd\\\’”);}
函数strlen是求一个字符串str的长度。
6
15.
#include"stdio.h"
voidr(intm)
{
printf("%d",m%10);
m=m/10;
if(m>0)
r(m);
}
voidmain()
{
intn;
r(12345);
printf("\n");
}
用递归实现将整数按逆序输出。
输出54321。
16.
#include
intfun(intk)
{intm=0,mc=0;
while((k>=2)&&(mc<3))
{if((k%3==0)||(k%7==0))
{m=m+k;mc++;}
k--;
}
returnm;
}
main()
{printf("%d\n",fun(100));}
函数fun的功能是:
计算并输出k以内最大的3个能被3或7整除的自然数之和。
293
17.
#include
fun(intx,inty,intz)
{intj,t,n,m;
j=1;
t=j%x;
m=j%y;
n=j%z;
while(t!
=0||m!
=0||n!
=0)
{j=j+1;
t=j%x;
m=j%y;
n=j%z;}
returnj;}
main()
{intx1,x2,x3,j;
j=fun(2,7,8);
printf("j=%d\n",j);}
函数fun的功能是:
求三个数的最小公倍数。
56
18.
#include
longfun(longnum)
{
longk=1;
do
{k*=num%