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

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

1、国家二级 C语言(函数和数组)机试模拟试卷 14及答案与解析 一、选择题 1 有以下程序( strcpy为字符串复制函数, strcat为字符串连接函数 ) #include stdio.h #include string.h main() char a10=“abc“,b10=“012“,c10=“xyz“; strcpy(a+1,b+2); puts(strcat(a,c+1); 程序运行后的输出结果是 ( A) bc2yz ( B) a2yz ( C) a12xyz ( D) 12yz 2 若各选项中所用变量已正确定义,函数 fun中通过 return语句返回一个函数值,以下选项中错误的

2、程序是 ( A) main() x=fun(2,10); float fun(int a,int b) ( B) float fun(int a,int b) main() x=fun(i,j); ( C) float fun(int ,int); main() x=fun(2,10); float fun(int a,in t b) ( D) main() float fun(int i,int j); x=fun(i,j); float fun(int a,int b) 3 以下叙述中正确的是 ( A)用户自己定义的函数只能调用库函数 ( B)不同函数的形式参数不能使用相同名称的标识符 (

3、 C)在 C语言的函数内部,可以定义局部嵌套函数 ( D)实用的 C语言源程序总是由一个或多个函数组成 4 若有定义语句: char s10=“123456700“; 则 strlen(s)的值是 ( A) 8 ( B) 7 ( C) 9 ( D) 10 5 有以下程序 # include string.h main( ) char p20=a,b,c,d,q =“abc“, r =“abcde“; strcat(p, r); strcpy(p+strlen(q), q); printf(“%dn“, strlen(p); 程序运行后的输出结果是 ( A) 9 ( B) 11 ( C) 6 (

4、 D) 7 6 若有定义语句: char *s1=“OK“, *s2=“ok“; 以下选项中,能够输出 “OK“的语句是 ( A) if (strcmp(s1,s2)!=0) puts(s1); ( B) if (strcmp(s1,s2)!=0) puts(s2); ( C) if (strcmp(s1,s2)=1) puts(s1); ( D) if ( strcmp(s1,s2)=0) puts(s1); 7 有以下程序,程序中库函数 islower (ch)用以判断 ch中的字母是否为小写字母 #include stdio.h #include ctype.h void fun(cha

