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

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

1、国家二级 C语言机试(函数)模拟试卷 3及答案与解析 一、选择题 1 有以下程序 #include int f(int n) int t = 0, a=5; if (n/2) int a=6; t += a+; else int a=7; t += a+; return t + a+; main() int s=0, i=0; for (; i int fun(char p10) int n=0,i; for(i=0; i main() char w20, a510=“abcdef“, “ghijkl“, “mnopq“, “rstuv“, “wxyz“; int p62=0,1,1,5,0,

2、0,0,2,1,4,4,4, i; for (i=0; i void f(int x) if (x = 10) printf(“%d-“, x%10); f(x/10); else printf(“%d“, x); main() int z = 123456; f(z); 则程序的输出结果是( )。 ( A) 6-5-4-3-2-1 ( B) 6-5-4-3-2-1- ( C) 1-2-3-4-5-6 ( D) 1-2-3-4-5-6- 6 若有以下程序 #include int a=2; int f(int m) static int n; n=0; n+; a+; return n+m+a

3、; main() int k; for (k=0; k 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“, f(a, 9); 则程序的输出结果是( )。 ( A) 9 ( B) 1 ( C) 8 ( D) 5 8 若有以下程序 #include int f(int m) static int n=0; int a=2; n+; a+; return n+m+a; main

4、() int k; for (k=0; k int fun( int x ) int p; if (x=0 | x=1) return(3); p= x - fun( x-2 ); return (p); main() printf (“%dn“, fun( 9 ) ); 程序运行 后的输出结果是( )。 ( A) 7 ( B) 5 ( C) 9 ( D) 4 10 有以下程序 #include 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(

5、k, m); printf(“%d,“,p); p=fun( k, m); printf(“%dn“,p); 程序运行后的输出结果是( )。 ( A) 8,17 ( B) 7,16 ( C) 8,8 ( D) 7,17 11 有以下程序 #include void fun ( int n ,int *s ) int f; if( n=1 ) *s = n+1 ; else fun( n-1, *s = f ; main() int x =0; fun( 4, printf(“%dn“,x); 程序运行后的输出结果是( )。 ( A) 2 ( B) 1 ( C) 3 ( D) 4 12 有以下程

6、序 #include void fun ( int *s ) static int j=0; do sj += s j+1; while(+j int fun( int n ) int a; if( n=1 ) return 1; a = n + fun( n-1 ); return ( a ); main() printf( “%dn“, fun( 5 ) ); 程序的输出结果是( )。 ( A) 15 ( B) 14 ( C) 10 ( D) 9 16 有以下程序 #include int d=1; void fun( int p ) int d=5; d += p+; printf(“%

7、d “, d ); main() int a=3; fun( a ); d += a+; printf(“%dn“,d); 程序的输出结果是( )。 ( A) 8 4 ( B) 9 6 ( C) 9 4 ( D) 8 5 17 有以下程序 #include int fun(int a) int b=0; static int c=3; a =( c+,b+); return ( a ); main() int a = 2, i, k; for( i=0; i int a=1, b=2; void fun1( int a, int b ) printf( “%d %d “ ,a, b ); vo

8、id fun2() a=3; b=4; main() fun1(5,6); fun2( ); printf( “%d %dn“,a, b ); 程序运行后的输出结果是( )。 ( A) 5 6 3 4 ( B) 3 4 5 6 ( C) 1 2 5 6 ( D) 5 6 1 2 19 有以下程序 #include void func( int n ) static int num = 1; num += n; printf(“%d “, num); main() func(3); func(4); printf(“n“); 程序 运行后的输出是( )。 ( A) 4 8 ( B) 4 5 (

9、C) 3 5 ( D) 3 4 20 有以下程序 #include void f(int x, int n) if ( n 1) printf(“%d,“, xn-1); f(x, n-1); else printf(“%d,“, x0); main() int z6 = 1,2,3,4,5,6; f(z,6); printf(“n“); 程序的运行结果是( )。 ( A) 6,5,4,3,2,1, ( B) 6,1, ( C) 2,3,4,5,6,1, ( D) 1,2,3,4,5,6, 21 有以下程序 #include int a=2; int f() static int n=0; i

