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

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

1、国家二级 C语言(函数和数组)机试模拟试卷 9及答案与解析 一、选择题 1 有以下程序 #include string h 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 2 下列选项中,能够满足 “只要字符串 s1等于字符串 s2,则执行 ST”要求的是 ( A) if(s1=s2)ST; ( B) if(strcpy(s1, s2)

2、=1)ST; ( C) if(strcmp(s2, s1)=0)ST; ( D) if(s1-s2=0)ST; 3 avg函数的功能是求整型数组中的前若干个元素的平均值,设数组元素个数最多不超过 10,则下列函数说明语句错误的是 ( A) int avg(int *a, int n); ( B) int avg(int a10, int n); ( C) int avg(int a, int n); ( D) int avg(int a, int n); 4 以下叙述中错误的是 ( A)用户定义的函数中可以没有 return语句 ( B)用户定义的函数中若没有 return语句,则应当定义函数

3、为 void类型 ( C)用户定义的函数中可以有多个 return语句,以便可以调用一次返回多个函数值 ( D)函数的 return语句中可以没有表达式 5 以下程序的主函数中调用了其前面定义的 fun函数 #include stdio h main() double a15, k; k=fun(a); 则以下选项中错误的 fun函数首部是 ( A) double fun(double a15) ( B) double fun(double*a) ( C) double fun(double a) ( D) double fun(double a) 6 有以下程序 int f(int x);

4、main()int n=1, m; m=f(f(f(n); pfintf(“ dhn“, m); int f(int x) retum x*2; 程序运行后的输出结果是 ( A) 1 ( B) 2 ( C) 4 ( D) 8 7 有以下程序 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, d n“, c, b, a); 程序运行后的输出结果是 ( A) 10, 20, 30 ( B) 20, 30, 10 ( C) 30, 20, 10 (

5、 D) 0, 0, 0 8 以下程序函数 f的功能是:当 flag为 1时,进行由小到大排序;当 flag为 0时,进行由大到小排序 void flint b, int n, int flag) main() int i, j, t; int a10=5, 4, 3, 2, 1, 6, 7, 8, 9, 10, i; for(i=0; i n-1; i+) f(&a2, 5, 0); f(a, 5, 1); for(j=i+1; j n; +) for(i=0; i 10; i+)printf(“ d, “, ai); if(flag?bi bj: bi bj) t=bi; bi=bj; bj

6、=t; 程序运行后的输出结果是 ( A) 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ( B) 3,4, 5, 6, 7, 2, 1, 8, 9, 10, ( C) 5,4, 3, 2, 1, 6, 7, 8, 9, 10, ( D) 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 9 以下选项中函数形参不是指针的是 ( A) fun(int&p) ( B) fun(int a10) ( C) fun(int*a) ( D) fun(int p) 10 有以下程序 fun(int x) main() int p; if(x=0|x=1)return(3); pr

