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

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

1、国家二级 C语言机试(函数和数组)模拟试卷 2及答案与解析 一、选择题 1 若各选项中所用变量已正确定义,函数 fun中通过 return语句返回一个函数值,以下选项中错误的程序是 ( A) main()x=fun(2 , 10); float fun(int a , intb) ( B) float fun(int a, int b)main()=fun(i,j) ; ( C) float fun(int, int); main()x=fun(2 , 10); )float fun(in t a, int b) ( D) main()float fun(int i,intj); x=fun(

2、ij) ; float fun(int a , int b) 2 有以下程序 include main() char p20=a, b, c, d, q=“abc“, r=“abcde“; strcat(p, r); strcpy(p+strlen(q), q); printf(“ d n“ strlen(p); 程序运行后的输出结果是 ( A) 9 ( B) 11 ( C) 6 ( D) 7 3 若有以下定义和语句 char sl10=“abed!“, *s2=“ n123 “; printf(“ d d n“, strlen(s1), strlen(s2); 则输出结果是 ( A) 10

3、5 ( B) 10 7 ( C) 5 5 ( D) 5 8 4 以下叙述中正确的是 ( A)函数名代表该函数的入口地址 ( B)所有函数均不能接受函数名作为实参传入 ( C)函数 体中的语句不能出现对自己的调用 ( D)如果函数带有参数,就不能调用自己 5 已定义以下函数 int fun(int*p)return*p; )fun函数返回值是 ( A)不确定的值 ( B)一个整数 ( C)形参 p中存放的值 ( D)形参 p的地址值 6 有以下程序 int add(int a, int b) return(a+b); main() int k, (*f)(), a=5, b=10; f=add;

4、 则以下函数调用语句错误的是 ( A) k=add(a, b); ( B) k=(*f)(a, b); ( C) k=*f(a, b); ( D) k=f(a, b); 7 以下选项中叙述错误的是 ( A)在 C程序的同一函数中,各复合语句内可以定义变量,其作用域仅限本复合语句内 ( B) C程序函数中定义的赋有初值的静态变量,每调用一次函数,赋一次初值 ( C) C程序函数中定义的自动变量,系统不自动赋确定的初值 ( D) C程序函数的形参不可以说明为 static型变量 8 有以下程序 #include int f(int x, int Y) return(y-x)*x); main()

5、int a=3, b=4, c=5, d; d=f(f(a, b), f(a, c); printf(“ d n“, d); 程序运行后的输出结果是 ( A) 10 ( B) 8 ( C) 9 ( D) 7 9 有以下程序 void fun(int a, int b, intC) a=b; b=c; c=a; main() int a=10, b=20, c=30; fun(a, b, C); printf(“ d, d, d n“, c, b, a); ) 程序运行后的输出结果是 ( A) 10, 20, 30 ( B) 20, 30, 10 ( C) 30, 20, 10 ( D) 0,0

6、, 0 10 有以下程序 #include int fun(int x) int p; if(x=0 x=1)return(3); p=x-fun(x-2); return(p); main() printf(“ d n“, fun(9); 程序运行后的输出结果是 ( A) 5 ( B) 9 ( C) 4 ( D) 7 11 以下选项中函数形参不是指针的是 ( A) fun(int&p) ( B) fun(int a10) ( C) fun(int*a) ( D) fun(int P) 12 有以下程序 (strcat函数用以连 接两个字符串 ) #include #include main(

7、) char a20=“ABCD 0EFG 0“, b=“IJK“; strcat(a, b); printf(“ s n“, a); 程序运行后的输出结果是 ( A) ABCDE 0FG 0IJK ( B) ABCDIJK ( C) UK ( D) EFGIJK 13 若有以下程序 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(“ d n“, f(a, 9); ) 则程序

8、的输出结果是 ( A) 9 ( B) 1 ( C) 8 ( D) 5 14 有以下程序 int d=1; void fun(int P) int d=5; d+=p+; printf(“ d“, d); main() int a=3; fun(a); d+=a+; printf(“ d n“, d); ) 程序的输出结果是 ( A) 9 6 ( B) 9 4 ( C) 8 4 ( D) 8 5 15 有以下程序 void fun2(char a, char b) printf(“ c c“, a, b); ) char a=A, b=B; void funl() a=C; b=D; ) mai