10、nt m=0; n+; a+; m+; return n+m+a; main() int k; for (k=0; k void f(int x, int n) if ( n 1) f( printf(“%d,“, x0); else printf(“%d,“, x0); main() int z6 = 1,2,3,4,5,6; f(z,6); printf(“n“); 程序的运行结果是( )。 ( A) 6,5,4,3,2,1, ( B) 1,1 ( C) 1,1,1,1,1,1, ( D) 1,2,3,4,5,6, 23 有以下程序 #include int a=2; int f() st

11、atic int n; int m; m=n=0; n+; a+; m+; return n+m+a; main() int k; for (k=0; k main() int i=1, j=3; printf(“%d,“ ,i+ ); int i=0; i+=j*2; printf(“%d,%d,“ ,i,j ); printf(“%d,%dn“ ,i,j ); 程序运行后的输出结果是( )。 ( A) 1,6,3,2,3 ( B) 1,6,3,1,3 ( C) 1,6,3,6,3 ( D) 1,7,3,2,3 25 有 以下程序 #include int fun(int a,int b)

12、static int m=0, i=2; 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) 8,16 ( C) 8,8 ( D) 8,20 26 若有定义语句: char str1=“string“,str28,*str3, str410=“string“;,库函数 strcpy的功能是复制字符串,以下选项中错误的函数调用是( )。

13、 ( A) strcpy(str3, “HELLO!“) ( B) strcpy(str2, “HELLO!“) ( C) strcpy(str1, “HELLO!“) ( D) strcpy(str4, “HELLO!“) 27 当没有指定 C语言中函数形参的存储类别时,函数形参的存储类别是( )。 ( A)自动 (auto) ( B)静态 (static) ( C)寄存器 (register) ( D)外部 (extern) 28 有如下程序 #include void convert(char ch) if (ch void get_put() char ch; ch = getchar

14、(); if (ch != n) get_put(); putchar(ch); main() get_put(); printf(“n“); 程序运行时,输入 1234,则输出结果是( )。 ( A) 4321 ( B) 1234 ( C) 4444 ( D) 1111 30 有如下程序 #include int sum(int data) static int init = 0; return init += data; main() int i; for (i=1; i int * sum(int data) static int init = 0; init += data; retu

15、rn main() int i, *p; for (i=1; i void fac2(int ); void fac1(int n) printf(“*“); if(n0) fac2(n-1); void fac2(int n) printf(“#“); if(n0) fac2(-n); main() fac1(3); 程序的运行结果是( )。 ( A) *# ( B) *#* ( C) *# ( D) *#*# 33 有以下程序 #include int fun(int n) static int t=1; int i=1; for( ; i main() int findmax(int,i

16、nt,int),m; m=findmax(a,b,c); int findmax(int x,int y,int z) 则以下叙述正确的是( )。 ( A)在 main函数中 声明了 findmax函数 ( B)在 main函数中定义了 findmax函数 ( C)在 main函数中两次调用了 findmax函数 ( D)在 main函数内、外重复定义了 findmax函数 35 有以下程序 #include void fun(int n) int i; if(i=n/10)!=0) fun(i); putchar( n%10+0); main() fun(256); 程序运行后的输出结果是(

17、 )。 ( A) 256 ( B) 652 ( C) 2560 ( D) 52 国家二级 C语言机试(函数)模拟试卷 3答案与解析 一、选择题 1 【正确答案】 A 【试题解析】 一个源文件中如果外部变量和局部变量同名,则在该局部变量的作用域内,该外部变量会被 “屏蔽 “, main()函数中调用两次 f()函数,两次调用均进入 else选择支句, t=7,返回 7+5=12,所以 s=0+f(0)+f(1)=24,答案选 A。 【知识模块】 函数 2 【正确答案】 A 【试题解析】 C语言中,比较两个字符串只能使用字符串处理函数中的字符串比较函数 strcmp(字符串 1,字符串 2),若若

18、字符串 1与字符串 2相同则该函数返回0,所以选项 A)符合要求,答案选 A)。 【知识模块】 函数 3 【正确答案】 A 【试题解析】 函数 fun()的功能是统计字符串数组每个字符串首字母为 ?T?的字符串个数,所以答案选 A。 【知识模块】 函数 4 【正确答案】 A 【试题解析】 考查二维数组元素的引用。该段程序代码的作用是取二维数组 p中的元素对作为数组 a的下标引用 a中的元素,并用一维数组 w保存。所以w0=ap00p01=a01= ?b?, w1=ap10p11=a15= ?l?,同理w2=a00= ?a?, w3=a02= ?c?, w4=a14= ?k?, w5=a44=