7、intf(“ d n“, fun(7); p=x-fun(x-2); return p; 执行后的输出结果是 ( A) 3 ( B) 7 ( C) 0 ( D) 2 11 有以下程序 int d=1; void fun(int p) main()int a=3: int d=5: fun(a); d+=p+; d+=a+; printf(“ d“, d); printf(“ d n“, d); 程序的输出结果是 ( A) 9 6 ( B) 9 4 ( C) 8 4 ( D) 8 5 12 有以下程序 #include stdio h func(int n) void main() static

8、 int num=1; func(3); func(4); printf(“ n“); num=num+n; printf(“ d“, num); 程序运行后的输出是 ( A) 4 5 ( B) 3 5 ( C) 4 8 ( D) 3 4 13 有以下程序 #include stdio h int fun()static int x=1; main()int i, s=1; x+=1; for(i=1; i =5; i+)s+=fun(); return x; printf(“ d n“, s); 程序运行后的输出结果是 ( A) 11 ( B) 21 ( C) 6 ( D) 120 14 已

9、有定义: char a=“xyz“, b=x, y, z);,以下叙述中正确的是 ( A)数组 a和 b长度相同 ( B) a数组长度小于 b数组长度 ( C) a数组长度大于 b数组长度 ( D)上述说法都不对 15 以下能正确定义一维数组的选项是 ( A) int a5=0, 1, 2, 3, 4, 5; ( B) char a=0, 1, 2, 3, 4, 5; ( C) char a=A, B, C; ( D) int a5=“0123“; 16 有下列程序: main() int i, s=0, t=1, 2, 3, 4, 5, 6, 7, 8, 9; for(i=0; i 9; i

10、+=2)s+=*(t+i); printf(“ d n“, s); 程序执行后的输出结果是 ( A) 20 ( B) 45 ( C) 36 ( D) 25 17 有下列程序: #include stdio h *fun函数的功能是将 a所指数组元素从大到小排序 * void fun(int*a, int n) main() int t, i, j; int c10=1, 2, 3, 4, 5, 6, 7, 8, 9, 0, i; for(i=0; i n 1; i+) fun(c+4, 6); for(j=i+1; j nj+) for(i=0; i 10; i+)printf(“ d, “,

11、 ci); if(ai aj)t=ai; ai=aj; aj=t; printf(“ n“); 程序的运行结果是 ( A) 1, 2, 3, 4, 9, 8, 7, 6, 5, 0, ( B) 0, 9, 8, 7, 6, 5, 1, 2, 3, 4, ( C) 0, 9, 8, 7, 6, 5, 4, 3, 2, 1, ( D) 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 18 有以下程序 #include stdio h main() int a=10, 20, 30, 40, *p=a, i; for(i=0; i =3; i+)ai=*p; p+; printf(“ d

12、 n“, a2); 程序运行后的输出结果是 ( A) 20 ( B) 30 ( C) 10 ( D) 40 19 若有以下说明和语句 int c45, (*p)5; p=c; 能够正确引用 c数组元素的是 ( A) p+1 ( B) *(p+3) ( C) *(p+1)+3 ( D) *(p0+2) 20 以下数组定义中错误的是 ( A) int x3=0; ( B) int x231=1, 2, 3, 4, 576; ( C) int x3=1, 2, 3, 4, 5, 6; ( D) int x23=1, 2, 3, 4, 5, 6; 21 有以下程序 #include stdio h i

13、nt fun(int(*s)4, int n, int k) int m, i; m=s0k; for(i=1; i n; i+)if(sik m)m=sik; return m; ) main() int a44=1, 2, 3, 4), 11, 12, 13, 14, 21, 22, 23, 24, 31, 32,33, 34; printf(“ d n“, fun(a, 4, 0); 程序的运行结果是 ( A) 31 ( B) 34 ( C) 4 ( D) 32 22 以下错误的定义语句是 ( A) int x43=1, 2, 3, 1, 2, 3), 1, 2, 3, 1, 2, 3)

14、; ( B) int x3=0, 1, 1, 2, 3; ( C) int x3=1, 2, 3, 4; ( D) int x4=1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3; 23 下面是有关 C语言字符数组的描述,其中错误的是 ( A)不可以用赋值语句给字符数组名赋字符串 ( B)可以用输入语句把字符串整体输入给字符数组 ( C)字符数组中的内容不一定是字符串 ( D)字符数组只能存放字符串 24 若有以下程序段 char str412=“aa“, “bbb“, “ccccc“, “d“), *strp4; int i; for(i=0; i 4; i+)strpi

