C语言函数练习习题及答案.docx
《C语言函数练习习题及答案.docx》由会员分享,可在线阅读,更多相关《C语言函数练习习题及答案.docx(26页珍藏版)》请在冰豆网上搜索。
C语言函数练习习题及答案
1
【单选题】
在下列关于C函数定义的叙述中,正确的是?
∙A、
函数可以嵌套定义,但不可以嵌套调用;
∙B、
函数不可以嵌套定义,但可以嵌套调用;
∙C、
函数不可以嵌套定义,也不可以嵌套调用;
∙D、
函数可以嵌套定义,也可以嵌套调用;
我的答案:
B得分:
?
2.5分
2
【单选题】
下面函数调用语句含有实参的个数为?
nc((exp1,exp2),(exp3,exp4,exp5));
∙A、
1
∙B、
2
∙C、
4
∙D、
5
我的答案:
B得分:
?
2.5分
3
【单选题】
C语言中函数返回值的类型是由以下哪个选项决定的?
∙A、
函数定义时指定的类型;
∙B、
return语句中的表达式类型;
∙C、
调用该函数时的实参的数据类型;
∙D、
形参的数据类型;
我的答案:
A得分:
?
2.5分
4
【单选题】
以下关于函数叙述中,错误的是?
∙A、
函数未被调用时,系统将不为形参分配内存单元;
∙B、
实参与形参的个数必须相等,且实参与形参的类型必须对应一致;
∙C、
当形参是变量时,实参可以是常量、变量或表达式;
∙D、
如函数调用时,实参与形参都为变量,则这两个变量不可能共享同一内存空间;
我的答案:
B得分:
?
2.5分
5
【单选题】
若函数调用时参数为基本数据类型的变量,以下叙述正确的是?
∙A、
实参与其对应的形参共享内存存储单元;
∙B、
只有当实参与其对应的形参同名时才共享内存存储单元;
∙C、
实参与对应的形参分别占用不同的内存存储单元;
∙D、
实参将数据传递给形参后,立即释放原先占用的内存存储单元;
我的答案:
C得分:
?
2.5分
6
【单选题】
函数调用时,实参和形参都是简单变量,它们之间数据传递的过程描述正确的是?
∙A、
实参将地址传递给形参,并释放原先占用的存储单元;
∙B、
实参将地址传递给形参,调用结束时形参再将此地址回传给实参;
∙C、
实参将值传递给形参,调用结束时形参再将其值回传给实参;
∙D、
实参将值传递给形参,调用结束时形参并不将其值回传给实参;
我的答案:
D得分:
?
2.5分
7
【单选题】
若用数组名作为函数调用的实参,则传递给形参的是?
∙A、
数组第一个元素的地址;
∙B、
数组的第一个元素的值;
∙C、
数组中所有元素的值;
∙D、
数组元素的个数;
我的答案:
A得分:
?
2.5分
8
【单选题】C语言规定了程序中各函数之间调用关系,以下说法正确的是?
∙A、既允许直接递归调用也允许间接递归调用;
∙B、不允许直接递归调用也不允许间接递归调用;
∙C、允许直接递归调用不允许间接递归调用;
∙D、不允许直接递归调用允许间接递归调用;
我的答案:
A得分:
?
2.5分
9
【单选题】
递归函数f(n)=f(n-1)+n?
?
(n>1)的递归体是?
∙A、
f
(1)=0?
?
?
∙B、
f(0)=1
∙C、
f(n)=f(n-1)+n
∙D、
f(n)=n
我的答案:
C得分:
?
2.5分
10
【单选题】
若函数的形参为一维数组,则下列说法中正确的是()。
∙A、
使用函数时的对应实参必为数组名。
∙B、
形参数组可以不指定大小。
∙C、
形参数组的元素个数必须等于实参数组的元素个数。
∙D、
形参数组的元素个数必须多于实参数组的元素个数。
我的答案:
B得分:
?
2.5分
11
【单选题】
在函数调用过程中,如果函数fun?
A调用了函数fun?
B,函数fun?
B又调用了函数fun?
A,则()。
∙A、
为函数的直接递归调用?
?
∙B、
称为函数的间接递归调用
∙C、
为函数的循环调用?
?
?
∙D、
C语言中不允许这样的递归调用
我的答案:
B得分:
?
2.5分
12
【单选题】
有以下函数定义:
void?
fun(int?
n,double?
x)?
?
{……}
下选项中的变量都已正确定义并赋值,则对函数fun的正确调用语句是()。
∙A、
fun(int?
y,double?
m);?
?
∙B、
k=fun(10,12.5);
∙C、
fun(x,n);?
?
?
∙D、
void?
fun(n,x);
我的答案:
C得分:
?
2.5分
13
【单选题】
已有以下数组定义和f函数调用语句,则在f函数的说明中,对形参数组array的正确定义方式为______。
inta[3][4];
f(a);
∙A、
f(int?
array[][6])?
∙B、
f(int?
array[3][])
∙C、
f(int?
array[][4])?
∙D、
f(int?
array[2][5])
我的答案:
C得分:
?
2.5分
14
【单选题】
若程序中定义函数
float?
fadd(float?
a,?
float?
b)
{
return?
a+b;
}
并将其放在调用语句之后,则在调用之前应对该函数进行说明。
以下说明中错误的是?
∙A、
float?
fadd(float?
a,b);
∙B、
float?
fadd(float?
b,?
float?
a)?
;
∙C、
float?
fadd(float,?
float)?
;
∙D、
float?
fadd(float?
a,?
float?
b)?
;
我的答案:
A得分:
?
2.5分
15
【单选题】
下面程序段运行后的输出结果是?
(假设程序运行时输入5,3回车)
int?
a,?
b;?
void?
swap(?
)
{?
?
?
?
?
int?
t;?
?
?
?
?
t=a;
?
?
?
?
a=b;
?
?
?
?
b=t;?
}
void?
main()
{?
?
?
?
?
int?
a,b;
?
?
scanf("%d,%d",&a,?
&b);
?
?
swap(?
);?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
printf?
("a=%d,b=%d\n",a,b);?
?
?
}?
∙A、
a=5,b=3
∙B、
a=3,b=5
∙C、
5,3
∙D、
3,5
我的答案:
A得分:
?
2.5分
16
【单选题】
以下程序运行后的输出结果是?
?
int?
fun?
(int?
x,?
int?
y)
{
?
?
if(x>y)?
?
?
?
?
?
?
return?
x;?
?
?
?
?
?
else?
?
?
?
?
?
?
return?
y;
}
void?
main()
{?
?
?
int?
x=3,y=8,z=6,r;?
?
?
?
?
?
r=fun(fun(x,y),2*z);
?
?
?
printf("%d\n",r);
}
∙A、
3
∙B、
6
∙C、
8
∙D、
12
我的答案:
D得分:
?
2.5分
17
【单选题】
下列程序的输出结果是()。
#include"stdio.h"
voidfun(inta,intb,intc)
{
?
?
c=a*b;
}
int?
main()
{
?
?
intc;
?
?
fun(2,3,c);
?
?
printf("%d\n",c);
?
?
return0;
}
∙A、
0
∙B、
1
∙C、
6
∙D、
无法确定
我的答案:
D得分:
?
2.5分
18
【单选题】
有以下程序,运行后的输出结果是(?
)。
#include
floatfun(intx,inty)
{
return(x+y);
}
voidmain()
{
inta=2,b=5,c=8;
printf(“%3.0f\n”,fun((int)fun(a+c,b),a-c));
}
∙A、
编译出错
∙B、
9
∙C、
21
∙D、
9.0
我的答案:
A得分:
?
0.0分
19
【单选题】
以下描述正确的是?
∙A、
调用函数时的实参只能是有确定值的变量;
∙B、
return()语句的括号中,可以是变量、常量或有确定值的表达式;
∙C、
C语言中,函数调用时实参和形参间的参数传递方式不都是值传递;
∙D、
实参和形参若类型不匹配,编译时将报错;
我的答案:
B得分:
?
2.5分
20
【单选题】
已有以下代码
#include
inta=6,b=3;
intmain()
{
?
?
inta=8;
?
?
printf("%d\n",(a>b?
a:
b));
}
则程序的输出结果是()?
∙A、
3
∙B、
6
∙C、
8
∙D、
36
我的答案:
C得分:
?
2.5分
21
【单选题】
已有以下代码
#include
f()
{
?
?
?
staticintx=1;
?
?
?
x-=1;
?
?
?
printf("%d,",x);
}
intmain()
{
?
?
?
inti;
?
?
?
for(i=0;i<4;i++)
?
?
?
?
?
?
?
?
f();
?
?
?
return0;
}
则程序的输出是:
()?
∙A、
1,2,3,4
∙B、
0,1,2,3,
∙C、
0,-1,-2,-3,
∙D、
-1,-2,-3,-4,
我的答案:
C得分:
?
2.5分
22
【单选题】
C语言程序的基本单位是?
∙A、
函数
∙B、
过程
∙C、
子程序
∙D、
源程序文件
我的答案:
A得分:
?
2.5分
23
【单选题】以下说法中正确的是?
∙A、C语言程序总是从第一个定义的函数开始执行;
∙B、C语言程序中,要调用的函数必须在main()函数中定义;
∙C、总是从main()函数开始执行;
∙D、main()函数必须放在程序的开始部分;
我的答案:
C得分:
?
2.5分
24
【单选题】
在函数调用时,以下说法正确的是?
∙A、
函数调用后必须带回返回值;
∙B、
实际参数和形式参数可以同名;
∙C、
函数间的数据传递不可以使用全局变量;
∙D、
主调函数和被调函数总是在同一个文件里;
我的答案:
B得分:
?
2.5分
25
【填空题】
下面程序段运行后的输出结果是:
_______
(假设程序运行时输入5,3回车)
voidswap(inta,?
intb)
{?
?
?
intt;?
?
?
t=a;
?
?
?
a=b;
?
?
?
b=t;?
}
voidmain()
{?
?
?
?
inta,b;
?
scanf("%d,%d",&a,&b);
?
swap(a,b);?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
printf("a=%d,b=%d\n",a,b);?
?
?
}?
我的答案:
得分:
?
0.0分
第一空:
?
a=3,b=5
批语
26
【填空题】
以下程序的功能是用递归方法计算工资,已知第一位员工工资最少,为3100元,其余员工工资一个比一个多500元,求第5位员工的工资。
请填空。
salary(int?
n)
{
int?
s;
if(n==1)
s=3100;
else
s=salary(n-1)+500;
return?
s;
}
void?
main()
{
int?
n=5;
printf(“sarary:
%d\n”,______);
}
我的答案:
得分:
?
2.5分
第一空:
?
salary(5)
批语
27
【填空题】
分析以下程序的运行结果是_______
#include“stdio.h”
func(inta,intb)
{
?
?
intc;
c=a+b;
returnc;
}
intmain()
{
intx=6,y,r;
y=x+2;
r=func(x++,y);
printf("%d%d%d\n",x,y,r);
return0;
}
我的答案:
得分:
?
2.5分
第一空:
?
7814
批语
28
【填空题】
有如下程序
longfib(intn)
{
if(n>2)
return(fib(n-1)+fib(n-2));
else
return2;
}
intmain()
{
printf("%d\n",fib(3));
}
该程序的输出结果是_______。
我的答案:
得分:
?
2.5分
第一空:
?
4
批语
29
【填空题】
以下程序的输出结果是________。
f(int?
b[],int?
m,int?
n)
{
int?
i,s=0;
for(i=m;is=s+b[i];
returns;
}
int?
main()
{
int?
x,a[]={1,2,3,4,5,6,7,8,9};
x=f(a,3,7);
printf("%d\n",x);
}
我的答案:
得分:
?
2.5分
第一空:
?
10
批语
30
【填空题】
以下程序的输出结果是_____。
#include
int?
fac_sum(int?
n)
{
?
?
?
?
static?
int?
f=1,t=1,s=0;
?
?
?
?
int?
i;
?
?
?
?
if(n>t)
?
?
?
?
?
?
?
for(i=t+1;?
i<=n;?
i++)
?
?
?
?
?
?
?
?
?
?
f=f*i;
?
?
?
?
else
?
?
?
?
{
?
?
?
?
?
?
?
f=1;
?
?
?
?
?
?
?
for(i=1;?
i<=n;?
i++)
?
?
?
?
?
?
?
?
?
?
f=f*i;
?
?
?
?
}
?
?
?
?
t=n;?
s=s+f;
?
?
?
?
return(s);
}
void?
main()
{
?
?
?
?
int?
a[]={3,5,2},i,sum;
?
?
?
?
for(i=0;?
i<3;?
i++)
?
?
?
?
?
?
?
sum=fac_sum(a[i]);
?
?
?
?
printf(“sum=%d\n”,sum);
}
我的答案:
得分:
?
2.5分
第一空:
?
sum=128
批语
31
【填空题】
以下程序的运行结果是________。
#include
intn=1;
voidmain()
{
?
?
?
staticintx=5;
?
?
?
voidfunc();
?
?
?
inty;?
?
y=n;
?
?
?
printf("MAIN:
x=%2dy=%2dn=%2d\n",x,y,n);
?
?
?
func();
?
?
?
printf("MAIN:
x=%2dy=%2dn=%2d\n",x,y,n);
?
?
?
func();
}?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
voidfunc()
{
?
?
?
staticintx=4;
?
?
?
inty=10;
?
?
?
x=x+2;
?
?
?
n=n+10;
?
?
?
y=y+n;
?
?
?
printf("FUNC:
x=%2dy=%2dn=%2d\n",x,y,n);
}
我的答案:
得分:
?
2.5分
第一空:
?
MAIN:
x=5y=1n=1FUNC:
x=6y=21n=11MAIN:
x=5y=1n=11FUNC:
x=8y=31n=21
批语
32
【填空题】
输入一个整数10,以下程序的运行结果是_______。
#include
voidmain()
{
?
intsub(int);
?
inta,e[10],c,i=0;
?
printf("输入一个整数\n");
?
scanf("%d",&a);
?
while(a!
=0)
?
{
?
c=sub(a);
?
a=a/2;
?
e[i]=c;
?
i++;
?
}
?
for(;i>0;i--)
?
printf("%d",e[i-1]);
}
intsub(inta)
{
?
?
?
intc;
?
?
?
c=a%2;
?
?
?
returnc;
}
我的答案:
得分:
?
2.5分
第一空:
?
1010
批语
33
【填空题】
以下程序的运行结果是______。
#include
intmain()
{
?
inti;
?
voidfun();
?
for(i=0;i<3;i++)?
?
?
?
?
fun();
?
return0;
}
voidfun()
{
?
staticintx=0;?
?
x+=1;
?
printf("%3d",x);
}
我的答案:
得分:
?
2.5分
第一空:
?
123
批语
34
【填空题】
以下程序的运行结果是________。
#include
intworkover(inti);
intreset(inti);
inti=0;
intmain()
{
?
inti=5;
?
reset(i/2);
?
printf("i=%d\n",i);?
?
reset(i=i/2);
?
printf("i=%d\n",i);?
?
reset(i/2);
?
printf("i=%d\n",i);?
?
workover(i);
?
printf("i=%d\n",i);
?
return0;
}
intworkover(inti)
{
?
i=(i%i)*((i*i)/(2*i)+4);
?
printf("i=%d\n",i);?
?
returni;
}
intreset(inti)
{
?
i=i<=2?
5:
0;?
?
returni;
}
我的答案:
得分:
?
2.5分
第一空:
?
i=5i=2i=2i=0i=2
批语
35
【判断题】
函数调用时值传递方式特点:
形参与实参占用相同的内存单元,单向传递。
我的答案:
×得分:
?
2.5分
36
【判断题】
函数定义与函数说明不是同一个概念。
我的答案:
√得分:
?
2.5分
37
【判断题】
c语言中,函数的定义不能嵌套,而调用是可以嵌套的。
我的答案:
√得分:
?
2.5分
38
【判断题】
函数调用时值传递特点:
无论是值传递还是地址传递,都是单向的。
我的答案:
√得分:
?
2.5分
39
【判断题】
函数调用时,当数组名作函数参数时,实参数组值与形参数组值不同。
我的答案:
×得分:
?
2.5分
40
【判断题】
一个C程序可以由一个或多个函数组成,其中必须有且只有一个main函数。
我的答案:
√得分:
?
2.5分