1、二级 C 语言程序设计-4 及答案解析(总分:98.00,做题时间:90 分钟)一、B选择题/B(总题数:30,分数:30.00)1.若有定义:int x,*pb;则正确的赋值表达式是 A.pb= 程序的输出结果是 A.因变量无定义输出不定值 B.0 C.-1 D.1(分数:1.00)A.B.C.D.3.若有以下程序:#includestdio.hvoid sub(int x, int y, int*z) *z=y-x; main() int a, b, c;sub(10, 5, sub(7, a, sub(a, b, printf(“%d, %d, %d/n“, a, b, c);程序的输出
2、结果是 A.5,2,3 B.-5,-12,-7 C.-5,-12,-17 D.5,-2,-7(分数:1.00)A.B.C.D.4.若有以下程序:#includestdio.hmain() int k=2, m=4, n=6, *pk=*(p= printf(“%d/n“, n);程序的输出结果是 A.4 B.6 C.8 D.10(分数:1.00)A.B.C.D.5.若指针 p 已正确定义并指向如图所示存储单元:(分数:1.00)A.B.C.D.6.若指针 p 已正确定义并指向如图所示存储单元,则表达式*+p 的值是(分数:1.00)A.B.C.D.7.若指针 p 已正确定义并指向如图所示存储单
3、元,则表达式+*p 的值是(分数:1.00)A.B.C.D.8.若有以下程序:#includestdio.hvoid prtv(int*x)printf(“%d/n“, +*x); main() int a=25;prtv(程序的输出结果是 A.23 B.24 C.25 D.26(分数:1.00)A.B.C.D.9.若有以下程序#includestdio.hmain() int *k, *a, b=100;a= k= printf(“%d/n“, *k);程序的输出结果是 A.运行出错 B.100 C.a 的地址 D.b 的地址(分数:1.00)A.B.C.D.10.若有以下程序:#inclu
4、destdio.hvoid fun(float*a, float*b) float w;*a= *a+*a; w=*a; *a=*b; *b=w;main() float x=2.0, y=3.0, *px=fun(px, py); printf(“%2.0f, %2.0f/n“, x, y);程序的输出结果是 A.4,3 B.2,3 C.3,4 D.3,2(分数:1.00)A.B.C.D.11.若有以下程序:#includestdio.hvoid sub(double x, double*y, double*z) *y=*y-1.0; *z=*z+x; main()double a=2.5,
5、 b=9.0, *pa, *pb;pa= pb=sub(b-a, pa, pa); printf(“%f/n“, a);程序的输出结果是 A.9.000000 B.1.500000 C.8.000000 D.10.500000(分数:1.00)A.B.C.D.12.以下四个程序中不能对两个整型值进行交换的是 A.#includestdio.h void swap(int *p, int *q) int *t, a; t= *t=*p; *p=*q; *q=*t; main() int a=10, b=20; swap( printf(“%d%d/n“, a, b); B.#includestd
6、io.h void swap(int *p, int *q) int t; t=*p; *p=*q; *q=t; main() int a=10, b=20; swap( printf(“%d%d/n“, a, b); C.#includestdio.h void swap(int *p, int *q) int t; t=*p; *p=*q; *q=t; main() int *a, *b; *a=10, *b=20; swap(a, b); printf(“%d%d/n“, *a, *b); D.#includestdio.h void swap(int *p, int *q) int t
7、; t=*p; *p=*q; *q=t; main() int a=10, b=20, *x= swap(x, y); printf(“%d%d/n“, a, b); (分数:1.00)A.B.C.D.13.若已定义:int a=0, 1, 2, 3, 4, 5, 6, 7, 8, 9, *p=a, i;其中 0i9,则对 a 数组元素的引用不正确的是 A.ap-a B.*(while(i10) scanf(“%d“, _);应在下划线处填入的是 A.a+(i+) B.printf(“%d/n“, *(p+2);程序的输出结果是 A.3 B.4 C.1 D.2(分数:1.00)A.B.C.D.
8、16.有以下程序:#includestdio.hmain() int n2=0, i, j, k=2;for(i=0; ik; i+)for(j=0; jk; j+) nj=ni+1;printf(“%d/n“, nk);程序的输出结果是 A.不确定的值 B.3 C.2 D.1(分数:1.00)A.B.C.D.17.有以下程序:#include stdio.hmain() int a=2, 4, 6, 8, 10, y=1, x, *p;p=for(x=0; x3; x+) y+=*(p+x);printf(“%d/n“, y);程序的输出结果是 A.17 B.18 C.19 D.20(分数:
9、1.00)A.B.C.D.18.有以下程序:#includestdio.hmain() int a=2, 4, 6, 8, *p=a, i;for(i=0; i4; i+)ai = *p+;printf(“%d/n“, a2);程序的输出结果是 A.6 B.8 C.4 D.2(分数:1.00)A.B.C.D.19.有以下程序:#include stdio.hint f(int b, int n) int i, r=1; for(i=0; i=n; i+) r=r*bi;return r;main() int x, a=2, 3, 4, 5, 6, 7, 8, 9;x=f(a, 3);print
10、f(“%d/n“, x);程序的输出结果是 A.720 B.120 C.24 D.6(分数:1.00)A.B.C.D.20.有以下程序:#includestdio.hmain() int a=1, 2, 3, 4, 5, 6, 7, 8, 9, 0, *p;p=a;printf(“%x/n“, p); printf(“%x/n“, p+9);若一个 int 类型的变量占 2 个字节,第一个 printf 语句输出的是 194,则第二个 printf 语句的输出结果是 A.212 B.204 C.1a4 D.1a6(分数:1.00)A.B.C.D.21.有以下程序:#includestdio.h
11、void fun(int*s, int n1, int n2) int i, j, t;i=n1; j=n2;while (ij) t=*(s+i); *(s+i)=*(s+j); *(s+j)=t; i+; j-; main() int a10=1, 2, 3, 4, 5, 6, 7, 8, 9, 0, i, *p=a;fun(p, 0, 3); fun(p, 4, 9); fun(p, 0, 9);for(i=0; i10; i+) printf(“%d“, *(a+i);程序的输出结果是 A.0987654321 B.4321098765 C.5678901234 D.098765123
12、4(分数:1.00)A.B.C.D.22.有以下程序:#includestdio.hmain() int a5=2, 4, 6, 8, 10, *p, *k;p=a; k=printf(“%d“, *(p+); printf(“%d/n“, *k);程序的输出结果是 A.4 4 B.2 2 C.2 4 D.4 6(分数:1.00)A.B.C.D.23.有以下程序:#includestdio.h#define N 6main() char cN; int i=0;for(i=0; iN; i+) ci=getehar();for(i=0; iN; i+) putehar(ci);当运行以上程序时
13、输入三行,每行都是在第一列上开始,CR代表 Enter 键:aCRbCRcdefCR则程序的输出结果是 A.abcdef B.a b c d e f C.a b cd D.a b cdef(分数:1.00)A.B.C.D.24.若有定义:int c45,(*cp)5;和语句 cp=c;,则能正确引用 c 数组元素的是 A.cp+1 B.*(cp+3) C.*(cp+1)+3 D.*(*cp+2)(分数:1.00)A.B.C.D.25.若已定义:int a43=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,(*prt)3=a, *p=a0;则能够正确表示数组元素 a
14、12的表达式是 A.*(*prt+1)2) B.*(*(p+5) C.(*prt+1)+2 D.*(*(a+1)+2)(分数:1.00)A.B.C.D.26.若有定义和语句:int a 43=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, (*prt)3=a, *p4, i;for(i=0; i4; i+)pi=ai;则不能够正确表示 a 数组元素的表达式是 A.a43 B.p00 C.prt22 D.(*(p+1)1(分数:1.00)A.B.C.D.27.有以下程序:#includestdio.hmain()int aa33=2, 4, 6, i, *p=for
15、(i=0; i2; i+) if(i=0)aaii+1=*p+1;else+p;printf(“%d“, *p);printf(“/n“);程序的输出结果是 A.23 B.26 C.33 D.36(分数:1.00)A.B.C.D.28.有以下程序:#includestdio.hmain()int a34=1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, (*p)4=a, i, j, k=0;for(i=0; i3; i+)for(j=0; j2; j+)k+=*(*(p+i)+j);printf(“%d/n“, k);程序的输出结果是 A.60 B.68 C
16、.99 D.108(分数:1.00)A.B.C.D.29.有以下程序:#includestdio.hmain()int i,x33=1, 2, 3, 4, 5, 6, 7, 8, 9;for(i=0; i3; i+) printf(“%d, “, xi2-i);程序的输出结果是 A.1,5,9, B.1,4,7, C.3,5,7, D.3,6,9,(分数:1.00)A.B.C.D.30.若有定义语句:int(*p)M;其中的标识符 p 是 A.M 个指向整型变量的指针 B.指向 M 个整型变量的函数指针 C.一个行指针,它指向具有 M 个整型元素的一维数组 D.具有 M 个指针元素的一维指针数
17、组,每个元素都只能指向整型量(分数:1.00)A.B.C.D.二、B填空题/B(总题数:2,分数:19.00)若有定义:char ch;(分数:5.00)(1).使指针 p 可以指向字符型变量的定义语句是 1。(分数:1.00)填空项 1:_(2).使指针 p 指向变量 ch 的赋值语句是 1。(分数:1.00)填空项 1:_(3).通过指针 p 给变量 ch 读入字符的 scanf 函数调用语句是 1。(分数:1.00)填空项 1:_(4).通过指针 p 给变量 ch 赋字符 A 的语句是 1。(分数:1.00)填空项 1:_(5).通过指针 p 输出 ch 中字符的语句是 1。(分数:1.
18、00)填空项 1:_若有如图所示五个连续的 int 类型的存储单元并赋值如图,且已定义:int *p,*s;其中 p 指向存储单元 a1。(分数:14.00)(1).通过指针 p,给 s 赋值,使其指向最后一个存储单元 a4的语句是_。(分数:1.00)填空项 1:_(2).s 指向存储单元 a4,移动指针 s,使之指向中间的存储单元 a2的表达式是_。(分数:1.00)填空项 1:_(3).已知 k=2,指针 s 已指向存储单元 a2,表达式*(s+k)的值是_。(分数:1.00)填空项 1:_(4).指针 s 已指向存储单元 a2,不移动指针 s,通过 s 引用存储单元 a3的表达式是_。
19、(分数:1.00)填空项 1:_(5).指针 s 指向存储单元 a2,p 指向存储单元 a0,表达式 s-p 的值是_。(分数:1.00)填空项 1:_(6).若 p 指向存储单元 a0,则以下语句的输出结果是_。 for(i=0; i5; i+) printf(“%d“, *(p+i); printf(“/n“);(分数:1.00)填空项 1:_(7).若有定义: double w10; 则 w 数组元素下标的上限是_,下限是_。(分数:1.00)填空项 1:_(8).以下程序的输出结果是_。 #includestdio.h main() int a=2, 4, 6, *prt= for(y
20、=0; y3; y+)z=(*(prt+y)x)?*(prt+y):x; printf(“%d/n“, z); (分数:1.00)填空项 1:_(9).以下程序的输出结果是_。 #inelude stdio.h main() int arr10, i, k=0; for(i=0; i10; i+)arri=i; for(i=0; i4; i+) k+=arti+i; printf(“%d/n“, k); (分数:1.00)填空项 1:_(10).以下程序的输出结果是_。 #includestdio.h #define N 5 int fun(char*s, char a, int n) int
21、 j; *s=a; j=n; while(asj) j*; return j; main() char sN+1; int k; for(k=1; k=N; k+) sk=A+k+1; printf(“%d/n“, fun(s, E, N); (分数:1.00)填空项 1:_(11).若输入 3 个整数 3、2、1,则以下程序的输出结果是_。 #include stdio.h void sub(int n, int uu) int t; t=uun-; t+=3*uun; n+; if(t=10) uun+=t/10; uun=t%10; else uun=t; main() int i, n
22、, aa10=0; scanf(“%d%d%d“, for(i=1; in; i+) sub(i, aa); for(i=0; i=n; i+) printf(“%d“, aai); printf(“/n“); (分数:1.00)填空项 1:_(12).以下程序的输出结果是_。 #includestdio.h main() int i, j, row, col, m, arr33=100, 200, 300, 28, 72, -30, -850, 2, 6; m=arr00; for(i=0; i3; i+) for(j=0; j3; j+) if(arrijm)m=arrij; row=i;
23、 col=j; printf(“%d, %d, %d/n“, m, row, col);(分数:1.00)填空项 1:_(13).以下 findmax 返回 s 所指数组中最大元素的下标,数组中元素的个数由 t 传入,请填空。 int findmax(int s, int t) int k, p; for(p=0, k=p; pt; p+) if(spsk)_; return _; (分数:1.00)填空项 1:_(14).以下程序统计从终端输入的字符中每个大写字母的个数,num0中统计字母 A 的个数,其他以此类推。用#号结束输入。请填空。 #includestdio.h #includec
24、type.h main() int num26=0, i; char c; while(_!=#) if (isupper(c) num _+=1; for(i=0; i26; i+) if(numi)printf(“%c:%d/n“, i+A, numi); (分数:1.00)填空项 1:_三、B编程题/B(总题数:10,分数:49.00)31.请编写函数,其功能是对传送过来的两个浮点数求出和值与差值,并通过形参传送回调用函数。(分数:5.00)_32.输入一行数字字符,请用数组元素作为计数器来统计每个数字字符的个数。用下标为 0 的元素统计字符0的个数,用下标为 1 的元素统计字符1的个数
25、(分数:5.00)_33.编写函数,把数组中所有奇数放在另一个数组中返回。(分数:5.00)_34.输入若干有序数放在数组中。然后输入一个数,插入到此有序数列中,插入后,数组中的数仍然有序。请对插在最前、插在最后、插在中间三种情况运行程序,以便验证程序是否正确。(分数:5.00)_35.编写函数,把任意十进制正整数转换成二进制数。提示:把十进制数不断被 2 除的余数放在一个一维数组中,直到商数为零。在主函数中进行输出,要求不得按逆序输出。(分数:5.00)_36.编写函数,调用随机函数产生 0 到 19 之间的随机数,在数组中存入 15 个互不重复的整数。要求在主函数中进行输出结果。若已定义
26、x 为 int 类型,调用随机函数步骤如下: #includestdlib.h x=rand()%20; /*产生 0 到 19 的随机数*/(分数:5.00)_37.求两个矩阵的和。(分数:4.00)_38.编写程序打印出以下形式的乘法九九表。 (分数:5.00)_39.调用随机函数为 54 的矩阵置 100 以内的整数,输出该矩阵,求出每行元素之和,并把和值最大的那一行与第一行上的元素对调。若已定义 x 为 int 类型,请参考下列调用随机函数。 #includestdlib.h x=rand()%20; /*产生 0 到 19 的随机数*/(分数:5.00)_40.调用随机函数为 55
27、的矩阵置 100 以内的整数,输出该矩阵,然后逆置该矩阵,即将第一列的元素放在第一行上,第二列的元素放在第二行上,其他以此类推。(分数:5.00)_二级 C 语言程序设计-4 答案解析(总分:98.00,做题时间:90 分钟)一、B选择题/B(总题数:30,分数:30.00)1.若有定义:int x,*pb;则正确的赋值表达式是 A.pb= 程序的输出结果是 A.因变量无定义输出不定值 B.0 C.-1 D.1(分数:1.00)A.B. C.D.解析:3.若有以下程序:#includestdio.hvoid sub(int x, int y, int*z) *z=y-x; main() int
28、 a, b, c;sub(10, 5, sub(7, a, sub(a, b, printf(“%d, %d, %d/n“, a, b, c);程序的输出结果是 A.5,2,3 B.-5,-12,-7 C.-5,-12,-17 D.5,-2,-7(分数:1.00)A.B. C.D.解析:4.若有以下程序:#includestdio.hmain() int k=2, m=4, n=6, *pk=*(p= printf(“%d/n“, n);程序的输出结果是 A.4 B.6 C.8 D.10(分数:1.00)A.B.C. D.解析:5.若指针 p 已正确定义并指向如图所示存储单元:(分数:1.00
29、)A.B. C.D.解析:6.若指针 p 已正确定义并指向如图所示存储单元,则表达式*+p 的值是(分数:1.00)A.B. C.D.解析:7.若指针 p 已正确定义并指向如图所示存储单元,则表达式+*p 的值是(分数:1.00)A.B.C. D.解析:8.若有以下程序:#includestdio.hvoid prtv(int*x)printf(“%d/n“, +*x); main() int a=25;prtv(程序的输出结果是 A.23 B.24 C.25 D.26(分数:1.00)A.B.C.D. 解析:9.若有以下程序#includestdio.hmain() int *k, *a,
30、b=100;a= k= printf(“%d/n“, *k);程序的输出结果是 A.运行出错 B.100 C.a 的地址 D.b 的地址(分数:1.00)A.B. C.D.解析:10.若有以下程序:#includestdio.hvoid fun(float*a, float*b) float w;*a= *a+*a; w=*a; *a=*b; *b=w;main() float x=2.0, y=3.0, *px=fun(px, py); printf(“%2.0f, %2.0f/n“, x, y);程序的输出结果是 A.4,3 B.2,3 C.3,4 D.3,2(分数:1.00)A.B.C.
31、 D.解析:11.若有以下程序:#includestdio.hvoid sub(double x, double*y, double*z) *y=*y-1.0; *z=*z+x; main()double a=2.5, b=9.0, *pa, *pb;pa= pb=sub(b-a, pa, pa); printf(“%f/n“, a);程序的输出结果是 A.9.000000 B.1.500000 C.8.000000 D.10.500000(分数:1.00)A.B.C. D.解析:12.以下四个程序中不能对两个整型值进行交换的是 A.#includestdio.h void swap(int
32、*p, int *q) int *t, a; t= *t=*p; *p=*q; *q=*t; main() int a=10, b=20; swap( printf(“%d%d/n“, a, b); B.#includestdio.h void swap(int *p, int *q) int t; t=*p; *p=*q; *q=t; main() int a=10, b=20; swap( printf(“%d%d/n“, a, b); C.#includestdio.h void swap(int *p, int *q) int t; t=*p; *p=*q; *q=t; main()
33、int *a, *b; *a=10, *b=20; swap(a, b); printf(“%d%d/n“, *a, *b); D.#includestdio.h void swap(int *p, int *q) int t; t=*p; *p=*q; *q=t; main() int a=10, b=20, *x= swap(x, y); printf(“%d%d/n“, a, b); (分数:1.00)A.B.C. D.解析:13.若已定义:int a=0, 1, 2, 3, 4, 5, 6, 7, 8, 9, *p=a, i;其中 0i9,则对 a 数组元素的引用不正确的是 A.ap-
34、a B.*(while(i10) scanf(“%d“, _);应在下划线处填入的是 A.a+(i+) B.printf(“%d/n“, *(p+2);程序的输出结果是 A.3 B.4 C.1 D.2(分数:1.00)A. B.C.D.解析:16.有以下程序:#includestdio.hmain() int n2=0, i, j, k=2;for(i=0; ik; i+)for(j=0; jk; j+) nj=ni+1;printf(“%d/n“, nk);程序的输出结果是 A.不确定的值 B.3 C.2 D.1(分数:1.00)A. B.C.D.解析:17.有以下程序:#include s
35、tdio.hmain() int a=2, 4, 6, 8, 10, y=1, x, *p;p=for(x=0; x3; x+) y+=*(p+x);printf(“%d/n“, y);程序的输出结果是 A.17 B.18 C.19 D.20(分数:1.00)A.B.C. D.解析:18.有以下程序:#includestdio.hmain() int a=2, 4, 6, 8, *p=a, i;for(i=0; i4; i+)ai = *p+;printf(“%d/n“, a2);程序的输出结果是 A.6 B.8 C.4 D.2(分数:1.00)A. B.C.D.解析:19.有以下程序:#in
36、clude stdio.hint f(int b, int n) int i, r=1; for(i=0; i=n; i+) r=r*bi;return r;main() int x, a=2, 3, 4, 5, 6, 7, 8, 9;x=f(a, 3);printf(“%d/n“, x);程序的输出结果是 A.720 B.120 C.24 D.6(分数:1.00)A.B. C.D.解析:20.有以下程序:#includestdio.hmain() int a=1, 2, 3, 4, 5, 6, 7, 8, 9, 0, *p;p=a;printf(“%x/n“, p); printf(“%x/
37、n“, p+9);若一个 int 类型的变量占 2 个字节,第一个 printf 语句输出的是 194,则第二个 printf 语句的输出结果是 A.212 B.204 C.1a4 D.1a6(分数:1.00)A.B.C.D. 解析:21.有以下程序:#includestdio.hvoid fun(int*s, int n1, int n2) int i, j, t;i=n1; j=n2;while (ij) t=*(s+i); *(s+i)=*(s+j); *(s+j)=t; i+; j-; main() int a10=1, 2, 3, 4, 5, 6, 7, 8, 9, 0, i, *p
38、=a;fun(p, 0, 3); fun(p, 4, 9); fun(p, 0, 9);for(i=0; i10; i+) printf(“%d“, *(a+i);程序的输出结果是 A.0987654321 B.4321098765 C.5678901234 D.0987651234(分数:1.00)A.B.C. D.解析:22.有以下程序:#includestdio.hmain() int a5=2, 4, 6, 8, 10, *p, *k;p=a; k=printf(“%d“, *(p+); printf(“%d/n“, *k);程序的输出结果是 A.4 4 B.2 2 C.2 4 D.4
39、 6(分数:1.00)A.B.C. D.解析:23.有以下程序:#includestdio.h#define N 6main() char cN; int i=0;for(i=0; iN; i+) ci=getehar();for(i=0; iN; i+) putehar(ci);当运行以上程序时输入三行,每行都是在第一列上开始,CR代表 Enter 键:aCRbCRcdefCR则程序的输出结果是 A.abcdef B.a b c d e f C.a b cd D.a b cdef(分数:1.00)A.B.C. D.解析:24.若有定义:int c45,(*cp)5;和语句 cp=c;,则能正
40、确引用 c 数组元素的是 A.cp+1 B.*(cp+3) C.*(cp+1)+3 D.*(*cp+2)(分数:1.00)A.B.C.D. 解析:25.若已定义:int a43=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,(*prt)3=a, *p=a0;则能够正确表示数组元素 a12的表达式是 A.*(*prt+1)2) B.*(*(p+5) C.(*prt+1)+2 D.*(*(a+1)+2)(分数:1.00)A.B.C.D. 解析:26.若有定义和语句:int a 43=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, (*pr
41、t)3=a, *p4, i;for(i=0; i4; i+)pi=ai;则不能够正确表示 a 数组元素的表达式是 A.a43 B.p00 C.prt22 D.(*(p+1)1(分数:1.00)A. B.C.D.解析:27.有以下程序:#includestdio.hmain()int aa33=2, 4, 6, i, *p=for(i=0; i2; i+) if(i=0)aaii+1=*p+1;else+p;printf(“%d“, *p);printf(“/n“);程序的输出结果是 A.23 B.26 C.33 D.36(分数:1.00)A. B.C.D.解析:28.有以下程序:#includestdio.hmain()int a34=1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, (*p)4=a, i, j, k=0;for(i=0; i3; i+)for(j=0; j2; j+)k+=*(*(p+i)+j);prin