19、?0?,所以输出结果为 “black“,答案选 A。 【知识模块】 函数 5 【正确答案】 A 【试题解析】 函数 f()的功能是将数字 x逆序输出,并在输出的数字之间加上间隔符号 ?- ?,所以答案选 A。 【知识模块】 函数 6 【正确答案】 A 【 试题解析】 静态变量定义时的初始化只运行一次,并且其值在程序运行过程中一直存在,但是该函数中在定义静态变量 n时并没有对其初始化,接下来有个赋值语句 “n=0;“所以每次执行函数 f()时,静态变量 n都会先被赋值为 0再自加 1,所以输出的 f(0)=1+0+3=4, n=1, a=3; f(1)=1+1+4=6, n=1, a=4;f(2

20、)=1+2+5=8, n=1, a=5; f(3)=1+3+6=10, n=1, a=6。所以答案选 A。 【知识模块】 函数 7 【正确答案】 A 【试题解析】 函数 f()的功能是返回数 组 a中所有数字中最大的值,所以输出结果为 9,答案选 A。 【知识模块】 函数 8 【正确答案】 A 【试题解析】 静态变量定义时的初始化只运行一次,并且其值在程序运行过程中一直存在,而局部变量则是用时分配,用完释放。 main()函数中调用四次 f()函数, f(0)=1+0+3=4, n=1, a=3; f(1)=2+1+3=6, n=2, a=3; f(2)=3+2+3=8, n=3,a=3; f

21、(3)=4+3+3=10, n=4, a=3。所以答案选 A。 【知识模块】 函数 9 【正确答案】 A 【试题解析】 考查函数的递归调用。 fun(9)=9-fun(7)=9-(7-fun(5)=2+(5-fun(3)=7-(3-fun(1)=7,所以答案选 A。 【知识模块】 函数 10 【正确答案】 A 【试题解析】 静态变量定义时的初始化只运行一次,并且其值在程序运行过程中一直存在,所以第一次调用 fun(k,m)时, p=fun(4,1)=m=8,静态变量i=2+0+1=3,m=3+4+1=8;第二次调用 fun(k,m)时, p=fun(4,1)=m=17,静态变量i=3+8+1=

22、12,m=12+4+1=17;输出结果为 8,17。答案选 A。 【知识模块】 函数 11 【正确答案】 A 【试题解析】 该递归函数的出口是 “if(n=1) *s = n+1 “,所以最后 s的值一定为1+1=2,答案选 A。 【知识模块】 函数 12 【正确答案】 A 【试题解析】 主函数 main()中第一个 for循环中共调用函数 fun()两次:第一次调用时, do-while循环的循环体执行两次,结束后 a10=3,5,3,4,5,静态变量j=2,由于静态变量定义时的初始化只运行 一次,所以第二次调用时, j保留第一次调用结束时的值 2, do-while循环执行一次,结束后 a

23、10=3,5,7,4,5,所以第二个 for循环输出数组 a下标范围为 1到 4之间的元素,所以答案选 A。 【知识模块】 函数 13 【正确答案】 A 【试题解析】 用户定义的标识符用来给变量、函数、数组或指针等命名,而这些在 C语言中都有自己的作用域,选项 A)正确; C语言中所有的变量都有自己的作用域,选项 B)错误;在函数内定义的变量为局部变量,在语句块内定义的变量也为局部变量,选项 C)错误;局部变量可 以被 static修饰从而成为一种特殊的局部变量 静态局部变量,选项 D)错误;答案选 A)。 【知识模块】 函数 14 【正确答案】 A 【试题解析】 全局变量可以用 static

