[计算机类试卷]国家二级C语言(函数和数组)机试模拟试卷15及答案与解析.doc

上传人:medalangle361 文档编号:498979 上传时间:2018-11-30 格式:DOC 页数:22 大小:57KB
下载 相关 举报
[计算机类试卷]国家二级C语言(函数和数组)机试模拟试卷15及答案与解析.doc_第1页
第1页 / 共22页
[计算机类试卷]国家二级C语言(函数和数组)机试模拟试卷15及答案与解析.doc_第2页
第2页 / 共22页
[计算机类试卷]国家二级C语言(函数和数组)机试模拟试卷15及答案与解析.doc_第3页
第3页 / 共22页
[计算机类试卷]国家二级C语言(函数和数组)机试模拟试卷15及答案与解析.doc_第4页
第4页 / 共22页
[计算机类试卷]国家二级C语言(函数和数组)机试模拟试卷15及答案与解析.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

1、国家二级 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( “%dn“, fun( 5 ) ); 程序的输出结果是 ( A) 14 ( B) 10 ( C) 15 ( D) 9 2 有以下程序 #include stdio.h int fun( int a, int b) return a+b; main() int x=6, y=7, z=8, r ;

2、 r = fun ( fun(x,y), z- ); printf (“ %dn“ , r ); 程序运行后的输出结果是 ( A) 15 ( B) 21 ( C) 20 ( D) 31 3 以下选项中函数形参不是指针的是 ( A) fun( int else if(k=1) return 1; else return fun(k-1)+1; 若执行调用语句: n=fun(3);,则函数 fun总共被调用的次数是 ( A) 2 ( B) 4 ( C) 3 ( D) 5 5 有以下程序( strcat函数用以连接两个字符串 ) #include stdio.h #include string.h

3、main() char a20=“ABCD0EFG0“, b=“IJK“; strcat (a,b); printf(“%sn“,a); 程序运行后的输出结果是 ( A) ABCDE0FG0IJK ( B) ABCDIJK ( C) IJK ( D) EFGIJK 6 有以下程序 int fun(int n) if(n= =1)return 1; else return(n+fun(n-1); main( ) int x; scanf(“%d“, x=fun(x); printf(“%dn“,x); 执行程序时,给变量 x输入 10,程序的输出结果是 ( A) 54 ( B) 65 ( C)

4、45 ( D) 55 7 有以下程序 fun(int x) int p; if(x= =0x= =1) return(3); p=x-fun(x-2); return p; main( ) printf(“%dn“,fun(7); 执行后的输出结果是 ( A) 3 ( B) 7 ( C) 0 ( D) 2 8 若有以下程序 int f(int a, int n) if (n 1) int t; t=f(a, n-1); return t an-1 ? t : an-1; else return a0; main() int a = 8,2,9,1,3,6,4,7,5; printf(“%dn“

5、, f(a, 9); 则程序的输出结果是 ( A) 9 ( B) 1 ( C) 8 ( D) 5 9 以下叙述中正确的是 ( A)只有全局变量才有自己的作用域,函数中的局部变量没有作用域 ( B)只要是用户定义的标识符,都有一个 有效的作用域 ( C)只有在函数内部定义的变量才是局部变量 ( D)局部变量不能被说明为 static 10 以下叙述中正确的是 ( A)对于变量而言, “定义 ”和 “说明 ”这两个词实际上是同一个意思 ( B)在复合语句中不能定义变量 ( C)全局变量的存储类别可以是静态类 ( D)函数的形式参数不属于局部变量 11 有以下程序 int d=1; void fun

6、( int p ) int d=5; d += p+; printf(“%d “, d ); main() int a=3; fun( a ); d += a+; printf(“%dn“,d); 程序的输出结果是 ( A) 9 6 ( B) 9 4 ( C) 8 4 ( D) 8 5 12 有以下程序 #include stdio.h int a=1,b=2; void fun1(int a, int b) printf(“%d%d”,a,b); void fun2( ) a=3; b=4; main() fun1(5,6); fun2(); printf(“%d%dn“,a,b); 程序运

7、行后的输出结果是 ( A) 3 4 5 6 ( B) 1 2 5 6 ( C) 5 6 1 2 ( D) 5 6 3 4 13 在一个 C源程序文件中所定义的全局变量,其作用域为 ( A)由具体定义位置和 extern说明来决定范围 ( B)所在程序的全部范围 ( C)所在函数的全部范围 ( D)所在文件的全部范围 14 有以下程序 void fun2(char a, char b) printf(“%c%c“,a,b); char a=A,b=B; void fun1( ) a=C; b=D ; main( ) fun1( ); printf(“%c%c“,a,b); fun2(E,F);

8、程序的运行结果是 ( A) A B E F ( B) C D E F ( C) A B C D ( D) C D A B 15 有以下程序 #include stdio.h fun( int a, int b ) int static m=0, i=2; i=i+m+1; m=i+a+b; return m; main() int k=4, m=1, p; p=fun( k, m); printf(“%d,“,p); p=fun( k, m); printf(“%dn“,p); 程序运行后的输出结果是 ( A) 8,17 ( B) 7,16 ( C) 8,8 ( D) 7,17 16 有以下程

9、序 #include stdio.h func(int n) static int num=1; num=num+n;printf(“%d“,num); void main() func(3);func(4);printf(“n“); 程序运行后 的输出是 ( A) 4 5 ( B) 3 5 ( C) 4 8 ( D) 3 4 17 有以下程序 fun (int x,int y) static int m=0,i=2; i+ =m+1; m=i+x+y; return m; main ( ) int j=1, m=1, k; k=fun(j,m); printf(“%d, “,k); k=fu

10、n(j,m); printf(“%dn“,k); 执行后的输出结果是 ( A) 5, 5 ( B) 5, 11 ( C) 11, 11 ( D) 11, 5 18 在 C语言中,只有在使用时才占用内存单元的变量,其存储类型是 ( A) extern和 register ( B) auto和 static ( C) static和 register ( D) auto和 register 19 有以下程序 #include stdio.h int fun() static int x=1; x*=2; return x; main() int i, s=1; for( i=1; i =3; i+

11、 ) s*=fun( ); printf(“%dn“, s); 程序运行后的输出结果是 ( A) 0 ( B) 10 ( C) 30 ( D) 64 20 有以下程序 #include stdio.h int f(int n); main() int a=3,s; s=f(a); s=s+f(a); printf(“%dn“,s); int f(int n) static int a=1; n+=a+; return n; 程序运行后的输出结果是 ( A) 9 ( B) 8 ( C) 7 ( D) 10 21 有以下程序 #include stdio.h int fun() static in

12、t x=1; x+=1; return x; main() int i,s=1; for(i=1;i =5;i+) s+=fun(); printf(“%dn“,s); 程序运行后的输出结果是 ( A) 11 ( B) 21 ( C) 6 ( D) 120 22 有以下程序 int fun(int x ,int n) static int sum=0,i; for(i=0;i n;i+ +) sum+ =xi; return sum; main( ) int a =1,2,3,4,5,b =6,7,8,9,s=0; s=fun(a,5)+fun(b,4); printf(“%dn“,s); (

13、 A) 50 ( B) 45 ( C) 60 ( D) 55 23 有以下程序 int f ( int m ) static int n=0; n+=m; return n; main() int n=0; printf ( “%d,“, f(+n) ); printf ( “%dn“, f(n+) ); 程序运行后的输出结果是 ( A) 1,1 ( B) 1,2 ( C) 2,3 ( D) 3,3 24 有以下程序 #include stdio.h int fun() static int x=1; x*=2; return x; main() int i,s=1; for(i=1;i =2

14、;i+) s=fun(); printf(“%dn“,s); 程序运行后的输出结果是 ( A) 4 ( B) 1 ( C) 0 ( D) 8 25 有下列程序: int a=4; int f(int n) int t=0; static int a=5; if(n%2) int a=6; t+ =a+ +; else int a=7; t+ =a+ +; return t+a+ +; main( ) int s=a,i=0; for(;i 2;i+ +)s+ =f(i); printf(“%dn“,s); 程序运行后的输出结果是 ( A) 28 ( B) 24 ( C) 32 ( D) 36

15、26 有以下程序 void fun( int a, int n) int i, t; for(i=0; i n/2; i+) t=ai; ai=an-1-i; an-1-i=t; main() int k10=1,2,3,4,5,6,7,8,9,10, i; fun(k,5); for(i=2; i 8; i+) printf(“%d“, ki); printf(“n“); 程序的运行结果是 ( A) 876543 ( B) 321678 ( C) 1098765 ( D) 345678 27 下列定义数组的语句中,正确的是 ( A) int N=10; int xN; ( B) #defin

16、e N 10 int xN; ( C) int x010; ( D) int x; 28 有以下程序 #include stdio.h void main() int a=2,3,5,4,i; for(i=0;i 4;i+) switch(i%2) case 0:switch(ai%2) case 0:ai+;break; case 1:ai-; break; case 1:ai=0; for(i=0;i 4;i+) printf(“%d“,ai); printf(“n“); 程序运行后的输出结果是 ( A) 2 0 5 0 ( B) 3 3 4 4 ( C) 3 0 4 0 ( D) 0 3

17、 0 4 国家二级 C语言(函数和数组)机试模拟试卷 15答案与解析 一、选 择题 1 【正确答案】 C 【试题解析】 函数 fun为递归定义的函数,当调用 fun(5)5+fun(4)5+4+fun(3)5+4+3+fun(2)5+4+3+2+fun(1),因此最后的结果为 15。 【知识模块】 函数和数组 2 【正确答案】 B 【试题解析】 本题考查了函数的调用,函数 fun功能为求两个数据的和。主函数中表达式 r = fun ( fun(x,y), z- ),首先计算内层调用 fun(x,y),计算结果为 13,然后外层调用 fun(13,8),结果为 21。 【知识模块】 函数和数组

18、3 【正确答案】 A 【试题解析】 C语言中形参数组是指针变量,其数组中元素的个数由传递的实参数组决定,因此可以在定义的时候,不给出元素个数的说明,因此选项 B和 D形参均为指针变量,选项 A的定义在 C语言中不存在的。 【知识模块】 函数和数组 4 【正确答案】 C 【试题解析】 这道题目考查了函数的递归调用,当执行调用语句 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

19、【正确答案】 B 【试题解析】 在字符串中字符 0表示字符串的结束标志,所以字符串 a和 b相连接的结果为 ABCDIJK。 【知识模块】 函数和数组 6 【正确答案】 D 【试题解析】 在 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)=

20、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 【正确答案】 D 【试题解析】 因为在函数 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”, 所以

21、最后的输出结果为 2。 【知识模块】 函数和数组 8 【正确答案】 A 【试题解析】 主函数中调用 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)得到返回值为a0,值为 8,递归过程开始回归,回归过程描述如下: 8 a1,返回 8?8 a2不成立,返回 a2的值为 9 因此函数 f的主要功能为计算数组中的最大值。主函数中输出最大值为 9。 【知识模块】 函数和数组 9 【正确答案】 A 【试题解析】 在函数内定义的变量是局部变量,而在函数之外定义

22、的变量称为外部变量,也是全局变量。全局变量 可以为源文件中其他函数所共用,其作用域为从定义变量的位置开始到源文件结束。因此只要用户定义的标识符,全部都有作用域。局部变量可以说明为 auto、 register以及 static。 【知识模块】 函数和数组 10 【正确答案】 C 【试题解析】 用 static说明符说明全局变量时,此变量可称作静态全局变量。静态全局变量只限于本编译单位使用,不能被其他编译单位所引用。在一个函数内部定义的变量(包括形参)是局部变量,它只在本函数范围内有效。不同函数中可以使用相同名字的局部变量,它们代表不同的对象, 互不影响。 在函数内部复合语句中也可以定义变量,这

23、些变量都是局部变量,只在本复合语句中有效。 【知识模块】 函数和数组 11 【正确答案】 C 【试题解析】 代码考查点为全局变量和局部变量的同名问题,若全局变量和某个函数中的局部变量同名,则在该函数中,此全局变量被屏蔽,在该函数内,访问的是局部变量,与同名的全局变量不发生任何关系。主函数执行 fun(3)时候,执行调用函数 fun,使用局部变量 d=5,执行 d += p+,相当于 d=d+(p+),得到 d的值为 8,输出。函数调用结束,转到主函数, 继续执行 d += a+,此时 d为全局变量,执行语句以后, d值为 4。 【知识模块】 函数和数组 12 【正确答案】 D 【试题解析】 函

24、数 fun1()的作用是输出局部变量 a和 b的值,在主函数中执行fun1(5,6)的结果是输出 5,6;函数 fun2()的作用是给变量 a和 b分别赋值 3,4;执行fun2()的作用是输出 3,4。 【知识模块】 函数和数组 13 【正确答案】 A 【试题解析】 全局变量是在函数外部任意位置上定义的变量,它的作用域是从变量定义的位置开始,到整个源文件结束 止。在同一编译单位内用 extern说明符扩展全局变量的作用域 (当全局变量定义在后,引用它的函数在前时,应该在引用它的函数中用 extern对此全局变量进行说明,以便通知编译程序:该变量是一个已在外部定义了的全局变量,已经分配了存储单

25、元,不需要再为它分配存储单元。这时全局变量的作用域从 extern说明处起,延伸到该函数末尾 )。当一个程序由多个编译单位构成,并且在每个文件中均需要引用同一个全局变量,这时只在其中一个文件中定义所有的全局变量,而在其他用到这些全局变量的文件中用 extern对这些变量进行说明。 【知识模块】 函数和数组 14 【正确答案】 B 【试题解析】 在 fun1()函数之前定义了全局字符变量 a和 b。这两个变量的作用域是从其定义处到整个程序结束。在 fun1( )函数之内定义了两个变量 a和 b,并且分别初始化为字符 C和 D。在 C语言中,若全局变量和某个函数中的局部变量同名,则在该函数中此全局

26、变量被屏蔽,在该函数内访问的是局部变量,与同名的全局变量不发生任何关系。所以在主函数中,执行 fun1()后,变量 a、 b的值分别等于 C、 D,打印输出 CD,接着执行 fun2(E, F) 语句,变量 a、 b的值变为E、 F并输出。 【知识模块】 函数和数组 15 【正确答案】 B 【试题解析】 本题考查了静态变量以及局部变量的同名问题。主函数中调用 fun函数两次,第一次调用 fun(4,1),形参 a和 b接收以后, i值为 3, m的值为 8,调用结束返回 8存放到 p中并且输出 p的值为 8,除了静态变量 m和 i,变量 a, b撤销。第二次调用 fun(4,1),接收实参值以

27、后, i为 3+8+1,而 m为 12+4+1,即输出函数值 17。 【知识模块】 函数和数组 16 【正确答案】 C 【试题解析】 在函数 func(int n)中定义了局部静态变量 num,,其初始值等于 1,所以在主函数中执行 func(3),输出 4,此时静态变量 num的值等于 4,当退出函数func(3)时,其值不会丢失,所以当在执行 func(4)时,输出 8。 【知识模块】 函数和数组 17 【正确答案】 B 【试题解析】 子函数 fun(int x,int y),将变量 m和 i声明为局部静态变量,因此第 1次调用主函数后,局部静态变量 m和 i的值为 5和 3,第 1次函数

28、调用结束时,它们的值不释放保持不变,所以第 2次 调用时,局部静态变量 m和 i的初始值分别为 5和 3,即在执行 “i+=m+1”时, i的值为 9,因此最终 m的值为 11。 【知识模块】 函数和数组 18 【正确答案】 D 【试题解析】 在 C语言中,动态变量( auto)存储在内存中的动态存储区,在程序运行中,只有当调用变量所在的函数时,系统才临时给变量分配内存单元;全局变量( extern)一经定义,系统为其分配固定的内存单元;静态变量( static),编译系统为其分配固定的存储空间;寄存器变量( register)不保存在内存上,而是直接存储在 CPU的寄 存器中。 【知识模块】

29、 函数和数组 19 【正确答案】 D 【试题解析】 本题考查了静态局部变量,该局部变量的值在函数调用结束后如果不消失而保留原值。函数 fun的功能返回 2的乘方,主函数 fun函数调用 3次,因此第一次 s累乘 2,第二次累乘 4,第三次累乘 8,即为 2*4*8,值为 64。 【知识模块】 函数和数组 20 【正确答案】 A 【试题解析】 在主函数中第一次调用 f(a)时,得到变量 s的值等于 4,在第二次调用 f(a)时,在子函数 f中由于变量 a是一个局部静态变量,所以这次其值等 于2,因而在主函数中第二次调用 f(a)后,其返回值等于 5,最后变量 s的值等于 9。 【知识模块】 函数

30、和数组 21 【正确答案】 B 【试题解析】 这道试题主要考查了局部静态变量的应用。在函数 fun()中定义了局部静态变量整型 x,其初值等于 1,在主函数中循环执行 5次,第一次变量 s的值等于 3,变量 x的值等于 2,第二次变量 s的值等于 6,变量 x的值等于 3,第三次变量 s的值等于 10,变量 x的值等于 4,第四次变量 s的值等于 15,变量 x的值等于 5,第五次变量 s的值等于 21,变量 x的值等于 6。 【知识 模块】 函数和数组 22 【正确答案】 C 【试题解析】 在函数 int fun(int x,int n)的定义中,变量 sum使用了 static修饰符,这说

31、明了变量 sum为一个静态局部变量。由于在整个程序运行期间,静态局部变量在内存中的静态存储区中占据着永久的存储单元。即使退出函数之后,下次再进入该函数时,静态局部变量继续使用原来存储单元中原来的值。函数 int fun(int x,int n)的功能是求出数组 x各个元素的和。所以在主函数中,调用函数Fun(a,5)后,变量 sum=1+2+3+4+5=15,当再次调用 Fun(b,4)后 ,变量sum=15+6+7+8+9=45,所以 s=15+45=60。 【知识模块】 函数和数组 23 【正确答案】 B 【试题解析】 由于在函数 f中,变量 n为静态局部变量,所以在主函数中第一次调用函数

32、 f后,变量 n的值等于 1,当第二调用函数 f时,在函数 f的内部静态局部变量 n的值仍然保留等于 1,所以返回函数值等于 2。 【知识模块】 函数和数组 24 【正确答案】 A 【试题解析】 在子函数 fun()中定义局部静态变量 x,其初值等于 1, 然后再把其值扩大 1倍后返回。在主函数中执行 for循环语句 2次,调用函数 fun()两次,所以变量 s的值等于 4。这里要强调的一点是当函数 fun()执行完毕后,局部静态变量 x的值不会丢失,仍然有效。 【知识模块】 函数和数组 25 【正确答案】 A 【试题解析】 程序中定义了全局整型变量 a=4。在 int f(int n)函数中

33、定义了局部静态整型变量并进行了初始化即 static int a=5。在 int f(int n)函数中对 n是否是偶数进行判断,如果 n是奇数,则函数的返回值为 11,局部静态整型变 量 a=6;如果 n是偶数,则函数的返回值为 12,局部静态整型变量 a=6。所以在 main()函数中循环首先执行 s+=f(0)语句,而 f(0)返回值 12,所以第一次循环结束 s的值等于4+12=16;第二次开始执行 f(1)时,在 f(1)中执行 if(n%2)int a=6; t+=a+;和return t+a+;这两条语句,这时 t=6, a=6(静态局部变量第一次循环后其值加 1值不释放,执行第

34、二次循环量,其值仍有效 ),所以 f(1)的返回值等于 12。再在主函数中执行 s+=f(1)语句,即 16+12=28。 【知识模块】 函数和数组 26 【正确答案】 A 【试题解析】 函数 fun(int a ,int n)的功能是实现整型数组 a 元素的逆置操作。在主函数中当执行 fun(k,5)时,对 k10中的子数组 k5=1,2,3,4,5的首尾元素进行逆置,此时 k10=5,4,3,2,1,6,7,8,9,10。所在循环语句中输出从第 27个数组元素时,其值分别为 321678。 【知识模块】 函数和数组 27 【正确答案】 B 【试题解析】 数组说明的一般形式为:类型说明符 数

35、组名 常量表达式 ;其中类型说明符可以是任一种基本数据类型或构造数据类型,数组名是定义的数组标识符。常量表达式表示数据元素的个数,也就是数组的长度,必须是整型常量。 【知识模块】 函数和数组 28 【正确答案】 C 【试题解析】 在主函数的 for循环语句中,当循环变量 i的值等于 0, 2时,执行switch中的 case 0语句,分别对数组元素 a0和 a2加 1和减 1,所以 a0的值等于 3, a2等于 4。当循环变量 i的值等于 1, 3时,执行 switch中的 case 1语句,把数组元素 a1和 a3的值赋为 0。所以输出数组 a的元素,其结果为 3040。 【知识模块】 函数和数组

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1