9、n() funl(); printf(“ c c“, a, b); fun2(E, F); 程序的运行结果是 ( A) A B E F ( B) C D E F ( C) A B C D ( D) C D A B 16 有以下程序 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=fun(j, m); printf(“ d n“, k); 执行后的输出结果是 ( A) 5, 5 ( B) 5, 11

10、 ( C) 11, 11 ( D) 11, 5 17 有以下程序 #include int f(int n): main() int a=3, s; s=f(a); s=s+f(a); printf(“ d n“, s); ) int flint n) static int a=1; n+=a+: return n; 程序运行后的输出结果是 ( A) 9 ( B) 8 ( C) 7 ( D) 10 18 有以下程序 int f(int m) static int n=0; n+=m; return n; main() int n=0; printf(“ d“, f(+n); printf(“

11、d n“, f(n+); ) 程序运行后的输出结果是 ( A) 1, 1 ( B) 1,2 ( C) 2, 3 ( D) 3, 3 19 有以下程序 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 (

12、C) 1098765 ( D) 345678 20 有以下程序 #include void fun(int a, int b) mt 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 10; i+=2) fun(ci, ci+1); for(i=0; i 10; i+) printf(“ d, “, ci); printf(“ n“); 程序的运行结果是 ( A) 2, 1, 4, 3, 6, 5, 8, 7, 0, 9, ( B) 0, 9, 8, 7, 6, 5, 4, 3, 2, 1

13、, ( C) 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, ( D) 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 21 若要求定义具有 10个 int型元素的一维数组 a,则以下定义语句中错误的是 ( A) #define n 5 int a2*n; ( B) int a5+5; ( C) #define N 10 int aa; ( D) int n=10, an; 22 有下列程序: #include void fun(int*a, int n) *fun函数的功能是将 a所指数组元素从大到小排序 * int t, i, j; for(i=0; i n-1;

14、j+) for(j=i+j n; j+) ifai #include void main() char str20=“One*World“, “One*Dreamt“), *p=str1; print!(“ d, “, strlen(p); print!(“ s n“, p); ) 程序运 行后的输出结果是 ( A) 9, One*Dream! ( B) 10, One*Dream! ( C) 9, One*World ( D) 10, One*World 36 下列语句组中,正确的是 ( A) char*s: s=“Olympic“; ( B) char s7; s=“Olympic“; (

15、 C) char*s; s=“Olympic“; ( D) char s7; s=“Olympic“; 37 以下能正确定义字符串的语句是 ( A) char str=“ x43“; ( B) char str=“ 0“: ( C) char str=“: ( D) char str= 064); 38 有以下程序 #include main() char s=“abcde“; s+=2; printf(“ d n“, s0); 执行后的结果是 ( A)输出字符 c的 ASCII码 ( B)输出字符 c ( C)输出字符 a的 ASCII码 ( D)程序出错 国家二级 C语言机试(函数和数组)

16、模拟试卷 2答案与解析 一 、选择题 1 【正确答案】 A 【试题解析】 C语言规定,函数必须先定义,后调用 (函数的返回值类型为 int或char时除外 )。在选项 A)中,调用的子函数在调用后面定义,所以不正确。在选项B)、 C)中,被调用函数在主函数之前定义,再在主函数中调用,所以是正确的;在选项 D)中,在主函数中先对子函数 float fun(int i,int j)进行了声明,然后进行调用。 【知识模块】 函数和数组 2 【正确答案】 C 【试题解析】 字符串连接函数 strcat(p, r)的功能是把字符数组 p和 r连接起来,此时字符数组 p的有效字符长度为 9,再执行 str

17、cpy(p+strlen(q), q)字符串复制函数,把字符数组 q复制到字符数组 p从 p3开始到 p5数组位置中,由于字符数组 q中的内容为字符串 “abc”复制时把字符串结束标志 null也复制到字符数组 p中,这时字符函数 strlen(p)返回字符数组 p的有效字符长度为 6。 【知识模块】 函数和数组 3 【正确答案】 C 【试题解析】 本题要注意的是转义字符的问题,在字符串 s2中,有两个转义字符,分 别是回车换行符和反斜线。所以其字符串长度等于 5。 【知识模块】 函数和数组 4 【正确答案】 A 【试题解析】 函数形、实参传递的时候,要求对应位置类型一致即可,如果实参为函数名

