c语言函数习题.docx
《c语言函数习题.docx》由会员分享,可在线阅读,更多相关《c语言函数习题.docx(12页珍藏版)》请在冰豆网上搜索。
c语言函数习题
第8章函数习题
A卷
1.单项选择题
(1)C语言总是从函数开始执行。
A
A.mainB.处于最前的C.处于最后的D.随机选一个
(2)函数在定义时,省略函数类型说明符,则该函数值的类型为。
A
A.intB.floatC.longD.double
(2)以下函数,真正地没有返回值。
B
A.inta(){inta=2;return(a);}B.voidb(){printf("c");}
C.inta(){inta=2;returna;}D.以上都是
(3)在C语言中,有关函数的说法,以下正确的是。
A
A.函数可嵌套定义,也可嵌套调用B.函数可嵌套定义,但不可嵌套调用
C.函数不可嵌套定义,但可嵌套调用D.函数不可嵌套定义,也不可嵌套调用
(4)以下函数调用语句中,含有实参的个数为。
C
fun((2,3),(4,5+6,7));
A.1B.2C.5D.6
(5)函数调用可以在。
D
A.函数表达式中B.函数语句中C.函数参数中D.以上都是
(6)被调函数返回给主调函数的值称为。
C
A.形参B.实参C.返回值D.参数
(7),可以不进行函数类型说明。
D
A.被调函数的返回值是整型或字符型时B.被调函数的定义在主调函数定义之前时
C.在所有函数定义前,已在函数外预先说明了被调函数类型D.以上都是
(8)被调函数通过语句,将值返回给主调函数。
D
A.ifB.forC.whileD.return
(9)被调函数调用结束后,返回到。
D
A.主调函数中该被调函数调用语句处
B.主函数中该被调函数调用语句处
C.主调函数中该被调函数调用语句的前一语句
D.主调函数中该被调函数调用语句的后一语句
(10)以下对C语言函数的有关描述中,正确的是。
A
A.在C中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参
B.C函数既可以嵌套定义又可递归调用
C.函数必须有返回值,否则不能使用函数
D.C程序中有调用关系的所有函数必须放在同一个源程序文件中
(11)C语言中函数的隐含存储类型是。
C
A.autoB.staticC.externD.无存储类型
(12)能把函数处理结果的两个数据返回给主调函数,在下面的方法中不正确的是。
A
A.return这两个数B.形参用两个元素的数组
C.形参用两个这种数据类型的指针D.用两个全局变量
(13)C语言可执行程序从什么地方开始执行()。
C
A.程序中第一条可执行语句B.程序中第一个函数
C.程序中的main函数D.包含文件中的第一个函数
(14)有一个函数原型如下所示,则该函数的返回类型为()。
C
abc(floatx,floaty);
A.voidB.doubleC.intD.float
2.填空题
(1)变量的作用域主要取决于变量,变量的生存期既取决于变量,又取决于变量。
所处的位置,所处的位置,存储类型
(2)说明变量时,若省略存储类型符,系统默认其为存储类别,该存储类别的类型符为:
。
动态,auto
(3)静态型局部变量的作用域是,生存期是。
它所在的局部,整个程序
(4)函数中的形参和调用时的实参都是数组名时,传递方式为,都是变量时,传递方式为。
址传递,值传递
(5)函数的形式参数的作用域为,全局的外部变量和函数体内定义的局部变量重名时,_________变量优先。
该函数中,局部
(6)若自定义函数要求返回一个值,则应在该函数体中有一条语句,若自定义函数要求不返回一个值,则应在该函数说明时加一个类型说明符。
return,void
(7)若函数的形式参数是指针类型,则实参可以是或。
指针,数组名
(8)函数的参数为char*类型时,形参与实参结合的传递方式为。
址传递
(9)函数的实参为常量时,形参与实参结合的传递方式为。
值传递
(10)下面这个函数的功能是求两个整数的积,并通过形参传回结果,请填空。
intintint**result
voidmul(___x,___y,___result)
{
___=x*y;
}
3.判断题
(×)
(1)函数说明指的是在程序中设定一个函数模块。
(√)
(2)形参只有在被调用时才分配存储空间。
(×)(3)在C的函数中,最好使用全局变量。
(×)(4)在调用函数时,实参传值给形参,调用结束时,形参值传给实参。
(√)(5)所有函数定义都是并行的,相互独立的。
(×)(6)函数的隐含存储类型是extern。
(×)(7)形参可以是常量、变量或表达式。
(×)(8)函数调用可以作为一个函数的形参。
(√)(9)C语言规定,实参应与其对应的形参类型一致。
(×)(10)定义函数时,形参的类型说明可以放在函数体内。
4.程序填空题
(1)对数组按值从大到小的顺序排序后输出,请填空。
#include
voidmain()
{
floata[7]={2,6,3,8,3,12,9};
inti;
voidsort(float*,int);
;
for(i=0;i<7;i++)printf("%f",a[i]);
printf("\n");
}
voidsort()
{
inti,j,k;floatt;
for(i=0;i{
k=i;
for(j=i+1;jif()k=j;
{t=*(p+i);*(p+i)=*(p+k);*(p+k)=t;}
}
}
sort(a,7)float*p,intn*(p+k)<*(p+j)if(k!
=i)
(2)下列函数在n个元素的一维数组中,找出最大值、最小值并传送到调用函数,请填空。
#include
voidfind(float*p,intmax,intmin,intn)
{
intk;
*max=*p;
for(k=1;k{
t=*(p+k);
if()*max=t;
if(t<*min)*min=t;
}
}
floatt;*min=*p;*maxB卷
5.写出下列程序运行结果
(1)
main()
{
inti=1,p;
p=fun(i,i+1);
printf("%d\n",p);
}
intfun(inta,intb)
{
intf;
if(a>b)
f=1;
elseif(a==b)
f=0;
else
f=-1;
returnf;
}
-1
(2)键盘输入abcdef
#include
voidfun()
{
charc;
if((c=getchar())!
='\n')
fun();
putchar(c);
}
voidmain()
{fun();}
fedcba
(3)
#include
#defineC5
intx=1,y=C;
voidmain()
{
intx;
x=y++;printf("%d%d\n",x,y);
if(x>4){intx;x=++y;printf("%d%d\n",x,y);}
x+=y--;
printf("%d%d\n",x,y);
}
56
77
126
(4)
#include
intc,a=4;
func(inta,intb)
{c=a*b;a=b-1;b++;return(a+b+1);}
voidmain()
{
intb=2,p=0;c=1;
p=func(b,a);
printf("%d,%d,%d,%d\n",a,b,c,p);
}
4,2,8,9
(5)
unsignedfun6(unsignednum)
{
unsignedk=1;
do{k*=num%10;num/=10;}
while(num);
returnk;
}
voidmain()
{
unsignedn=26;
printf("%d\n",fun6(n));
}
12
(6)
#include
intmax(inta,intb);
main()
{
intx,y,z,t,m;
scanf("%d,%d,%d",&x,&y,&z);
t=max(x,y);
m=max(t,z);
printf("%d",m);
}
intmax(inta,intb)
{
if(a>b)
return(a);
else
return(b);
}
运行时若输入:
10,15,9则输出:
___15
运行时若输入:
300,129,300则输出:
___300
(7)
#include
longsum(inta,intb);
longfactorial(intn);
main()
{
intn1,n2;
longa;
scanf("%d,%d",&n1,&n2);
a=sum(n1,n2);
printf("a=%1d",a);
}
longsum(inta,intb)
{
longc1,c2;
c1=factorial(a);
c2=factorial(b);
return(c1+c2);
}
longfactorial(intn)
{
longrtn=1;
inti;
for(i=1;i<=n;i++)
rtn*=i;
return(rtn);
}
运行时若输入:
2,3则输出:
___8
运行时若输入:
0,5则输出:
___121
(8)
#include
ints();
intx,y;
main()
{
intn;
x=1;y=2;
n=s();
printf("x=%d,y=%d,n=%d",x,y,n);
}
ints()
{
intz;
x=3;y=4;
z=x+y;
return(z);
}
程序运行后输出:
___3,4,7
(9)以下程序的输出结果是a=___,b=___,c=___。
#include
intfunc(inta,int*p);
voidmain()
{
inta=1,b=2,c;
c=func(a,&b);
b=func(c,&a);
a=func(b,&c);
printf("a=%d,b=%d,c=%d",a,b,c);
}
intfunc(inta,int*p)
{
a++;
*p=a+2;
return(*p+a);
}
361619