24、修饰,限制该变量只能在当前文件有效而不能被其他文件访问,选项 A)正确;变量的说明只是向编译程序描述变量类型,但不为该变量分配存储空间,变量的定义才为该变量分配存储空间,选项 B)错误;在语句块内可以定义变量,定义的变量为局部变量,选项 C)错误;函数的形参相当于在函数内部定义的一个变量,属于局部变量,选项 D)错误;答案选A)。 【知识模块】 函数 15 【正确答案】 A 【试题解析】 考查递归函数。函数 fun()的功能是计算 1到 n之间的数字之和,所以计算结果为 15,答案选 A。 【知识模块】 函数 16 【正确答案】 A 【试题解析】 函数的参数传递过程中,形参只是实参的一个副本,

25、形参改变不能影响到实参。若外部变量和局部变量同名,则在该局部变量的作用域内,该外部变量会被 “屏蔽 “。所以调用函数 fun(a)时,使用的变量 d为 5, d=5+3=8,输出结果为 8; main()函数内,使用的为全局变量 d, a值没有改变, d=1+3=4,输出结果为 4,所以答案选 A。 【知识模块】 函数 17 【正确答案】 A 【试题解析】 函数 fun()中语句 “a =( c+,b+);“计算的结果始终为 0,这是因为逗号表达式的值为最后一个表达式,即 “b+“的值, b为局部变量,每次调用时均初始化为 0,所以函数 fun()的返回值始终为 0,计算得 k的值也为 0,答

26、案选 A。 【知识模块】 函数 18 【正确答案】 A 【试题解析】 在一个源文件中如果外部变量和局部变量同名,则在该局部变量的作用域内,该 外部变量会被 “屏蔽 “,所以函数 fun1()输出的为局部变量 a、 b的值: 5 6; fun2()改变的是全局变量 a、 b的值,输出结果为 3 4,答案选 A。 【知识模块】 函数 19 【正确答案】 A 【试题解析】 func()有一个静态变量 num,静态变量的初始化只进行一次,其值在程序运行过程中一直存在。调用 func(3)时 num被初始化为 1,语句 “num += n;“计算得 num值为 4,输出结果为 4;调用 func(4)时

27、 num为上一次计算的结果4,再次计算 num=8,输出结果为 8,。答案选 A。 【知识模块】 函数 20 【正确答案】 A 【试题解析】 函数 f()的功能是逆序输出 x中前 n个数据,所以答案选 A。 【知识模块】 函数 21 【正确答案】 A 【试题解析】 静态变量定义时的初始化只运行一次,并且其值在程序运行过程中一直存在,而局部变量则是用时分配,用完释放。全局变量在当前文件内也是一直存在的。 main()函数中调用三次 f()函数, f(0)=1+1+3=5, n=1, m=1, a=3;f(1)=2+1+4=7, n=2, m=1, a=4; f(2)=3+1+5=9, n=3,

28、m=1, a=5。所以答案选A。 【知识模块】 函数 22 【正确答案】 A 【试题解析】 函数 f()的功能是逆序输出 x中前 n个数据,所以答案选 A。 【知识模块】 函数 23 【正确答案】 A 【试题解析】 局变量在当前文件内也是一直存在的。而静态变量定义时的初始化只运行一次,并且其值在程序运行过程中一直存在,函数 f()在定义静态变量 n时并没有对其初始化,接下来有个赋值语句 “m=n=0;“所以每次执行函数 f()时,静态变量 n都会先被赋值为 0再自加 1,所以输出的 f(0)=1+1+3=5, n=1, m=1, a=3;f(1)=1+1+4=6, n=1, m=1, a=4;