18、,可以定义相应的形参为指向函数的指针变量来获得该函数的入口地址,因此选项 B)错误的,在 C语言中允许进行递归调用,即自己调用自己,选项C)和选项 D)是错误的。 【知识模块】 函数和数组 5 【正确答案】 B 【试题解析】 由函数 int fun(int*p)return*p; 的定义可知,返回值为整型指 针变量 p所指向的数据。 【知识模块】 函数和数组 6 【正确答案】 C 【试题解析】 在语句 “k=*f(a,b)”中,由于 “()”的优先级高于 “*”,所以 “*f(a,b); ”表示其返回类型为指针的带有两个整型参数的函数,而不是整型数值,因此选项 C)为错误的调用形式。 【知识模

19、块】 函数和数组 7 【正确答案】 B 【试题解析】 在函数定义的静态变量,只需要赋值 1次,即可保存初始值,不需要每次调用时都赋初始值。 【知识模块】 函数和数组 8 【正确答案】 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。 【知识模块】 函数和数组 9 【正确答案】 C 【试题解析】 函数 fun中采用了变量作为参数,那么参数传递以后,形参 a,b,c的变化对于实参 a,b,c是没有影响的,因此主函数中 a,b,c的值经过 f

20、un调用以后,值没有变化。 【知识模块】 函数和数组 10 【正确答案】 D 【试题解析】 函数 fun的主要功能是: 初值 x的值为 9,因此 fun(9)=9 fun(7)=9-(7-(5-(3-3),因此答案为 7。 【知识模块】 函数和数组 11 【正确答案】 A 【试题解析】 C语言中形参数组是指针变量,其数组中元素的个数由传递的实参数组决定,因此可以在定义的时候,不给出元素个数的说明,因此选项 B)和 D)形参均为指针变量,选项 A)的定义在 C语言中不存在的。 【知识模块】 函数和数组 12 【正确答案】 B 【试题解析】 在字符串中字符 0表示字符串的结束标志,所以字 符串 a

21、和 b相连接的结果为 ABCDIJK。 【知识模块】 函数和数组 13 【正确答案】 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,返回 88 a2不成立,返回 a2的值为 9 因此函数 f的主要功能为计算数组中的最大值。主函数中输出最大值为 9。 【知识模块】 函数和数组 14 【正确答案】 C 【试题解析】 代码考查点为全局变量和局部变量的同名问题,若全局变量和某

22、个函数中的局部变量同名,则在该函数中,此全局变量被屏蔽,在该函数内,访问的是局部变量,与同名的全局变量不发生任何关系。主函数执行 fun(3)时候,执行调用函数 fun,使用局部变量 d=5,执行 d+=p+,相当于 d=d+(p+),得到 d的值为 8,输出。函数调用结束,转到主函数,继续执行 d+=a+,此时 d为全局变量,执行语句以后, d值为 4。 【知识模块】 函数和数组 15 【正确答案】 B 【试题解析】 在 fun1()函数之前定义了全局字符变量 a和 b。这两个变量的作用域是从其定义处到整个程序结束。在 fun1()函数之内定义了两个变量 a和 b,并且分别初始化为字符 C和

23、 D。在 C语言中,若全局变量和某个函数中的局部变量同名,则在该函数中此全局变量被屏蔽,在该函数内访问的是局部变量,与同名的全局变量不发生任何关系。所以在主函数中,执行 fun1()后,变量 a、 b的值分别等于 C、 D,打印输出 CD,接着执行 fun2(E, F)语句,变量 a、 b的值变为E、 F并输出。 【知识模块】 函数和数组 16 【正确答案】 B 【试题解析】 子函数 fun(int x, int y),将变量 m和 i声明为局部静态变量,因此第 1次调用主函数后,局部静态变量 m和 i的值为 5和 3,第 1次函数调用结束时,它们的值不释放保持不变,所以第 2次调用时,局部静

