国家二级C语言机试(函数和数组)模拟试卷18
选择题
1.关于子函数返回值的程序段中错误的是( )。
A
解析:C语言规定,函数必须先定义,后调用(函数的返回值类型为int或char时除外)或先说明,再调用最后定义。在选项A中,调用的子函数在调用后面定义,所以不正确。在选项B、C中,被调用函数在主函数之前定义,再在主函数中调用,所以是正确的;在选项D中,在主函数中先对子函数float fun(int i,int j)进行了声明。然后进行调用。
2.关于子函数return语句的叙述中正确的是( )。(B)
A. 一个自定义函数中必须至少有一条return语句
B. 一个自定义函数中可以根据不同情况设置多条return语句
C. 定义成void类型的函数中可以有带返回值的return语句
D. 没有return语句的自定义函数执行结束时不能返回到调用处
解析:return语句主要用于返回函数的返回值。在一个自定义函数中,可以根据不同的情况设置多条return语句返回函数的值返回后面的语句不执行。
3.关于return语句的叙述中错误的是( )。(C)
A. 用户定义的函数中可以没有return语句
B. 用户定义的函数中若没有return语句,则应当定义函数为void类型
C. 用户定义的函数中可以有多个return语句,以便可以调用一次返回多个函数值
D. 函数的return语句中可以没有表达式
解析:C语言return语句返回,return语句的形式如下:return表达式;当程序执行到return语句时,程序的流程就返回到调用该函数的地方,并带回函数值。在同一函数内,可以根据需要,在多处出现return语句,在函数体的不同部位退出函数。无论函数体中有多少个return语句,return语句只可能执行一次,返回一个函数值。return语句中也可以不含有表达式,这时必须定义函数为。void类型,它的作用只是使流程返回到调用函数。并没有确定的函数值。函数体内可以没有return语句,这时也必须定义函数为void类型,程序的流程就一直执行到函数末尾的“}”,然后返回调用函数,也没有确定的函数值带回。
4.若函数f调用了函数g,函数g又调用了函数f,则以下说法中正确的是( )。(B)
A. 称为函数的调用
B. 称为函数的间接递归调用
C. 称为函数的循环调用
D. C语言中不允许这样的递归调用
解析:本题考查递归的概念,C语言中函数可以直接或间接调用自身,称为递归调用。本题中f调用g,然后g又调用f,即f间接调用了自身是递归调用。
5.若int fun(double x[10],int *n),则下面针对此函数的函数声明语句中正确的是( )。(C)
A. int fun(float,int);
B. int fun(float *x,int n);
C. int fun(double *,int *);
D. int fun(double x,int *n):
解析:C语言函数说明的一般形式为:类型名>函数名(参数类型1,参数类型2……)。因为函数int fun(double x[10],int*n)的第1个形式参数是一个双精度型的一维数组。第2个参数是一个整型指针,并返回一个整型值。一维数组的名字表示的是一维数组的地址。
6.以下程序的输出结果是( )。
int f(int x);
main(){int n=1,m;
m=f(f(f(n)));
printf(’’%d\n’’,m);}
int f(int x)
{return x*2;}(D)
A. 0
B. 1
C. 2
D. 8
解析:程序考查了函数的多层调用。对于m=f(f(f(n)));首先计算最内层的函数调用,执行f函数。得到返回值2,然后计算f(2),得到返回值为4,最后计算f(4),得到计算结果为8。
7.以下程序的输出结果是( )。
#include
inff(inx,inty)
{
return((y一x)*x);}
main()
{int a=0,b=4,c=5,d;
d=f(f(a,b),f(a,c));
printf(’’%d\n’’,d);}(C)
A. 7
B. 8
C. 9
D. 10
解析:本题考查函数的嵌套调用。首先计算f(a,b)与f(a,c),f(a,b)=(b—a)*a=3,f(a,c)=(c—a)*a=6,再计算f(3,6)=(6—3)*3=9。
8.若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是( )。(B)
A. 形参只是形式上的存在,不占用具体存储单元
B. 函数的形参和实参分别占用不同的存储单元
C. 同名的实参和形参占同一存储单元
D. 函数的实参和其对应的形参共占同一存储单元
解析:在C语言中,函数的实参单元与形参单元在内存中分配不同的存储单元。在调用函数时,如果是值传递给形参分配临时存储单元,并将实参对应的值传递给形参,在被调用函数中对形参存储单元中的值进行运算,最后通过retum语句把函数值返回调用函数。当调用结束后,形参单元被释放,实参单元仍保留并维持原值。
9.以下程序的输出结果是( )。
#include
int f(int x)main()
{int y; {int z;
if(x==0‖x==1)return(3); z=f(3);printf(’’%d\n’’,z);
y=x*x一f(x一2); }
return y;}(C)
A. 4
B. 5
C. 6
D. 0
解析:主函数调用f()函数,将实参3传递给x,进行if条件语句的判断不成立,接着执行y=3*3一f(1),再执行f(1),而f(1)满足if条件语句,所以f(1)的值为3,代入y=3*3-f(1)=9—3=6。
10.执行程序时,给变量x输入10,则以下程序的输出结果是( )。
int fun(int n) main()
{ if(n==1)return 1; { int x;
else scanf(’’%dt’’,&x);x=fun(x);
return(n+fun(n—1)); prinff(’’%d\n’’,x);
} }(D)
A. 45
B. 50
C. 60
D. 55
解析:本题在函数int fun(int n)的定义中又出现了对函数fun的调用,所以函数fun是递归函数。因而在主函数中调用x=fun(x)时,当输入10赋给变量x时,递归调用的过程为fun(10)=10+fun(9)=10+9+fun(8)=10+9+8+fun(7)=…=10+9++8+7+6+5+4+3+2+1=55。
11.以下程序的输出结果是( )。
int f(int a[],int n) main()
{if(n>1) {int a[]:{8,2,9,1,3,6,4,7,5};
{int t;t=f(a,n-1); prin
本文档预览:3600字符,共8277字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载