国家二级C语言(函数和数组)机试模拟试卷15
选择题
1.有以下程序
#include <stdio.h>
int fun(int n) {
int a;
if( n==1 ) return 1;
a = n + fun( n-1);
return ( a ); }
main() {
printf( \\(C)
A. 14
B. 10
C. 15
D. 9
解析:函数fun为递归定义的函数,当调用fun(5)–>5+fun(4)–>5+4+fun(3)–>5+4+3+fun(2)–>5+4+3+2+fun(1),因此最后的结果为15。
2.有以下程序
#include <stdio.h>
int fun( int a, int b) {
return a+b; }
main() {
int x=6, y=7, z=8, r ;
r = fun ( fun(x,y), z– );
printf (\\(B)
A. 15
B. 21
C. 20
D. 31
解析:本题考查了函数的调用,函数fun功能为求两个数据的和。主函数中表达式r = fun ( fun(x,y), z– ),首先计算内层调用fun(x,y),计算结果为13,然后外层调用fun(13,8),结果为21。
3.以下选项中函数形参不是指针的是
A
解析:C语言中形参数组是指针变量,其数组中元素的个数由传递的实参数组决定,因此可以在定义的时候,不给出元素个数的说明,因此选项B和D形参均为指针变量,选项A的定义在C语言中不存在的。
4.设有如下函数定义
int fun(int k)
{
if(k<1) return 0;
else if(k==1) return 1;
else return fun(k-1)+1;
}
若执行调用语句:n=fun(3);,则函数fun总共被调用的次数是(C)
A. 2
B. 4
C. 3
D. 5
解析:这道题目考查了函数的递归调用,当执行调用语句n=fun(3)时,返回n=fun(2)+1,再执行fun(2),返回n=fun(1)+1+1,而fun(1)等于1,所以最后n的值等于3。而函数fun总共被调用了3次。即fun(3),fun(2),fun(1)。
5.有以下程序(strcat函数用以连接两个字符串)
#include <stdio.h>
#include <string.h >
main()
{ char a[20]=\\(B)
A. ABCDE\\\\0FG\\\\0IJK
B. ABCDIJK
C. IJK
D. EFGIJK
解析:在字符串中字符’\\\\0’表示字符串的结束标志,所以字符串a和b相连接的结果为ABCDIJK。
6.有以下程序
int fun(int n)
{ if(n= =1)return 1;
else
return(n+fun(n-1));
}
main( )
{ int x;
scanf(\\(D)
A. 54
B. 65
C. 45
D. 55
解析:在C语言中函数可以递归调用,即直接或间接地自己调用自己。本题在函数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+fun(6)
=10+9++8+7+6+fun(6)=10+9++8+7+6+5+fun(4)=10+9++8+7+6+5+4+fun(3)
=10+9++8+7+6+5+4+3+fun(2)=10+9++8+7+6+5+4+3+2+fun(1)
=10+9++8+7+6+5+4+3+2+1=55
7.有以下程序
fun(int x)
{ int p;
if(x= =0‖x= =1) return(3);
p=x-fun(x-2);
return p;
}
main( )
{ printf(\\(D)
A. 3
B. 7
C. 0
D. 2
解析:因为在函数fun(int x)中,如果参数x等于0或1时,返回值3。否则p=x-fun(x-2)这是一个递归函数,所以在主函数调用fun(7)时,其过程为:
“fun(7)=7-fun(5)=7-(5-fun(3))=7-(5-(3-fun(1)))=7-(5-(3-3))=7-5=2”, 所以最后的输出结果为2。
8.若有以下程序
int f(int a[], int n)
{
if (n > 1)
{
int t; t=f(a, n-1);
return t > a[n-1] ? t : a[n-1]; }
else return a[0]; }
main()
{
int a[] = {8,2,9,1,3,6,4,7,5};
printf(\\(A)
A. 9
B. 1
C. 8
D. 5
解析:主函数中调用f(a,9),递归函数的调用过程如下:
f(a,9)?f(a,8)?f(a,7) ?f(a,6) ?f(a,5) ?f(a,4) ?f(a,3) ?f(a,2) ?f(a,1),f(a,1)得到返回值为a[0],值为8,递归过程开始回归,回归过程描述如下:
8>a[1],返回8?8>a[2]不成立,返回a[2]的值为9……因此函数f的主要功能为计算数组中的最大值。主函数中输出最大值为9。
9.以下叙述中正确的是(A)
A. 只有全局变量才有自己的作用域,函数中的局部变量没有作用域
B. 只要是用户定义的标识符,都有一个有效的作用域
C. 只有在函数内部定义的变量才是局部变量
D. 局部变量不能被说明为static
解析:在函数内定义的变量是局部变量,而在函数之外定义的变量称为外部变量,也是全局变量。全局变量可以为源文件中其他函数所共用,其作用域为从定义变量的位置开始到源文件结束。因此只要用户定义的标识符,全部都有作用域。局部变量可以说明为auto、register以及static。
10.以下叙述中正确的是(C)
A. 对于变量而言,“定义”和“说明”这两个词实际上是同一个意思
B. 在复合语句中不能定义变量
C. 全局变量的存储类别可以是静态类
D. 函数的形式参数不属于局部变量
解析:用static说明符说明全局变量时,此变量可称作
本文档预览:3600字符,共11443字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载