15、=stri;不能正确引用字符串的选项是 ( A) strp ( B) str0 ( C) strp3 ( D) *strp 25 以下叙述中正确的是 ( A)语句 “char str10=“string?“; ”和 “char str10=“string!“); ”并不等价 ( B)对于一维字符数组,不能使用字符串常量来赋初值 ( C)对于字符串常量 “string?”,系统己自动在最后加入了 “ 0”字符,表示串结尾 ( D)在语句 char str=“string!“;中,数组 str的大小等于字符串的长度 26 设有定义: char s81; int i=0;以下不能将一行 (不超过 8

16、0个字符 )带有空格的字符串正确读入的语句或语句组是 ( A) while(si+=getchar()!=2n); si= 0; ( B) scanf(“ s“, s); ( C) gets(s); ( D) doscanf(“ c“, &si); while(si+!= n); si= 0; 27 下列语句组中,正确的是 ( A) char*s; s=“Olympic“; ( B) char s7; s=“Olympic“; ( C) char*s; s=“Olympic“; ( D) char s7; s=“Olympic“; 28 若要求从键盘读入含有空格字符的字符串,应使用函数 ( A

17、) getc() ( B) gets() ( C) getchar() ( D) scanf() 国家二级 C语言(函数和数组)机试模拟试卷 9答案与解析 一、选择题 1 【正确答案】 C 【试题解析】 字符串连接函数 stxcat(p, r)的功能是把字符数组 p和 r连接起来,此时字符数组 p的有效字符长度为 9,再执行 strcpy(p+strlen(q), q)字符串复制函数,把字符数组 q复制到字符数组 p从 p3开始到 p5数组位置中,由于字符数组 q中的内容为字符串 “abc”复制时把字符串结束标志 null也复制到字符数组 p中,这时字符函数 strlen(p)返回字符数组 p

18、的有效字符长度为 6。 【知识模块】 函数和数组 2 【正确答案】 C 【 试题解析】 在 C语言中要对两个字符串的大小进行比较,就需要调用字符串比较函数 strcmp(),如果这个函数的返回值等于 0,说明两个字符串相等。 【知识模块】 函数和数组 3 【正确答案】 D 【试题解析】 本题考查函数的定义。题目要求计算数组的平均值,因此函数必须获取数组的地址 (指针 ),即函数必须要有一个指针类型的参数,选项 D)中函数参数都是整型,错误。 【知识模块】 函数和数组 4 【正确答案】 C 【试题解析】 函数值通过 return语句返回, return语句的形式如下: return表达式或 re

19、turn(表达式 );当程序执行到 return语句时,程序的流程就返回到调用该函数的地方,并带回函数值。在同一函数内。可以根据需要,在多处出现return语句,在函数体的不同部位退出函数。无论函数体中有多少个 return语句, return语句只可能执行一次,返回一个函数值。 return语句中也可以不含有表达式,这时必须定义函数为 void类型,它的作用只是使流程返回到调用函数,并没有确定的函数值:函数体内可以没有 return语句,这时也必须定义函数为void类型,程序的流程就一直执行到函 数末尾的 “”,然后返回调用函数,也没有确定的函数值带回。 【知识模块】 函数和数组 5 【正确

20、答案】 D 【试题解析】 本题考查函数的定义和调用。根据对 fun函数的调用可知, fun函数的返回值为 double类型的,输入参数是一个 double类型的地址 (指针 ),因此选项 D)错误。 【知识模块】 函数和数组 6 【正确答案】 D 【试题解析】 程序考查了函数的调用。对于 m=f(f(f(n);首先计算最内层的函数调用 f(n),执行 f函数,得到返回值 2,然后计算 f(2),得到返 回值为 4最后计算 f(4),得到计算结果为 8。 【知识模块】 函数和数组 7 【正确答案】 C 【试题解析】 函数 fun中采用了变量作为参数,那么参数传递以后,形参 a,b, c的变化对于

21、实参 a, b, c是没有影响的,因此主函数中 a, b, c的值经过 fun调用以后。值没有变化。 【知识模块】 函数和数组 8 【正确答案】 B 【试题解析】 本题主要考查函数的调用。在 main函数中,两次调用 f函数进行排序, f函数有三个参数,第一个参数是数组地址,第二个参数是需要排序的数据个数,第三个参 数指定排序依据。第一次调用 f函数的时候,从第三个元素开始对5个元素进行从大到小的排序,因此调用 f函数转换数组 a的值分别为: 5, 4,7, 6, 3, 2, 1, 8, 9, 10;第二次调用 f函数对数组 a的前 5个元素进行从小到大的排序,因此排序完成后数组 a的值变成:

22、 3, 4, 5, 6, 7, 2, 1, 8, 9, 10。 【知识模块】 函数和数组 9 【正确答案】 A 【试题解析】 C语言中形参数组是指针变量,其数组中元素的个数由传递的实参数组决定,因此可以在定义的时候,不给出元素个数的说明,因此选项 B)和 D)形参均为指 针变量,选项 A)的定义在 C语言中不存在的。 【知识模块】 函数和数组 10 【正确答案】 D 【试题解析】 因为在函数 fun(int x)中,如果参数 x等于 0或等于 1时,返回值为 “3”。否则 “p=x-fun(x-2)”这是一个递归函数 t所以在主函数调用 fun(7)的时候,其过程为: “fun(7)=7-fu

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

