1、二级 C 语言-循环结构、数组(二)及答案解析(总分:74.00,做题时间:90 分钟)一、B选择题/B(总题数:34,分数:34.00)1.下面程序输出的结果是_。main() int i;int a33=1,2,3,4,5,6,7,8,9;for(i=0; iprintf(“% d“, a2-ii); A.1 5 9 B.7 5 3 C.3 5 7 D.5 9 1(分数:1.00)A.B.C.D.2.以下数组定义错误的是_。 A.int x3=0; B.int x23=1,2, 3,4, 5,6; C.int x3=1,2,3, 4, 5,6; D.int x3=1,2,3,4,5,6;(
2、分数:1.00)A.B.C.D.3.以下能正确定义数组并正确赋初值的选项是_。 A.int N =5,bNN; B.int a12 = 1, 3; C.int c2=1,2, 3,4; D.int d32=1,2, 3,4;(分数:1.00)A.B.C.D.4.以下能对二维数组 a 进行正确初始化的选项是_。 A.int a2=1,0,1, 5,2,3; B.int a3=1,2,3, 4,5,6; C.int a24=1,2,3, 4,5,6; D.int a3=1,0,1, , 1,1;(分数:1.00)A.B.C.D.5.已知 int 类型的变量占 4 个字节有下面的程序段:main()
3、 int a3=1,2,3, 4,5, 6, (8;printf(“% d“, sizeof(9);则程序段的输出结果是_。 A.12 B.24 C.48 D.64(分数:1.00)A.B.C.D.6.有以下程序:main()int m3=1,4,7,2,5,8,3,6,9;int i, j, k=2;for(i=0; i3; i+) printf(“% d“, mki);执行后输出的结果是_。 A.4 5 6 B.2 5 8 C.3 6 9 D.7 8 9(分数:1.00)A.B.C.D.7.已知字母 A 的 ASCII 码是 65,则有下面的程序段:#include stdio.hmain
4、() char c5=65, 66, 67, 68, 69;int i;for (i=0; i=4; i+)printf(“% c“, ci);则程序段的输出结果是_。 A.1 2 3 4 B.0 1 2 3 C.A B C D D.65 66 67 68(分数:1.00)A.B.C.D.8.下面程序输出的结果是_。#include stdio.hmain() char c9=T, h, a, /0, k, , y, o, u;printf(“% s“, c); A.Thank you B.Thank C.Tha D.无输出(分数:1.00)A.B.C.D.9.以下程序的输出结果是_。char
5、 c5=a, b, /0, c, /0;printf(“% s“, c); A.a B.b C.ab D.abc(分数:1.00)A.B.C.D.10.下面程序输出的结果是_。#include stdio.hmain() char w10=“ABCD“, “EFGH“, “IJKL“, “MNOP“;for(k=1; k3; k+) printf(“% s“, A.ABCD FGH KL B.ABC EFG IJ M C.EFG JK 0 D.FGH KL(分数:1.00)A.B.C.D.11.以下程序的输出结果是_。main() char a=“abcdefg“, b10=“abcdefg“
6、;printf(“% d% d/n“, sizeof(a), sizeof(b); A.77 B.88 C.810 D.1010(分数:1.00)A.B.C.D.12.下面程序输出的结果是_。#include stdio.h#include string.hmain() char c20=T, h, a, /0, k, u, y, o, u;printf(“% d“, strlen(c); A.20 B.9 C.3 D.4(分数:1.00)A.B.C.D.13.s1 和 s2 已正确定义并分别表示两个字符串。若要求当 s1 所指字符串大于 s2 所指字符串时,执行语句 S,则以下选项中正确的是
7、_。 A.if(s1s2)S; B.if(strcmp(s1, s2)S; C.if(strcmp(s2, s1)0)S; D.if(strcmp(s1, s2)0)S;(分数:1.00)A.B.C.D.14.调用函数 strlen(“abcd/0ef/0g“)的返回值为_。 A.4 B.5 C.8 D.9(分数:1.00)A.B.C.D.15.有以下程序:#include stdio.h#include string.hmain() char a=a, b, c, d, e, f, g, h, /0;int i, j;i=sizeof(a); j=strlen(a);printf(“% d,
8、 % d/n“, i, j);程序运行后的输出结果是_。 A.9,9 B.8,9 C.1,8 D.9,8(分数:1.00)A.B.C.D.16.以下程序中函数 reverse()的功能是将 a 所指数组中的内容进行逆置存放。#include stdio.hvoid reverse(int a, int n) int i, t;for(i=0; in/2; i+) t=ai; ai=an-1-i; an-1-i=t;main() int b10=1,2,3,4,5,6,7,8,9,10; int i, s=0;reverse(b, 8);for(i=6; i10; i+)s+=bi;printf
9、(“% d/n“, s);则程序运行后的输出结果是_。 A.22 B.10 C.34 D.30(分数:1.00)A.B.C.D.17.有以下程序:main( int argc, char * argv) int n, i=0;while(argv1i!=/0) n=fun(); i+;printf(“% d/n“, n * argc);int fun() static int s=0;s+=1;return s;假设程序经编译、连接后生成可执行文件 exam.exe,若输入以下命令行 exam 123 回车则运行结果为_。 A.6 B.8 C.3 D.4(分数:1.00)A.B.C.D.18.
10、以下程序的输出结果是_。# include stdio, h# include string, hmain() char str12=s, t, r, i, n, g;printf(“% d/n“, strlen(str); A.6 B.7 C.11 D.12(分数:1.00)A.B.C.D.19.若有说明:int a34;,则对数组 a 元素非法引用的是_。 A.a02*1 B.a13 C.a4-20 D.a04(分数:1.00)A.B.C.D.20.若有说明:int a4=0,0;,则以下选项中,不正确的是_。 A.数组 a 的每个元素都可得到初值。 B.二维数组 a 的第一维大小为 1
11、C.因为二维数组 a 中初值的个数不能被第二维大小的值整除,则第一维的大小等于所得商数再加1,故数组 a 的行数为 1 D.只有元素 a00和 a01可得到初值 0,其余元素均得不到初值 0(分数:1.00)A.B.C.D.21.以下程序中有错误的一行是_。(1)main()(2)(3)int a3=1;(4)int i;(5)scanf(“% d“, (6)for(i=1; i3; i+) a0=a0+ai;(7)printf(“% f/n“, a0);(8) A.3 B.6 C.7 D.5(分数:1.00)A.B.C.D.22.若有说明:int a3=1,2,3,4,5,6,7;,则 a
12、数组第一维的大小是_。 A.2 B.3 C.4 D.无确定值(分数:1.00)A.B.C.D.23.若有数组定义:char array=“China“;,则数组 array 所占的空间为_。 A.4 个字节 B.5 个字节 C.6 个字节 D.7 个字节(分数:1.00)A.B.C.D.24.以下程序的输出结果是_。#include stdio.h#include string.hmain() char arr24;strcpy(arr, “you“); strcpy(arr1, “me“);arr03=printf( “% s/n“, arr); A.youfor(i=0; ik; i+)n
13、i=ni+i;printf(“% d/n“, nk);该程序的输出结果是_。 A.不定值 B.2 C.1 D.0(分数:1.00)A.B.C.D.26.以下程序的输出结果是_。#include stdio.hmain() int a33=1,2, 3,4, 5,6, i, j, s=0;for(i=1; i3; i+)for(j=0; ji; j+)s+=aij;printf(“% d/n“, s); A.14 B.19 C.20 D.21(分数:1.00)A.B.C.D.27.当执行以下程序时,如果输入 ABC,则输出结果是_。#include stdio.h#include string.
14、hmain() char ss10=“1,2,3,4,5“;gets(ss); strcat(ss, “6789“); printf(“% s/n“, ss); A.ABC6789 B.ABC67 C.12345ABC6 D.ABCA56789(分数:1.00)A.B.C.D.28.以下程序的输出结果是_。#include stdio.hf(int b, int m, int n) int i, s=0;for(i=m; in; i=i+2)s=s+bi;return s;main() int x, a=1,2,3,4,5,6,7,8,9;x=f(a,3,7);printf(“% d/n“,
15、x); A.10 B.18 C.8 D.15(分数:1.00)A.B.C.D.29.以下程序中函数 sort()的功能是对数组 a 中的数据进行由大到小的排序。#include stdio.hvoid sort (int a, int n) int i, j, t;for(i=0; in-1; i+)for(j=i+1; jn; j+)if(aiaj) t=ai; ai=aj; aj=t;main() int aa10=1,2,3,4,5,6,7,8,9,10, i;sort(for(i=0; i10; i+) printf(“% d,“, aai);printf(“/n“);程序运行后的输出
16、结果是_。 A.1,2,3,4,5,6,7,8,9,10, B.10,9,8,7,6,5,4,3,2,1, C.1,2,3,8,7,6,5,4,9,10, D.1,2,10,9,8,7,6,5,4,3,(分数:1.00)A.B.C.D.30.对两个数组 a 和 b 进行以下初始化:char a=“ABCDEF“;char b=A, B, C, D, E, F;则以下叙述正确的是_。 A.数组 a 与数组 b 完全相同 B.数组 a 与数组 b 长度相同 C.数组 a 与数组 b 中都存放字符串 D.数组 a 比数组 b 长度长(分数:1.00)A.B.C.D.31.有以下程序段:char a3
17、, b=“China“;a=b;printf(“% s“, a);则_。 A.运行后将输出 China B.运行后将输出 Ch C.运行后将输出 Chi D.编译出错(分数:1.00)A.B.C.D.32.判断字符串 s1 是否大于字符串 s2,应当使用_。 A.if(s1s2) B.if(strcmp(s1, s2) C.if(strcmp(s2, s1)0) D.if(strcmp(s1, s2)0)(分数:1.00)A.B.C.D.33.以下程序的输出结果是_。#include stdio.hmain() char ch7=“12ab56“;int i, s=0;for(i=0; chi
18、=0 i+=2)s=10*s+chi-0;printf(“% d/n“, s); A.1 B.1256 C.12ab56 D.1(分数:1.00)A.B.C.D.34.当运行以下程序时,从键盘输入:AhaMA空格Aha 回车,则程序的输出结果是_。#include stdio.hmain() char s80, c=a;int i=0;scanf(“% s“, s);while(si! =/0) if(si=c) si=si-32;else if(si=c-32) si=si+32;i+;puts (s); A.ahAMa B.AbAMa C.AhAMa空格ahA D.ahAMa空格ahA(分
19、数:1.00)A.B.C.D.二、B操作题/B(总题数:15,分数:40.00)35.以下程序的功能是:从键盘上输入若干学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入,请填空。试题程序#include stdio.hmain() float x, amax, amin;scanf(“% f“, amax=x; amin=x;while(_) if(xamax) amax=x;if(_) amin=x;scanf(“% f“, printf(“/namax=% f/n amin=% f/n“, amax, amin);(分数:5.00)填空项 1:_36.下列给定程序中函数 fu
20、n 的功能是:计算正整数 num 各位上的数字之积。例如,若输入 252,则输出应该是 20。若输入 202,则输出应该是 0。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main()函数,不得增行或删行,也不得更改程序的结构。试题程序#include stdio.h#include conio.hlong fun long num) /* * * * *found* * * * * /long k;do k*=num% 10;/* * * * *found* * * * * /num /=10;while(num);return(k);main() long n;printf(
21、“please enter a number:“);scanf(“% ld“, printf(“/n% ld/n“, fun(n);_37.请编写函数 fun(),其功能是:找出 2M 整型二维数组中最大元素的值,并将此值返回调用函数。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun()的花括号中填入你编写的若干语句。试题程序#define M 4#include stdio.hint fun(int aMvoid main() int arr2M=5, 8, 3, 45, 76, -4, 12, 82;printf(“max=% d/n“, fun
22、(arr);_38.下列给定程序中函数 fun 的功能是:计算并输出 high 以内最大的 10 个素数的和。high 的值由主函数传给 fun 函数。 例如,若 high 的值为 100,则函数的值为 732。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! #include conio.h #include stdio.h #include math.h int fun(int high) int sum=0, n=0, j, yes; /* * * * * * * * * *found* * * * * * * * *
23、* / while(high=2) for (j=2; j=high/2; j+) if(high% j=0) /* * * * * * * * * *found* * * * * * * * * * / yes=0; break if(yes) sum+=high; n+; high-; return sum; main() printf(“% d“, fun(100); _39.下列给定程序中,函数 fun()的功能是:计算以下公式前 n 项的和,并作为函数值返回。(分数:5.00)填空项 1:_40.给定程序中,函数 fun()的功能是:统计形参 s 所指的字符串中数字字符出现的次数,并
24、存放在形参t 所指的变量中,最后在主函数中输出。例如,若形参 s 所指的字符串为“abcdef35adgh3kjsdf7”,则输出结果为 4。请在标号处填入正确内容,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构。试题程序#include stdio.hvoid fun(char*s, int*t) int i, n;n=0;for(i=0; _!=0; i+)if(si=0_;main() char s80=“abcdef35adgh3kjsdf7“;int t;printf(“/nThe original string is:% s/n“, s);fu
25、n(s, printf(“/nThe result is:% d/n“, t);(分数:5.00)填空项 1:_41.请编写函数 fun(),该函数的功能是:统计各年龄段的人数。N 个年龄通过调用随机函数获得,并放入主函数的 age 数组中。要求函数把 09 岁年龄段的人数放在 d0中,把 1019 岁年龄段的人数放在 d1中,把 2029 岁年龄段的人数放在 d2中,依此类推,把 100 岁(含 100 岁)以上年龄的人数都放在 d10中。结果在主函数中输出_。注意:部分源程序给出如下。请勿改动 main()函数和其他函数中的任何内容,仅在函数 fun()的花括号中填入你编写的若干语句。试题
26、程序#include stdio.h# define N 50# define M 11void fun(int *a, int *b)double rnd () static t=29, c=217, m=1024, r=0;r=(r*t+c)% m;return (double) r/m);void main() int ageN, i, dM;for(i=0; iN; i+)agei=(int) (115*rnd();/*产生一个随机的年龄数组*/printf(“The original data:/n“);for(i=0; iN; i+)printf(i+1)% 10=0? “% 4d
27、/n“:“% 4d“, agei); /*每行输出 10 个数* /printf(“/n/n“);fun(age, d);for(i=0; i10; i+)printf(“% 4d% 4d:% 4d/n“, i*10, i*10+9, di);printf(“Over 100:% 4d/n“, d10);_42.下列给定程序中,函数 fun()的功能是:把形参 a 所指数组中的奇数按原顺序依次存放到 a0、a1、a2、中,把偶数从数组中删除,奇数个数通过函数值返回。例如,若 a 所指数组中的数据最初排列为 9、1、4、2、3、6、5、8、7,删除偶数后 a 所指数组中的数据为 9、1、3、5、
28、7,返回值为 5。请在标号处填入正确的内容,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构。试题程序#include stdio.h#define N 9int fun(int a, int n) int i, j;j=0;for (i=0; in; i+)if(ai% 2=_) aj=ai; _;return _;main() int bN =9,1,4,2,3,6,5,8,7, i, n;printf(“/nThe original data:/n“);for (i=0; iN; i+)printf(“% 4d“, bi);printf(“/n“);n
29、=fun(b, N);printf(“/nThe number of odd:% d /n“, n);printf(“/nThe odd number:/n“);for (i=0; in; i+)printf(“% 4d“, bi);printf(“/n“);(分数:5.00)填空项 1:_43.请编写函数 fun(),其功能是:找出 2*M 整型二维数组中最大元素的值,并将此值返回调用函数。注意:部分源程序给出如下。请勿改动主函数 main()和其他函数中的任何内容,仅在函数 fun()的花括号中填入你编写的若干语句。试题程序#define M 4#include stdio.hint fu
30、n(int aM)void main() int arr2M=5,8,3,45,76,-4,12,82;printf(“max=% d/n“, fun(arr);_44.下列给定程序中,函数 fun()的功能是:求 ss 所指字符串数组中长度最短的字符串所在的行下标,作为函数值返回,并把其串长放在形参 n 所指的变量中。ss 所指字符串数组中共有 M 个字符串,且串长小于 N。请在标号处填入正确的内容,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构。试题程序#include stdio.h#include string.h#define M 5#defin
31、e N 20int fun(char (*ss)N, int *n) int i, k=0, len=N;for(i=0; i_; i+)len=strlen(ssi);if(i=0) *n=len;if(len_*n) *n=len;k=i;return(_);main() charss MN=“shanghai“, “guangzhou “,“ beijing “,“ tianjing “,“ chongqing“;int n, k, i;printf(“/nThe original strings are:/n“);for(i=0; iM; i+)puts(ssi);k=fun(ss,
32、printf(“/nThe length of shortest string is:% d/n“, n);printf(“/nThe shortest string is:% s/n“,ssk);(分数:5.00)填空项 1:_45.下列给定程序中函数 fun()的功能是:统计 substr 所指的子符串在 str 所指的字符串中出现的次数。例如,若字符串为 aaas 1kaaas,子字符串为 as,则应输出 2。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main()函数,不得增行或删行,也不得更改程序的结构。试题程序#include stdio.h int fun(char
33、 *str, char * substr) int i, j, k, num=0;/* * * * *found* * * * * /for(i=0, stri, i+)for(j=i, k=0; substrk=strj; k+, j+)/* * * * *found* * * * * /if(substrk+1=/0) num+;break;return num;main() char str80, substr80;printf(“Input a string:“);gets (str);printf(“Input a substring:“);gets (substr);printf(
34、“% d/n“, fun(str, substr);_46.规定输入的字符串中只包含字母和*号。编写函数 fun(),其功能是:删除字符串中所有的*号。编写函数时,不得使用 C 语言提供的字符串函数。例如,字符串中的内容为:* * * * A*BC*DEF*G* * * * * * *,删除后,字符串中的内容应当是:ABCDEFG。注意:部分源程序给出如下。请勿改动主函数 main()和其他函数中的任何内容,仅在函数 fun()的花括号中填入你编写的若干条语句。试题程序#include conio.h#include stdio.hvoid fun(char * a)void main() c
35、har s81;printf(“Enter a string:/n“);gets(s);fun(s);printf(“The string after deleted:n“);puts(s);_47.下列给定程序中,函数 fun()的功能是:从形参 ss 所指字符串数组中,删除所有串长超过 k 的字符串,函数返回剩余字符串的个数。SS 所指字符串数组中共有 N 个字符串,且串长小于 M。请在标号处填入正确的内容,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构。试题程序#include stdio.h#include string.h#define N 5#
36、define M 10int fun(char (* ss)M, int k) int i, j=0, len;for(i=0; i_; i+) len=strlen (ssi;if(len=_)strcpy(ssj+, _);return j;main() char xNM=“Beijing“, “Shanghai“, “Tianjin“, “Nanjing“, “Wuhan“;int i, f;printf(“/nThe original string/n/n“);for(i=0; iN; i+)puts(xi);printf(“/n“);f=fun(x, 7);printf(“The s
37、tring witch length is less than or equal to 7:/n“);for(i=0; if; i+) puts(xi);printf(“/n“);(分数:5.00)填空项 1:_48.下列给定程序中,函数 fun()的功能是:将形参 a 所指数组中的前半部分元素中的值与后半部分元素中的值对换。形参 n 中存放数组中数据的个数,若 n 为奇数,则中间的元素不动。例如,若 a 所指数组中的数据为 1、2、3、4、5、6、7、8、9,则调换后为6、7、8、9、5、1、2、3、4。请在标号处填入正确的内容,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行
38、,也不得更改程序的结构。试题程序#include stdio.h#define N 9void fun(int a, int n) int i, t, p;p=(n% 2=0)? n/2:n/2+_;for(i=0; in/2; i+) t=ai;ai=ap+_;_=t;main() int bN=1, 2, 3, 4, 5, 6, 7, 8, 9, i;printf(“/nThe original data:/n“);for(i=0; iN; i+)printf(“% 4d“, b1);printf(“/n“);fun(b, N);printf(“/nThe data after movin
39、g:/n“);for(i=0; iN; i+)printf(“% 4d“, bi);printf(“/n“);(分数:5.00)填空项 1:_49.下列给定程序中,函数 fun()的功能是:把形参 s 所指字符串中下标为奇数的字符右移到下一个奇数位置,最右边被移出字符串的字符绕回放到第一个奇数位置,下标为偶数的字符不动(注:字符串的长度大于等于 2)。例如,形参 s 所指字符串为 abcdefgh,执行结果为 ahcbedgf。请在标号处填入正确的内容,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构。试题程序#include stdio.hvoid fun
40、(char*s) int i, n, k;char c;n=0;for (i=0; si!=/0; i+)n+;if(n% 2=0)k=n-_;else k=n-2;c=_;for (i=k-2; i=1; i=i-2) si+2=si;si=_;main() char s80=“abcdefgh“;printf(“/nThe original string is:% s/n“, s);fun(s);printf(“/nThe result is:% s/n“, s);(分数:5.00)填空项 1:_二级 C 语言-循环结构、数组(二)答案解析(总分:74.00,做题时间:90 分钟)一、B选
41、择题/B(总题数:34,分数:34.00)1.下面程序输出的结果是_。main() int i;int a33=1,2,3,4,5,6,7,8,9;for(i=0; iprintf(“% d“, a2-ii); A.1 5 9 B.7 5 3 C.3 5 7 D.5 9 1(分数:1.00)A.B. C.D.解析:解析 本题用循环的方法考查对数组概念的掌握。首先,当 i=0 时,数组中的位置是 a20=7,当然,如果用排除法,就不用考虑后面的循环,因为在 4 个选项中,第 1 个数为 7 的选项只有 B。本题执行第 2 次循环时,i 的值为 1,则 printf 函数中的数组指向为 a11=5
42、,依次循环,可求出答案。2.以下数组定义错误的是_。 A.int x3=0; B.int x23=1,2, 3,4, 5,6; C.int x3=1,2,3, 4, 5,6; D.int x3=1,2,3,4,5,6;(分数:1.00)A.B. C.D.解析:解析 二维数组的初始化有以下几种形式:分行进行初始化;不分行的初始化;部分数组元素初始化;省略第一维的定义,不省略第二维的定义。选项 B 等号右边分了 3 行,大于等号左边数组的行数。3.以下能正确定义数组并正确赋初值的选项是_。 A.int N =5,bNN; B.int a12 = 1, 3; C.int c2=1,2, 3,4; D.int d3