5、r *p) int i=0; while (pi) if(pi= i+; main() char sl100=“ab cd EFG !“; fun (s1); printf(“%sn“,s1); 程序运行后的输出结果是 ( A) Ab Cd EFg ! ( B) ab cd EFG ! ( C) ab cd EFg ! ( D) aB cD EFG ! 8 若有以下定义和语句 char s110=“abcd!“,*s2=“n123“; printf(“%d %dn“,strlen(s1),strlen(s2); 则输出结果是 ( A) 10 5 ( B) 10 7 ( C) 5 5 ( D)

6、5 8 9 有以下程序 #include stdio.h int fun(int a,int b) if(b=0) return a; else return(fun(-a,-b); main() printf(“%dn“, fun(4,2); 程序的运行结果是 ( A) 1 ( B) 2 ( C) 3 ( D) 4 10 下列选项中,能够满足 “只要字符串 s1等于字符串 s2,则执行 ST”要求的是 ( A) if(s1=s2) ST; ( B) if(strcpy(s1,s2)=1) ST; ( C) if(strcmp(s2,s1)=0) ST; ( D) if(s1-s2=0) ST

7、; 11 以下叙述中正确的是 ( A)函数名代表该函数的入口地址 ( B)所有函数均不能接受函数名作为实参传入 ( C)函数 体中的语句不能出现对自己的调用 ( D)如果函数带有参数,就不能调用自己 12 以下叙述中正确的是 ( A)函数既可以直接调用自己,也可以间接调用自己 ( B)任何情况下都不能用函数名作为实参 ( C)函数的递归调用不需要额外开销,所以效率很高 ( D)简单递归不需要明确的结束递归的条件 13 以下关于 return语句的叙述中正确的是 ( A)一个自定义函数中必须有一条 return语句 ( B)一个自定义函数中可以根据不同情况设置多条 return语句 ( C)定义

8、成 void类型的函数中可以有带返回值 的 return语句 ( D)没有 return语句的自定义函数在执行结束时不能返回到调用处 14 已定义以下函数 int fun( int *p) return *p; fun函数返回值是 ( A)不确定的值 ( B)一个整数 ( C)形参 p中存放的值 ( D)形参 p的地址值 15 以下叙述中错误的是 ( A)用户定义的函数中可以没有 return语句 ( B)用户定义的函数中若没有 return语句,则应当定义函数为 void类型 ( C)用户定义的函数中可以有多个 return语句,以便可以调用一 次返回多个函数值 ( D)函数的 return

9、语句中可以没有表达式 16 以下叙述中错误的是 ( A)函数调用可以作为一个独立的语句存在 ( B)函数形参的值也可以传回给对应的实参 ( C)若函数有返回值,必须通过 return语句返回 ( D) C程序必须由一个或一个以上的函数组成 17 有以下程序 int add (int a,int b) return (a+b); main( ) int k,(*f)( ),a=5,b=10; f=add; 则以下函数调用语句错误的是 ( A) k=add(a,b); ( B) k=(*f)(a,b); ( C) k= *f(a,b); ( D) k=f(a,b); 18 以下叙述中正确的是 (

10、A)函数调用时,不必区分函数名称的大小写 ( B)调用函数时,函数名必须与被调用的函数名完全一致 ( C)函数名允许用数字开头 ( D)在函数体中只能出现一次 return语句 19 若有以下函数首部 int fun(double x10, int *n) 则下面针对此函数的函数声明语句中正确的是 ( A) int fun(double , int ); ( B) int fun(double *x, int n); ( C) int fun(double *, int *); ( D) int fun(double x, int *n); 20 以下选项中叙述错误的是 ( A)在 C程序的同

11、一函数中,各复合语句内可以定义变量,其作用域仅限本复合语句内 ( B) C程序函数中定义的赋有初值的静态变量,每调用一次函数,赋一次初值 ( C) C程序函数中定义的自动变量,系统不自动赋确定的初值 ( D) C程序函数的形参不可以说明为 static型变量 21 有以下程 序 int f(int x); main() int n=1,m; m=f(f(f(n); printf(“%dn“,m); int f(int x) return x*2; 程序运行后的输出结果是 ( A) 1 ( B) 2 ( C) 4 ( D) 8 22 有以下程序 #include stdio.h int fun(

12、int x,int y) if(x=y)return(x); else return(x+y)/2); main() int a=4,b=5,c=6; printf(“%dn“,fun(2*a,fun(b,c); 程序运行后的输出结果是 ( A) 3 ( B) 6 ( C) 8 ( D) 12 23 有以下程序 #include stdio.h 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) 10 ( B) 8 (

13、 C) 9 ( D) 7 24 有以下程序 #include stdio.h double f(double x); main() double a=0; int i; for(i=0;i 30;i+=10) a+=f(double)i); printf(“%5.0fn“,a); double f(double x) return x*x+1; 程序运行后的输出结果是 ( A) 401 ( B) 500 ( C) 503 ( D) 1404 25 若函数调用时的实参为变量时,以下关于 函数形参和实参的叙述中正确的是 ( A)形参只是形式上的存在,不占用具体存储单元 ( B)函数的形参和实参分别

14、占用不同的存储单元 ( C)同名的实参和形参占同一存储单元 ( D)函数的实参和其对应的形参共占同一存储单元 26 有以下程序 void fun( int a, int b, int c ) a=b; b=c; c=a; main() int a=10 , b=20, c=30; fun( a, b, c ); printf(“%d,%d,%dn“,c,b,a); 程序运 行后的输出结果是 ( A) 10,20,30 ( B) 20,30,10 ( C) 30,20,10 ( D) 0,0,0 27 有以下程序 #include stdio.h int f(int x); main() int

15、 a,b=0; for(a=0;a 3;a+) b=b+f(a);putchar(A+b); int f(int x) return x*x+1; ( A) BCD ( B) BDI ( C) ABE ( D) BCF 28 若有以下程序 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-

16、4-5-6- 29 有以下程序 #include stdio.h int f(int x) int y; if(x=0|x=1)return (3); y=x*x-f(x-2); return y; main() int z; z=f(3);printf(“%dn“,z); 程序的运行结果是 ( A) 9 ( B) 0 ( C) 6 ( D) 8 30 有以下程序 #include stdio.h int fun( int x ) int p; if (x=0 | x=1) return(3); p= x - fun( x-2 ); return (p); main() printf (“%d

17、n“, fun(9); 程序运行后的输出结果是 ( A) 5 ( B) 9 ( C) 4 ( D) 7 国家二级 C语言(函数和数组)机试模拟试卷 14答案与解析 一、选择题 1 【正确答案】 B 【试题解析】 程序执行 strcpy(a+1,b+2)后,字符数组 a的值为 “a2”,再进行字符串的连接 strcat(a,c+1),此时字符数组 a的值为 “a2yz”。 【知识模块】 函数和数组 2 【正确答案】 A 【试题解析】 C语言规定 ,函数必须先定义, 后调用(函数的返回值类型为 int或char时除外)。在选项 A中,调用的子函数在调用后面定义,所以不正确。在选项 B、 C中,被调

18、用函数在主函数之前定义,再在主函数中调用,所以是正确的;在选项 D中,在主函数中先对子函数 float fun(int i,int j)进行了声明,然后进行调用。 【知识模块】 函数和数组 3 【正确答案】 D 【试题解析】 一个 C语言源程序可以由一个或多个源文件组成,每个源文件可由一个或多个函数组成,这些函数可以是自定义函数,也可以是库函数,各个函数之间没有主从关系,不能 嵌套定义函数。 【知识模块】 函数和数组 4 【正确答案】 B 【试题解析】 字符串长度函数 strlen(s)表示计算出以 s为起始地址的字符串的长度,并作为函数值返回。这个长度值不包括串尾的结束标志 0。 【知识模块

19、】 函数和数组 5 【正确答案】 C 【试题解析】 字符串连接函数 strcat(p,r)的功能是把字符数组 p 和 r 连接起来,此时字符数组 p 的有效字符长度为 9,再执行 strcpy(p+strlen(q),q)字符串复制函数,把字符数组 q 复制 到字符数组 p 从 p3开始到 p5数组位置中,由于字符数组 q 中的内容为字符串 “abc”复制时把字符串结束标志 null也复制到字符数组 p 中,这时字符函数 strlen(p)返回字符数组 p 的有效字符长度为 6。 【知识模块】 函数和数组 6 【正确答案】 A 【试题解析】 字符串比较函数 strcmp的功能是对 s1和 s2

20、所指字符串进行比较。如果 s1 s2,返回负数,如果 s1=s2,返回 0,如果 s1 s2,返回正数,所以对于本题来说,能够输出 “OK”的语句是选项 A所指的 语句。 【知识模块】 函数和数组 7 【正确答案】 D 【试题解析】 函数 fun(char *p)的功能是如果 pi指向的字符为空字符并且其前一个字符是小写字母,则把小写字母变成大字母,所以在主函数中,执行 fun (s1)后,小写字母 b, d都改成大字母。 【知识模块】 函数和数组 8 【正确答案】 C 【试题解析】 本题要注意的是转义字符的问题,在字符串 s2中,有两个转义字符,分别是回车换行符和反斜线。所以其字符串长度等于

21、 5。 【知识模块】 函数和数组 9 【正确 答案】 B 【试题解析】 由程序可知函数 fun(int a,int b)是一个递归函数。所以当主函数中调用 fun(4,2)时,其执行过程如下: fun(4,2)- fun(3,1)- fun(2,0),其返回值为2。 【知识模块】 函数和数组 10 【正确答案】 C 【试题解析】 在 C语言中要对两个字符串的大小进行比较,就需要调用字符串比较函数 strcmp(),如果这个函数的返回值等于 0,说明两个字符串相等。 【知识模块】 函数和数组 11 【正确答案】 C 【试题解 析】 函数形、实参传递的时候,要求对应位置类型一致即可,如果实参为函数

22、名,可以定义相应的形参为指向函数的指针变量来获得该函数的入口地址,因此选项 B错误的,在 C语言中允许进行递归调用,即自己调用自己,选项C和选项 D是错误的。 【知识模块】 函数和数组 12 【正确答案】 A 【试题解析】 一个 C语言源程序可以由一个或多个源文件组成,每个源文件可由一个或多个函数组成,各函数之间是平行的,除了主函数外,函数之间可以相互调用,甚至 C语言中的函数可以直接或间接地自己调用自己,称之为递归调用,该调用主要 用于把要解决的问题转化为一个新的问题,而这个新问题的解决方法仍与原来的解法相同,只是所处理的对象有规律地递增或递减,可以应用这个转化过程使问题得到解决,同时为了有

23、效使用递归调用必定要有一个明确的结束递归的条件。而每次进行递归调用时候,需要利用栈保存现场信息,因此并不会提高效率,选项 C和选项 D不正确。函数名表名了函数的入口地址,如果函数的形参为指向函数的指针变量,那么对应的实参必须为函数名,因此函数名可以为函数的参数,选项 B错误。 【知识模块】 函数和数组 13 【正确答案】 B 【试题解析】 return语句主要用于返回函数的值。在一个自定义函数中,可以根据不同的情况设置多条 return语句返回函数的值。 【知识模块】 函数和数组 14 【正确答案】 B 【试题解析】 由函数 int fun(int *p)return *p; 的定义可知,返回

24、值为整型指针变量 p所指向的数据。 【知识模块】 函数和数组 15 【正确答案】 C 【试题解析】 函数值通过 return语句返回, return语句的形式如下: return表达式或 return(表达式 );当程序执行到 return语句时,程序的流程就返回到调用该函数的地方,并带回函数值。在同一函数内,可以根据需要,在多处出现return语句,在函数体的不同部位退出函数。无论函数体中有多少个 return语句, return语句只可能执行一次,返回一个函数值。 return语句中也可以不含有表达式,这时必须定义函数为 void类型,它的作用只是使流程返回到调用函数,并没有确定的函数值。

25、函数体内可以没有 return语句,这时也必须定义函数为void类型,程序的流程就一直执行到函数末尾的 “”,然后返回调用函数,也没有确定的函数值带回。 【知识模块】 函数和数组 16 【正确答案】 B 【知识模块】 函数和数组 17 【正确答案】 B 【试题解析】 在语句 “k=*f(a,b)”中,由于 “() ”的优先级高于 “*”,所以“*f(a,b);”表示其返回类型为指针的带有两个整型参数的函数,而不是整型数值,因此选项 C为错误的调用形式。 【知识模块】 函数和数组 18 【正确答案】 B 【试题解析】 在标准 C中,函数的定义形式为: 函数返回值的类型名 函数名 (类型名 形式参

26、数 1,类型名 形式参数 2,) 说明部分 语句部分 需要说明的是函数名和形式参数都是由用户命名的标识符,在同一程序中,函数名必须惟一,形式参数名只要在同一函数中惟一即可,与其他函数中的变量可以同名。 return语句的作用是返回函数的值,在函数中可以出现多个或者没有。 【知识模块】 函数和数组 19 【正确答案】 B 【试题解析】 函数说明的一般形式为:类型名 函数名 (参数类型 1,参数类型2, ) 。因为函数 int fun(double x10,int *n)的第 1个形式参数是一个双精度型的一维数组,第 2个参数是一个 整型指针,并返回一个整型值。一维数组的名字表示的是一维数组的地址

27、。 【知识模块】 函数和数组 20 【正确答案】 B 【试题解析】 在函数定义的静态变量,只需要赋值 1次,即可保存初始值,不需要每次调用时都赋初始值。 【知识模块】 函数和数组 21 【正确答案】 B 【试题解析】 程序考查了函数的调用。对于 m=f(f(f(n);首先计算最内层的函数调用 f(n),执行 f函数,得到返回值 2,然后计算 f(2),得到返回值为 4,最后计算f(4),得到计算结果为 8。 【知识模块 】 函数和数组 22 【正确答案】 B 【试题解析】 fun(b,c)即 fun(5,6), 5!=6,所以返回 (5+6)/2=5; fun(2*a,5)即 fun(8,5)

28、, 8!=5,所以返回 (8+5)/2=6。 【知识模块】 函数和数组 23 【正确答案】 C 【试题解析】 本题考查函数的嵌套调用。首先计算 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。 【知识模块】 函数和数组 24 【正确答案】 C 【试题解析】 由于函数 f的作用是对形参 x求平方再加 1,所以在主函数中,循环第一次执行后变量 a的值等于 1,第二次执行后,变量 a的值等于 102,第三次执行后,变量 a的值等于 503。 【知识模块】 函数和数组 25 【正确答案】 B 【试题解析】

29、 在 C语言中,函数的实参单元与形参单元在内存中分配不同的存储单元。在调用函数时,给形参分配临时存储单元,并将实参对应的值传递给形参,在被调用函数中对形参存储单元中的值进行运算,最后通过 return语句把函数值返回调用函数。当调用 结束后,形参单元被释放,实参单元仍保留并维持原值。 【知识模块】 函数和数组 26 【正确答案】 C 【试题解析】 函数 fun中采用了变量作为参数,那么参数传递以后,形参 a,b,c的变化对于实参 a,b,c是没有影响的,因此主函数中 a,b,c的值经过 fun调用以后,值没有变化。 【知识模块】 函数和数组 27 【正确答案】 B 【试题解析】 在函数 mai

30、n()中,第一次执行 for循环时, b的值等于 1,此时输出字母 B;第二次执行 for循环时, b的值等于 3,此时输出字母 D;第三次执 行for循环时, b的值等于 8,此时输出字母 I。 【知识模块】 函数和数组 28 【正确答案】 A 【试题解析】 函数 f的主要功能为逆置输出整数 x的每一位数据,如果 z的值为123456,逆置输出的结果为 6-5-4-3-2-1。 【知识模块】 函数和数组 29 【正确答案】 C 【试题解析】 主函数调用 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。 【知识模块】 函数和数组 30 【正确答案】 D 【试题解析】 函数 fun的主要功能是: fun(x)=3 x=0 或者 x=1; x=fun(x-2) 其他。 初值 x的值为 9,因此 fun(9)=9-fun(7)=9-(7-(5-(3-3),因此答案为 7。 【知识模块】 函数和数组

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

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

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