24、 4。 【知识模块】 函数和数组 12 【正确答案】 C 【试题解析】 在函数 func(intn)中定义了局部静态变量 num,其初始值等于1,所以在主函数中执行 func(3),输出 4,此时静态变量 num的值等于 4,当退出函数 func(3)时,其值不会丢夫,所以当在执行 func(4)时输出 8。 【知识模块】 函数和数组 13 【正确答案】 B 【试题解析】 这道试题主要考查了局部静态变量的应用。在函数 fun()中定义了局部静态变量整型 x,其初值等于 1,在主函数中循环执行 5次,第一次变量 s的值等于 3变量 x的值等于 2,第二次变量 s的值等于 6,变量 x的值等于 3

25、,第三次变量 s的值等于 10,变量 x的值等于 4,第四次变量 s的值等于 15,变量 x的值等于 5,第五次变量 s的值等于 21,变量 x的值等于 6。 【知识模块】 函数和数组 14 【正确答案】 C 【试题解析】 本题考查字符数组的定义。 char“a=“xyz“, b=x, y, z; ”定义了两个字符数组 a和 b, a数组存放的是一个字符串,字符串以 “ 0”作为结束标志,数组 a的长度必须加上结束符长度 1,因此数组 a的长度为 4。数组 b中有三个元素,长度为 3。 【知识模块】 函数和数组 15 【正 确答案】 B 【试题解析】 本题考查一维数组的定义, C语言中一维数组

26、的定义方式为:类型说明符 数组名 常量表达式 ;。 选项 A)定义的数组长度为 5,大括号里面的元素个数为 6,超过数组长度,错误;选项 B)正确,编译器会根据初始化元素的个数自动计算数组的长度。选项 C)中没有使用 “”,不能定义一维数组:选项 D)中数组元素的初始化必须使用大括号。 【知识模块】 函数和数组 16 【正确答案】 D 【试题解析】 本题在主函数中定义了一维整型数组 t=1, 2, 3, 4, 5, 6, 7,8, 9; 然后在 for循环语句中自变量 i从 0开始,每次自加 2,执行 s+=*(t-i)语句,因为 C语言规定数组名代表数组的首地址,也就是第一个元素的地址。因此

27、*(t+i)代表数组的第 i+1个元素。所以程序运行的结果是 1-3+5+7-9=25,即变量 s的值等于 25。 【知识模块】 函数和数组 17 【正确答案】 A 【试题解析】 fun()函数的功能是对数组 a的元素从大到小进行排序。所以在主函数执行 fun(c+4, 6)语句时,将从数组 c的第 5个元素开始的后 6个元素进行从大到小排序。排序之后,数组 c的内 容变为 1, 2, 3, 4, 9, 8, 7, 6, 5, 0。 【知识模块】 函数和数组 18 【正确答案】 B 【试题解析】 因为指针变量 p的初始值指向数组 a,所以执行 for循环语句后,数组 a中的元素的值不变。 【知

