1、国家二级 C语言机试(函数)模拟试卷 1及答案与解析 一、选择题 1 以下叙述中正确的是( )。 ( A)调用函数时,函数名必须与被调用的函数名完全一致 ( B)函数调用时,不必区分函数名称的大小写 ( C)函数名允许用数字开头 ( D)在函数体中只能出现一次 return语句 2 设有某函数的说明为 int* func(int a10, int n); 则下列叙述中,正确的是( )。 ( A)说明中的 a10写成 a或 *a效果完全一样 ( B)形参 a对应的实参只能是数组名 ( C) func的函 数体中不能对 a进行移动指针(如 a+)的操作 ( D)只有指向 10个整数内存单元的指针,
2、才能作为实参传给 a 3 有以下程序 #include void fun( int x, int y, int *c, int *d ) *c = x+y; *d = x-y; main() int a=4, b=3, c=0, d=0; fun ( a, b, printf( “%d %dn“ , c, d ); 程序的输出结果是( )。 ( A) 7 1 ( B) 4 3 ( C) 3 4 ( D) 0 0 4 有以下程序 #include void fun( int *p, int *q ) int t; t = *p; *p = *q; *q=t; *q = *p; main() in
3、t a=0, b=9; fun ( printf( “%d %dn“ , a,b ); 程序的输出结果是( )。 ( A) 9 9 ( B) 0 0 ( C) 9 0 ( D) 0 9 5 有以下程序 #include char fun( char *c ) if ( *c=A ) *c -= A-a; return *c; main() char s81, *p=s; gets( s ); while( *p ) *p =fun( p ); putchar( *p ); p+; printf( “n“); 若运行时从键盘上输入 OPEN THE DOOR,程序的输出结果是( )。 ( A)
4、open the door ( B) oPEN tHE dOOR ( C) OPEN THE DOOR ( D) Open The Door 6 有以下程序 #include int f( int x ); main() int a, b=0; for ( a=0; a #define N 3 void fun( int aN, int b ) int i, j; for( i=0; i int k=5; void f(int *s) *s=k; main() int m=3,*p= f(p); printf(“%d,%d“, m, *p); 程序的运行结果是 ( )。 ( A) 5,5 (
5、B) 3,3 ( C) 3,5 ( D) 5,3 9 有以下程序 #include #define N 4 void fun(int aN) int bNN,i,j; for(i=0; i void fun(int a , int n) int i,j=0,k=n-1, b10; for (i=0; i int k=5; void f(int *s) s= main() int m=3,*p= f(p); printf(“%d,%dn“, m, *p); 程序的运行结果是( )。 ( A) 3,3 ( B) 5,5 ( C) 3,5 ( D) 5,3 13 下列叙述中正确的是( )。 ( A)
6、在 C程序的函数中不能定义另一个函数 ( B)在 C程序中 main函数的位置是固定的 ( C) C程序中所有函数之间都可以相互调用 ( D)每个 C程序文件中都必须要有一个 main函数 14 以下叙述正确的是( )。 ( A) C语言函数可以嵌套调用,例如: fun(fun(x) ( B) C语言程序是由过程和函数组成的 ( C) C语言函数不可以单独编译 ( D) C语言中除了 main函数,其他函数不可作为单独文件形式存在 15 有以下程序 #include int m1(int x,int y) return x int f(int x); main() int n=1,m; m=f
7、(f(f(n); printf(“%dn“,m); int f(int x) return x*2; 程序运行后的输出结果是( )。 ( A) 8 ( B) 2 ( C) 4 ( D) 1 17 有以下程序 #include void fun( int a, int n) int i, t; for(i=0; i #define N 4 void fun(int aN, int b) int i; for (i=0; i int fun (int x, int y ) if (x!=y) return ( (x+y) /2 ); else return ( x ); main() int a=
8、4, b=5, c=6; printf( “%dn“ , fun(2*a, fun( b, c ) ) ); 程序运行后的输出结果是( )。 ( A) 6 ( B) 3 ( C) 8 ( D) 12 20 有以下程序 #include int f( int x,int y) return(y-x)*x); main() int a=3,b=4,c=5,d; d=f(f(a,b),f(a,c); printf(“%dn“,d); 程序运行后的输出结果是( ) ( A) 9 ( B) 10 ( C) 8 ( D) 7 21 有以下程序 #include void fun( int a, int b
9、 ) int t; t=a; a=b; b=t; main() int c10=1,2,3,4,5,6,7,8,9,0, i; for (i=0; i double f (double x); main() double a=0; int i; for ( i=0; i #define N 4 void fun(int aN, int b) int i; for(i=0;i void f(int b, int n, int flag) int i,j,t; for (i=0; ibj : bi int fun1( double a ) return (int)(a*=a); int fun2(
10、double x, double y) double a=0,b=0; a=fun1( x ); b=fun1( y ); return (int)(a+b); main() double w; w=fun2(1.1,2.0); printf(“%4.2f“, w); 程序执行后输出结果是 ( )。 ( A) 5.00 ( B) 5 ( C) 5.21 ( D) 0.0 32 有以下程序 #include void f(int b) int i; for (i=2; i int fun( char s) int n=0; while(*s =0) n=10*n+*s-0 ; s+; retur
11、n (n); main() char s10= 6, 1, *, 4, *, 9, *, 0, *; printf(“%dn“,fun(s); 程序的运行结果是( )。 ( A) 61 ( B) 61490 ( C) 9 ( D) 5 国家二级 C语言机试(函数)模拟试卷 1答案与解析 一、选择题 1 【正确答案】 A 【试题解析】 调用函数的时候只有保证调用语句的函数名和被调函数的函数名、参数列表一致才能保证调用的正确性, A)正确。 C语言对大小写敏感,选项 B)错。用户自定义的函数名需要遵循用户标识符的命名规则,由字母、数字、下划线 组成并且第一个字符不能为数字,选项 C)错。一个函数每
12、次只能使用一个return语句,但是该函数体中可以有多个返回点,也就是有多条 return语句,每次只从其中一点返回,选项 D)错。答案选 A)。 【知识模块】 函数 2 【正确答案】 A 【试题解析】 考查数组名作为函数参数。数组名作为函数参数时,只传递数组的首地址而不检查形参数组的长度,所以形参表中可以不给出形参数组的长度,形参数组和实参数组长度也可以不同,选项 D)错; a10、 a、 *a做形参都是接受实参数组首地址,效果一样, A)正确 。传递给形参的实参可以是数组名,还可以是指向该数组的指针变量,选项 B)错。数组名可以看做一个指针常量,对其进行自加自减运算相当于指针变量的自加自减
13、,选项 C)错。答案选 A)。 【知识模块】 函数 3 【正确答案】 A 【试题解析】 考查函数调用的参数传递。值传递过程中,形参只是实参的一个副本,形参改变不能影响到实参,所以值传递是单向传递,只能由实参传给形参。地址传递过程中,形参和实参指向同一个地址空间,两者的改变保持同步,所以在本程序调用结束之后, c、 d值发生了改变, c=7, d=1,输出结果 为 A)。 【知识模块】 函数 4 【正确答案】 A 【试题解析】 考查函数调用的参数传递。该程序调用函数进行的是地址传参,地址传递过程中,形参和实参指向同一个地址空间,两者的改变保持同步。函数fun()的功能是将 p和 q指向的变量交换
14、,之后将 *p赋值给 *q。 main()函数实参传给 *p为 0, *q为 9。交换后 *p为 9, *q为 0, *p赋值给 *q,则 *p、 *q均为 9,输出结果为 A)。 【知识模块】 函数 5 【正确答案】 A 【试题解析】 考查地址传参。函数 fun()的作用是将字符 c由大写转为小写,地址传参中,形参的改变和实参的改变保持同步,所以本程序将输入的字符转为对应的小写形式: open the door,答案选 A。 【知识模块】 函数 6 【正确答案】 A 【试题解析】 考查函数的返回值。三次 a的值分别为 0、 1、 2,对应的函数返回值为 1、 2、 5, b累加后为 1、 3
15、、 8字符参与运算时等同于让其对应的 ASCII码参与计算,然后对应输出字符或其 ASCII码值, ?A?+b后分别为 ?B?、 ?D?、 ?I?,答案选 A。 【知识模块】 函数 7 【正确答案】 A 【试题解析】 考查数组名作为函数参数。数组名作为函数参数属于地址传参,形参和实参为同一数组,变化同步。函数 fun()中,用两层循环寻找 a中每一行数据的最大值,并将其赋值给 b,函数调用结束后,数组 yN中存储的就是 xN中每一行的最大值,分别是: 3、 6、 9,答案选 A。 【知识模块】 函数 8 【正确答案】 A 【试题解析】 考查地址传参。地址传参过程中形参和实参指向同一个地址空间,
16、两者的改变保持同步。被调函数 f()将 k值赋给了指针 s指向的变量,所以函数调用结束之后, m和 *p均为 5,答案选 A。 【知识模块】 函数 9 【正确答案】 A 【试题解析】 考查二维数组名作为函数参数,被调函数的功能是把数组 a逆序的列与行互换,函数调用结束后, xNN为 xNN= 13, 9, 5, 1, 14, 10, 6, 2, 15,11,7,3,16,12,8,4,输出对角线的数据为: 13,10,7,4, 答案选 A。 【知识模块】 函数 10 【正确答案】 A 【试题解析】 考查数组名作为函数参数。数组名作为函数参数属于地址传参,形参和实参为同一数 组,变化同步。被调函
17、数 fun()的功能是将数组 a下标为偶数的存放在数组 b的前半部分,数组 a下标为奇数的逆序存放在数组 b的后半部分,然后把数组 b赋给 a。所以输出结果为 A)。 【知识模块】 函数 11 【正确答案】 A 【试题解析】 C语言中,数据只能从实参单向传递给形参,形参作为实参的一个副本被实参赋值。所以值传参过程中形参不会对实参造成影响;地址传参过程中是形参仍然作为实参的副本被赋值,但是指针变量的值为其指向变量的地址,形参实参指向同一段内存地址,所以对其指定的数据的修改能保持同步,形参指 针变量的指向改变也是不能影响实参指针变量的指向的。答案选 A。 【知识模块】 函数 12 【正确答案】 A
18、 【试题解析】 考查函数传参。 C语言中,数据只能从实参单向传递给形参,指针作为函数参数时,形参仍然作为实参的副本被赋值,形参指针变量的指向改变不能影响实参指针变量的指向。结果不变,答案选 A。 【知识模块】 函数 13 【正确答案】 A 【试题解析】 在 C程序中, main函数的位置可以任意,而且不管 main函数位置怎么变化,程序都会以 main函数作为入口,选项 B)错误;每个 C程序(而不是每个 C程序文件)必须有且只能有一个 main函数,选项 D)错误; main函数不能被调用,选项 C)错误;函数的定义不能放在另一个函数体内,但是声明可以,所以答案选 A)。 【知识模块】 函数
19、 14 【正确答案】 A 【试题解析】 一个 C语言程序由一个或多个函数组成,选项 B)错误;一个 C程序可以有一个或多个程序文件,每个程序文件可以有一个或多个函数,并且每个程序文件可以单独编译,所以选项 C)、 D)错误;函数之间可以相互调用,函数体内调用自身的函数为递归函数,答案选 A)。 【知识模块 】 函数 15 【正确答案】 A 【试题解析】 函数 m1()返回两个参数中较小的数值,函数 m2()返回两个参数中较大的数值,函数 fun()返回两个参数之和,所以fun(m1(x,y),m2(y,z)=fun(m1(2,3),m2(3,1)=fun(2,3)=5,答案选 A。 【知识模块
20、】 函数 16 【正确答案】 A 【试题解析】 考查函数的递归调用。 m=f(f(f(n)=f(f(2)=f(4)=8,答案选 A。 【知识模块】 函数 17 【正确答案】 A 【 试题解析】 函数 fun()的功能是把数组 a中的前 n个元素逆序排列,所以调用函数 fun(k,5)结束后,数组 k中的数据为 5,4,3,2,1,6,7,8,9,10,输出数组第 3个到第 8个元素之间的数据为选项 A)。 【知识模块】 函数 18 【正确答案】 A 【试题解析】 函数 fun()的功能是计算 bi: b0=a00-a03=-3,b1=a11-a12=-1, b2=a22-a21=1, b3=a
21、33-a30=3, 所以计算得到的 y值为选项 A)。 【知识模块】 函数 19 【正确答案】 A 【试题解析】 考查函数的调用。输出结果为 fun(2*a, fun(b, c)=fun(8,5)=6,答案选 A。 【知识模块】 函数 20 【正确答案】 A 【试题解析】 考查函数的返回值。 d=f(f(a,b),f(a,c)= f(b-a)*a,(c-a)*a)=f(3,6)=(6-3)*3=9,所以答案选 A。 【知识模块】 函数 21 【正确答案】 A 【试题解析】 函数 fun()属于值传参,形参的变化不会影响实参,所以函数调用结束后,数组 c没有任何变化,输出结果为选项 A)。 【知
22、识模块】 函数 22 【正确答案】 A 【试题解析】 考查函数的返回值。 main()函数中 for循环执行三次,a=a+f(0)+f(10)+f(20)=503,输出时控制输出宽度为 3,小数点后保留位数为 0位,所以答案选 A。 【知识模块】 函数 23 【正确答案】 A 【试题解析】 考查数组名作为函数参数。数组名可以看做一个指针常量,作为函数参数属于地址传参,和指针传参的形式 是一样的。在声明函数时,形参名称可以省略但是形参的类型不可以省略,所以答案选 A。 【知识模块】 函数 24 【正确答案】 A 【试题解析】 二维数组赋初值的时候没有赋值的元素默认为 0。函数 fun()将数组a
23、中的主对角线上的元素赋值给数组 b,所以输出结果为 1,0,7,0,答案选 A。 【知识模块】 函数 25 【正确答案】 A 【试题解析】 自定义的函数可以有返回值也可以没有返回值,有返回值的函数可以带有多条 return语句,但是每次只选择其中一条退出。没有返回值的函数的类型用 void标示,此时函数体内可以没有 return语句。不管函数有无返回值,函数调用时都会先保存该函数的当前被调位置,函数调用结束后再返回到被调位置继续向下执行,所以答案选 A。 【知识模块】 函数 26 【正确答案】 A 【试题解析】 该函数的类型说明符为 int,所以返回的是一个整型数据,答案选A。 【知识模块】
24、函数 27 【正确答案】 A 【试题解析】 自定义的函数可以有返回值也可以没有返回值,有返回值的函数可以带有多条 return语句,但是每次只选择其中一条退出,即每次只返回 一个函数值,选项 A)错误。没有返回值的函数的类型用 void标示,此时函数体内不需要有 return语句,或者可以用没有表达式的 return语句 “return;“返回,选项 B)、C)、 D)描述正确,答案选 A)。 【知识模块】 函数 28 【正确答案】 A 【试题解析】 函数传参过程中,其实是把实参的数据复制一份传给形参,实参和形参都是局部变量,在程序运行到相应的定义语句的时候才分配存储空间,所以两者占用不同的存
25、储单元,所以答案选 A。 【知识模块】 函数 29 【正确答案】 A 【 试题解析】 参数传递过程中,形参只是实参的一个副本,形参改变不能影响到实参,所以形参的值不能传回给对应的实参,选项 A)错误。其他几个选项的表述正确,答案选 A)。 【知识模块】 函数 30 【正确答案】 A 【试题解析】 根据题意说明,被调函数 “f(“将数组 a的第 3个元素到第 7个元素进行从大到小排序,执行完毕后 a10=5,4,7,6,3,2,1,8,9,10;被调函数“f(a,5,1);“将数组 a的第 1个元素到第 5个元素进行从小到大排序,执行完毕之后a10= 3,4,5,6,7,2,1,8,9,10,所以输出结果为选项 A)。 【知识模块】 函数 31 【正确答案】 A 【试题解析】 考查函数的嵌套调用。w=fun2(1.1,2.0)=(int)(a+b)=(int)(fun1(1.1)+fun1(2.0)= (int)(1.1*1.1+2.0*2.0)=5,所以答案选 A。 【知识模块】 函数 32 【正确答案】 A 【试题解析】 函数 f()的功能是把数组 b中第 3个到第 6个元素的值均乘以 2,所以答案选 A。 【知识模块 】 函数 33 【正确答案】 A 【试题解析】 函数 fun()的功能是输出字符数组 s中第一个非数字字符前的数字,所以答案选 A。 【知识模块】 函数