29、 f(2)=1+1+5=7, n=1, m=1, a=5。所以答案选A。 【知识模块】 函数 24 【正确答案】 A 【试题解析】 不同作用域内若定义有同名的局部变量,则在其中一个局部变量的作用域内,其他同名的局部变量会被 “屏蔽 “,规则一般是作用域小的变量 “屏蔽 “作用域大的变量。在用 引起来的复合语句块中, i值为 6,输出结果为 6,3,而在语句块外, i为 2,输出结果为 2,3,所以答案选 A。 【知识模块】 函数 25 【正确答案】 A 【试题解析】 静态变量定义时的初始化只运行一次,并且其值在程序运行过程中一直存在,所以第一次调用 fun(k,m)时, p=fun(4,1)=

30、m=8,静态变量i=2+0+1=3,m=3+4+1=8;第二次调用 fun(k,m)时, p=fun(4,1)=m=17,静态变量i=3+8+1=12,m=12+4+1=17;输出结果为 8,17。答案选 A。 【知识模块】 函数 26 【正确答案】 A 【试题解析】 字符指针必须指向一个地址,没有指向具体内存地址的指针不能作为 strcpy()的参数,答案选 A。 【知识模块】 函数 27 【正确答案】 A 【试题解析】 C语言中,当省略变量的存储类型时,局部变量的存储类别默认为auto,所以答案选 A。 【知识模块】 函数 28 【正确答案】 A 【试题解析】 函数 conver()的作用

31、是输出 ASCII码在字母 D到字母 ch之间的字符,答案选 A)。 【知识模块】 函数 29 【正确答案】 A 【试题解析】 函数 get_put()的作用是利用递归调用,优先输出最后一个输入的字符,即逆序输 出输入的字符串,答案选 A。 【知识模块】 函数 30 【正确答案】 A 【试题解析】 静态变量在定义时的初始化只运行一次,并且其值在程序运行过程中一直存在,所以函数 sum()的作用是用静态变量 init累加所有的调用 sum()函数时传入的参数值。 for循环中传入的参数为 1,2,3,4,5,所以输出的结果为1,3,6,10,15,答案选 A。 【知识模块】 函数 31 【正确答

32、案】 A 【试题解析】 静态变量在定义时的初始化只运行一次,并且其值在程序运行过程中一直存在,所以函数 sum()的作用是用静态变量 init累加所有的调用 sum()函数时传入的参数值。 for循环中传入的参数为 1,2,3,4,每次的计算结果为 1,3,6,10。再次调用函数 sun(0)时返回值为 10,答案选 A。 【知识模块】 函数 32 【正确答案】 A 【试题解析】 考查函数的嵌套调用,嵌套调用顺序分别为: fac1(3)、 fac2(2)、fac2(1)、 fac2(0),每调用 fac1()输出一个 “*“,调用 fac2()输出一个 “#“,所以答案选 A。 【知识模块】

33、函数 33 【正确答案】 A 【试题解析】 函数 fun()调用两次, fun(2)中计算出的结果为 2,由于函数 fun()中有一个静态变量 t,静态变量在定义时的初始化只运行一次,并且其值在程序运行过程中一直存在,所以第二次调用 fun(3)时 t=3,计算结果为 12。主函数 main()用局部变量 t累加两次调用结果, t初始值为 1,所以最终 t=15,答案选 A。 【知识模块】 函数 34 【正确答案】 A 【试题解析】 函数不能嵌套定义,但是可以在一个函数体内对另一个函数进行声明,函数声明的一般形式为 “类型说明符 被调函数名 ( 类型 形参 , 类型 形参 )“ ,所以语句 “int findmax(int,int,int)“为对函数 findmax()的声明,语句“m=findmax(a,b,c);“为调用函数 findmax(),在 main()函数外是函数 findmax()的定义。答案选 A。 【知识模块】 函数 35 【正确答案】 A 【试题解析】 函数 fun()的功能利用递归调用的方式是将数字 n的不同位提取出来并按照从高位到低位的顺序将各位的数字以字符的形式输出,所以答案选 A。 【知识模块】 函数

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

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

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