28、识模块】 函数和数组 19 【正确答案】 D 【试题解析】 本题考查数组和指针,在本题中 c是二维数组,指针 p指向二维数组 c, p其实是指向 c数组的第一行。因此选项 A)中 p+1指向 c数组的第二行;选项 B)中, p+3表示 p指向 c数组的第三行,因此 *(p+3)表示取出 c数组第三行首 元素的地址:选项 C)和选项 B)类似,表示取出数组 c第二行首元素地址然后加 3;选项 D)中 p0+2表示数组第一行第三列元素的地址,因此 *(p0+2)是取出该元素的值。 【知识模块】 函数和数组 20 【正确答案】 B 【试题解析】 二维数组的初始化有以下几种形式: 分行进行初始化; 不

29、分行的初始化; 部分数组元素初始化; 省略第一维的定义,不省略第二维的定义。在选项 A)中赋值号左边定义了一个3行 2列的二维数组,而右边用 2行 3列的数字进行赋初值。所以出现了边界的越界溢出而出错。 【知识模块】 函数和数组 21 【正确答案】 A 【试题解析】 函数 fun(int(*s)4, int n, int k)的功能是返回二维数组第 k列的最大元素。在主函数中由于二维数组 a44已经初始化所以 fun(a, 4, 0)的值是二维数组 a第 1列中的最大元素 31。 【知识模块】 函数和数组 22 【正确答案】 D 【试题解析】 一维数组定义和初始化是允许省略行下标,不允许省略列

30、下标。 【知识模块】 函数和数组 23 【正确答案】 D 【试题解析】 本题考查字符数组。选项 A)、 B)和 C)都是正确的,字符数组存放其他数据。 【知识模块】 函数和数组 24 【正确答案】 A 【试题解析】 程序段中定义指针数组 *strp,含有 4个元素, for循环 stro分别保存了二维数组 str中的 4个字符串的首地址,因此 strp为二级地址,不能保存字符串的首地址, *strp或者 strp0中存放了字符串 “aa“的首地址。所以不能正确引用字符串的为选项 A)。 【知识模块】 函数和数组 25 【正确答案】 C 【试题解析】 在 C语言中,字符串 是借助于字符型一维数组

31、来存放的,可以借助在定义时初始化以及输入来把字符串存入数组,并规定以字符 0作为 “字符串结束标志 ”。 0是一个转义字符,称为空值,它的 ASCII码值为 0。 0作为标志占用存储空间,但不计入字符串的实际长度。在 C语言中,系统在每个字符串的最后自动加入一个字符 ( 0)作为字符串的结束标志。 【知识模块】 函数和数组 26 【正确答案】 B 【试题解析】 本题考查标准输入输出函数和循环语句。 gets(s)函数的作用是将输入的字符读入字符串 s。直到遇到回车。而 scanf()函数接收字符串时的结束标志为回车或者空格。 【知识模块】 函数和数组 27 【正确答案】 A 【试题解析】 选项

32、 A)中定义了指针变量 s,通过赋值语句保存字符串常量的地址,而字符数组绝对不能赋值,而只能初始化或者输入。 【知识模块】 函数和数组 28 【正确答案】 B 【试题解析】 scanf()m语句中用 “空格 ”间隔不同的字符串,空格将被全部忽略掉,所以用 scanf()函数不能输入空格; getchar()函数用于输入字符,其调用形式为: ch=getchar(), getchar()函数从终端读入一个字符作为函数值,把读入的一个字符赋给变量 ch。在输入时,空格、回车符都将用于字符读入,而且只有在用户敲入 Enter键时,读入才开始执行。 getS()函数的调用形式为: gets(str_adr),其中 str_adr是存放输入字符串的起始地址,可以是字符数组名、字符数组元素的地址或字符指针变量。 gets()函数用来从终端键盘读入字符串 (包括空格符 ),直到读入一个换行符为止。 getc()函数的调用形式为: ch=getc(pf)其中 pf是文件指针。函数的功能是从 pf指定的文件中读入 一个字符,并把它作为函数值返回。 【知识模块】 函数和数组

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

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

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