24、态变量 m和 i的初始值分别为 5和 3,即在执行 “i+=na+1”时, i的值为 9,因此最终 m的值为 11。 【知识模块】 函数和数组 17 【正确答案】 A 【试题解析】 在主函数中第一次调用 f(a)时,得到 变量 s的值等于 4,在第二次调用 f(a)时,在子函数 f中由于变量 a是一个局部静态变量,所以这次其值等于2,因而在主函数中第二次调用 f(a)后,其返回值等于 5,最后变量 s的值等于 9。 【知识模块】 函数和数组 18 【正确答案】 B 【试题解析】 由于在函数 f中,变量 n为静态局部变量,所以在主函数中第一次调用函数 f后,变量 n的值等于 1,当第二调用函数

25、f时,在函数 f的内部静态局部变量 n的值仍然保留等于 l,所以返回函数值等于 2。 【知识模块】 函数和数组 19 【正确答案】 B 【试 题解析】 函数 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。所在循环语句中输出从第 2 7个数组元素时,其值分别为 321678。 【知识模块】 函数和数组 20 【正确答案】 C 【试题解析】 C语言规定,实参变量对形参变量的数据传递是

26、 “值传递 ”,即单向传递,只由实参传给形参,而不能由形参传回 来给实参。在调用函数时,给形参分配存储单元,并将实参对应的值传递给形参,调用结束后,形参单元被释放,实参单元仍保留并维持原值。由此可知,在本题中,函数 fun(int a, intb)的功能是实现形参整形变量 a和 b值的互换。当在主函数中调用 fun(ci, ci+1)时,把实参变量 ci和 ci+1的值赋给形参变量 a和 b,执行完函数 fun(ci, ci+1)时,形参变量 a和 b的值发生了互换,实参变量 ci和 ci+1的值并没有发生互换,所以输出的值为 1, 2, 3, 4, 5, 6, 7, 8, 9, 0。 【知识

27、模块】 函数和数组 21 【正确答案】 D 【试题解析】 在 C语言中,定义一维数组的语句形式为:类型名数组名【整型常量表达式】。在选项 D)中, n是一个整型的变量。 【知识模块】 函数和数组 22 【正确答案】 A 【试题解析】 fun()函数的功能是对数组 a的元素从大到小进行排序。所以在主函数执行。 fun(c+4,6)语句时,将从数组 c的第 5个元素开始的后 6个元素进行从大到小排序。排序之后,数组 c的内容变为 1,2,3,4,9,8,7,6,5,0。 【知识模块 】 函数和数组 23 【正确答案】 C 【试题解析】 当系统为所定义的数组在内存中开辟一串连续的存储单元时,这些存储

28、单元中并没有确定的值,可以在定义语句中为所定义数组的各个元素赋初值。 数组初始化赋值是指在数组定义时给数组元素赋予初值。初始化赋值的一般形式为:类型说明符数组名 常量表达式 =值,值,值 ;需要注意的是当所赋初值多于所定义数组的元素个数时,在编译时将给出出错信息,在指定初值时,第一个初值必定赋给下标为 0的元素,然后按这些数值的排列顺序赋初值,只能给元素逐个赋值,不能 给数组整体赋值。如果给全部元素赋值,则在数组说明中,可以不给出数组元素的个数。 【知识模块】 函数和数组 24 【正确答案】 C 【试题解析】 主函数中利用 for循环访问字符串的每一个字符,判断当前字符是否为空格,如果是空格则

29、删除。因此删除字符串 “How are you!“中空格以后,字符串为 Howareyou!。 【知识模块】 函数和数组 25 【正确答案】 B 【试题解析】 二维数组的初始化有以下几种形式: 分行进行初始化; 不分行的初始化; 部分数组元素初始化; 省略第 一维的定义,不省略第二维的定义。在选项 A)中赋值号左边定义了一个 3行 2列的二维数组,而右边用 2行 3列的数字进行赋初值。所以出现了边界的越界溢出而出错。 【知识模块】 函数和数组 26 【正确答案】 D 【试题解析】 在选项 D)的数组定义中,赋值号左边定义了一个 2行 4列的二维数组,而在右边定义了一个 3行 2列的二维数组。

30、【知识模块】 函数和数组 27 【正确答案】 B 【试题解析】 最外层的 for语句的自变量 i是列下标,而内部的两个 for语句的自变量 j和 k是行下标。所以由程序段 可知,这是利用三重循环对二维数组 a44的元素按列从小到大进行排序, 所以最后排完序的结果为 a44=1, 4,2, 1,3, 6, 3, 2), 4, 7, 5, 5, 8, 8, 6, 7),最后一个 for语句的功能是输出数组 a44主对角线上的元素,因而输出为 1, 6, 5, 7。 【知识模块】 函数和数组 28 【正确答案】 C 【试题解析】 在 C语言中,二维数组的名字表示的是二维数组的地址,对于二维数组 in

31、l w35,可以认为 w为一个一维数组,含有 3个元素,而每个元素为 一个含有 5个元素的一维数组。而 (w+1)为一个含有两个元素的一维数组,首先和(w+1)4结合非法, 4超出了二维数组的边界,取值也就是非法的了。 【知识模块】 函数和数组 29 【正确答案】 B 【试题解析】 二维数组的元素在内存中占一系列连续的存储单元。数组元素在内存中的排列顺序是先存放第 0行的元素,再存放第 1行的元素 称这种存放顺序为按行存放。可以把一个二维数组看成是一个一维数组,每个数组元素又是包含有若干个元素的一维数组。另外在给二维数组赋初值时可以不用含花括号对。例如, inta43=1, 2, 4, 5;在

32、编译时,系统将按 a数组元素在内存中排列的顺序,将花括号内的数据一一对应地赋给各个元素,若数据不足,系统将给后面的元素自动补初值 0。以上将给 a数组第一行的元素和第二行的第一个元素依次赋予 1、 2、 4、 5,其他元素的初值都为 0。 【知识模块】 函数和数组 30 【正确答案】 C 【试题解析】 两个连续的双引号: “,是一个字符串常量,称为 “空串 ”。 【知识模块】 函数和数组 31 【正确答案】 A 【试题解析】 程序段中定义指针数组 *strp,含有 4个元素, for循环 strp分别保存了二维数组 str中的 4个字符串的首地址,因此 strp为二级地址,不能保存字符串的首地

33、址, *strp或者 strp0中存放了字符串 “aa“的首地址。所以不能正确引用字符串的为选项 A)。 【知识模块】 函数和数组 32 【正确答案】 D 【试题解析】 C语言中没有运算符可以处理字符串,要调用 “string库中的函数来处理字符串,其中 strlen函数主要测试字符串中实际字符的个数,比实际占用的内存至少要少一个。 Strcat(s1, s2)函数用于连接两个字符串, 是把字符串 s2连接到 s1的后面。 【知识模块】 函数和数组 33 【正确答案】 B 【试题解析】 sizeof主要用于测试变量所占的实际内存,而 strlen函数主要测试字符串中实际字符的个数,字符串 “H

34、ello“占有内存 6个字节,而字符串中共有 5个字符。 【知识模块】 函数和数组 34 【正确答案】 A 【试题解析】 这个程序的执行过程是当 i=0时, j=1, a00=o a10=t;不置换;当 i=1时, j=2,a10=t=a20=t;不置换;当 i=2时, j=3, a20=ta30=f;置换 a20=f, a30=t;此时, a20=f, a10=t,再置换a20=t, a10=f:当 i=3时, j=4, a30=f=a430=f;不置换:所以 a1的结果为 fwo。 【知识模块】 函数和数组 35 【正确答案】 B 【试题解析】 在主函数中定义了二维字符数组 str,并对它

35、赋初值。定义字符指针 p,并把字符串 str1的地址赋给它。所以这时字符指针 p指向字符串“One*Dream!”,然后在两个输出语句中,分别输出这个字符串的长度 10和字符串本身。 【知识模块】 函数和数组 36 【正确答案】 A 【试题解析】 选项 A)中定义了指针变量 s,通过赋值语句保存字符串常量的地址,而字符数组绝对不能赋值,而只能初始化或者输入。 【知识模块】 函数和数组 37 【正确答案】 B 【试题解析】 字符串常量是用一对双括号括起来的一串字符。它用字符数组来存放,不用一对大括号对括起来。 【知识模块】 函数和数组 38 【正确答案】 D 【试题 解析】 因为字符数组 s中的数组名 s表示的是一个地址常量。所以语句“s+=2: ”不能将指针在当前位置的基础上再向后移动两位。因而程序编译时出错。 【知识模块】 函数和数组

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

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

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