2012 年 3 月全国计算机等级考试二级笔试试卷及参考答案 C 语言程序设计 ( 考试时间 90 分钟, 满分 100 分 ) 一 选择题 ((1)-(10) (21)-(40) 每题 2 分,(11)-(20) 每题 1 分, 共 70 分 ) 下列各题 A) B) C) D) 四个选项中, 只有一个选项是正确的 请将正确选项填涂在答题卡相应位置上答在试卷上不得分 1. 下列叙述中正确的是 A) 循环队列是队列的一种顺序存储结构 B) 循环队列是队列的一种链式存储结构 C) 循环队列是非线性结构 D) 循环队列是一种逻辑结构 2. 下列叙述中正确的是 A) 栈是一种先进先出的线性表 B) 队列是一种后进先出的线性表 C) 栈与队列都是非线性结构 D) 以上三种说法都不对 3. 一棵二叉树共有 25 个结点, 其中 5 个是叶子结点, 则度为 1 的结点数为 A) 4 B) 6 C) 10 D) 16 4. 在下列模式中, 能够给出数据库物理存储结构与物理存取方法的是 A) 内模式 B) 外模式 C) 概念模式 D) 逻辑模式 5. 在满足实体完整性约束条件下 A) 一个关系中可以没有候选关键字 B) 一个关系中只能有一个候选关键字 C) 一个关系中必须有多个候选关键字 D) 一个关系中应该有一个或多个候选关键字 6. 有三个关系 R S 和 T 如下 : R S T A B C A B C A B C a 1 2 a 1 2 b 2 1 b 2 1 d 2 1 C 3 1 c 3 1 则由关系 R 和 S 得到关系 T 的操作是 A) 自然连接 B) 并 C) 差 D) 交 7. 软件生命周期中的活动不包括 A) 软件维护 B) 市场调研 C) 软件测试 D) 需求分析 8. 下面不属于需求分析阶段任务的是 A) 确定软件系统的功能需求 B) 确定软件系统的性能需求 C) 制定软件集成测试计划 D) 需求规格说明书评审 9. 在黑盒测试方法中, 设计测试用例的主要依据是 A) 程序外部功能 B) 程序内部逻辑 C) 程序数据结构 D) 程序流程图 10. 在软件设计中不使用的工具是 A) 系统结构图 B) 程序流程图 C) PAD 图 D) 数据流程图 11. 针对简单程序设计, 以下叙述的实施步骤顺序正确的是 A) 确定算法和数据结构 编码 调试 整理文档 B) 编码 确定算法和数据结构 调试 整理文档 C) 整理文档 确定算法和数据结构 编码 调试 D) 确定算法和数据结构 调试 编码 整理文档 12. 关于 C 语言中数的表示, 以下叙述中正确的是 A) 只有整型数在允许范围内能精确无误的表示, 实型数会有误差
B) 只要在允许范围内整型数和实型数都能精确的表示 C) 只有实型数在允许范围内能精确无误的表示, 整型数会有误差 D) 只有用八进制表示的数才不会有误差 13. 以下关于算法的叙述中错误的是 A) 算法可以用伪代码 流程图等多种形式来描述 B) 一个正确的算法必须有输入 C) 一个正确的算法必须有输出 D) 用流程图描述的算法可以用任何一种计算机高级语言编写成程序代码 14. 以下叙述中错误的是 A) 一个 C 程序中可以包含多个不同名的函数 B) 一个 C 程序只能有一个主函数 C) C 程序在书写时, 有严格的缩进要求, 否则不能编译通过 D) C 程序的主函数必须用 main 作为函数名 15. 设有以下语句 char ch1, ch2; scanf( %c%c, &ch1, &ch2); 若要为变量 ch1 和 ch2 分别输入字符 A 和 B, 正确的输入形式应该是 A) A 和 B 之间用逗号间隔 B) A 和 B 之间不能有任何间隔符 C) A 和 B 之间可以用回车间隔 D) A 和 B 之间用空格间隔 16. 以下选项中非法的字符常量是 A) '\101' B) '\65' C) '\xff' D) '\019' 17. 有以下程序 { int a = 0, b = 0, c = 0; c = (a -= a 5); (a = b, b += 4); printf( %d,%d,%d\n,a,b,c); A) 0,4,5 B) 4,4,5 C) 4,4,4 D) 0,0,0 18. 设变量均已正确定义并赋值, 以下与其它三组输出结果不同的一组语句是 A) x++; printf( %d\n, x); B) n = ++x; printf( %d\n, n); C) ++x; printf( %d\n, x); D) n = x++; printf( %d\n, n); 19. 以下选项中, 能表示逻辑值 假 的是 A) 1 B) 0.000001 C) 0 D) 100.0 20. 有以下程序 : { int a; scanf( %d, &a); if(a++ < 9)printf( %d\n, a); else printf( %d\n, a--); 程序运行时从键盘输入 9< 回车 >, 则输出结果是 A) 10 B) 11 C) 9 D) 8
21. 有以下程序 { int s = 0, n; for(n = 0; n < 3; n++) { switch(s) { case 0: case 1:s += 1; case 2:s += 2; break; case 3:s += 3; default: s += 4; printf( %d, s); 程序运行后输出结果是 A) 1,2,4, B) 1,3,6, C) 3,10,14, D) 3,6,10, 22. 若 k 是 int 类型变量, 且有以下 for 语句 for(k = -1; k < 0; k++) printf( ****\n ); 下面关于语句执行情况的叙述中正确的是 A) 循环体执行一次 B) 循环体执行两次 C) 循环体一次也不执行 D) 构成无限循环 23. 有以下程序 : { char a, b, c; b = '1'; c = 'A'; for(a = 0; a < 6; a++) { if(a % 2) putchar(b + a); else putchar(c + a); A) 1B3D5F B) ABCDEF C) A2C4E6 D) 123456 24. 设有如下定义语句 int m[] = {2, 4, 6, 8, 10, *k = m; 以下选项中, 表达式的值为 6 的是 A) *(k + 2) B) k + 2 C) *k + 2 D) *k += 2; 25.fun 函数的功能是 : 通过键盘输入给 x 所指的整型数组所有元素赋值 在下划线年应填写的是 #define N 5 void fun(int x[n]) { int m; for(m = N 1; m >= 0; m--) scanf( %d, );
A) &x[++m] B) &x[m+1] C) x+(m++) D) x+m 26. 若有函数 void fun(double a[], int *n) {... 以下叙述中正确的是 A) 调用 fun 函数时只有数组执行按值传递, 其他参数和形参之间执行按地址传递 B) 形参 a 和 n 都是指针变量 C) 形参 a 是一个数组名,n 是指针变量 D) 调用 fun 函数时将把 double 型实参数组元素一一对应地传给形参 a 数组 27. 有以下程序 { int a, b, k, m, *p1, *p2; k = 1, m = 8; p1 = &k, p2 = &m; a = /*p1 m; b = *p1 + *p2 +6; printf( %d, a); printf( %d\n, b); 编译时显示错误信息, 你认为出错的语句是 A) a = /*p1 m; B) b = *p1 + *p2 +6; C) k = 1, m = 8; D) p1 = &k, p2 = &m; 28. 以下选项中有语法错误的是 A) char *str[] = { guest ; B) char str[][10] = { guest ; C) char *str[3];str[1] = guest ; D) char str[3][10]; str[1] = guest ; 29.avg 函数的功能是求整型数组中的前若干个元素的平均值, 设数组元素个数最多不超过 10 个, 则下列函数说明语句错误的是 A) int avg(int *a, int n); B) int avg(int a[10], int n); C) int avg(int a, int n); D) int avg(int a[], int n); 30. 有以下程序 #include <string.h> {printf( %d\n, strlen( ATS\n012\1 )); 程序运行输出结果是 A) 3 B) 8 C) 4 D) 9 31. 有以下程序 { char a[20], b[20], c[20]; scanf( %s%s, a, b); gets(c); printf( %s%s%s\n, a, b, c);
程序运行时从第一列开始输入 : This is a cat!< 回车 > 则输出结果是 A) Thisisacat! B) Thisis a C) Thisis a cat! D) Thisisa cat! 32. 有以下程序 : void fun(char c) { if(c > 'x') fun(c 1); printf( %c, c); { fun('z'); A) xyz B) wxyz C) zyxy D) zyx 33. 有以下程序 : int func(int n) { int i; for(i = 0; i <= n; i++) printf( * ); printf( # ); { func(3); printf(???? ); func(4); printf( \n ); A) ****#????***# B) ***#????****# C) **#????*****# D) ****#????*****# 34. 有以下程序 void fun(int *s) { static int j = 0; do { s[j] = s[j] + s[j + 1]; while(++j < 2); { int k, a[10] = {1, 2, 3, 4, 5; for(k = 1; k < 3; k++) fun(a); for(k = 0; k < 5; k++) printf( %d, a[k]); printf( \n ); 程序运行后的输出的结果是 A) 12345 B) 23445 C) 34756 D) 35745 35. 有以下程序
#define S(x) (x)*x*2 { int k = 5, j = 2; printf( %d,, S(k + j)); printf( %d\n, S((k - j))); A) 98,18 B) 39,11 C) 39,18 D) 98,11 36. 有以下程序 void exch(int t[]) { t[0] = t[5]; { int x[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, i = 0; while(i <= 4){ exch(&x[i]; i++; for(i = 0; i < 5; i++) printf( %d, x[i]); printf( \n ); A) 2 4 6 8 10 B) 1 3 5 7 9 C) 1 2 3 4 5 D) 6 7 8 9 10 37. 设有以下程序段 struct MP3 { char name[20]; char color; float price; std, *ptr; ptr = &std; 若要引用结构体变量 std 中的 color 成员, 写法错误的是 A) std.color B) ptr->color C) std->color D) (*ptr).color 38. 有以下程序 struct stu { int num; char name[10]; int age; ; void fun(struct stu *p) { printf( %s\n, p->name); { struct stu x[3] = {{01, Zhang, 20, {02, Wang, 19, {03, Zhao, 18; fun(x + 2); A) Zhang B) Zhao C) Wang D)19 39. 有以下程序 { int n = 12, c;
c = (a << 2) << 1; printf( %d\n, c); 程序运行后输出结果是 A) 3 B) 50 C) 2 D) 96 40. 以下函数不能用于向文件中写入数据的是 A) ftell B) fwrite C) fputc D) fprintf 二 填空题 ( 每空 2 分, 共 30 分 ) 请将每空的正确答案写在答题卡 1 至 15 序号的横线上, 答在试卷上不得分 1. 在长度为 n 的顺序存储的线性表中删除一个元素, 最坏情况下需要移动表中的元素个数为 1 2. 设循环队列的的存储空间为 Q(1:30), 初始状态为 front=rear=30, 经过一系列入队与退队运算后, front=16, rear=15, 则循环队列中有 2 个元素 3. 数据库管理系统提供的数据语言中, 负责数据的增 删 改和查询的是 3 4. 在将 E-R 图转换到关系模式时, 实体和联系都可以表示成 4 5. 常见的软件工程方法有结构化方法和面向对象方法, 类 继承以及多态性等概念属于 5 6. 设变量 a 和 b 已定义为 int 类型, 若要通过 scanf( a=%d,b=%d, &a, &b); 语句分别给 a 和 b 输入 1 和 2 则正确的数据输入内容是 6 7. 以下程序的输出结果是 7 { int a=37; a += a %= 9; printf( %d\n, a); 8. 设 a b c 都是整型变量, 如果 a 的值为 1,b 的值为 2, 则执行 c = a++ b++; 语句后, 变量 b 的值为 8 9. 有以下程序段 s = 1.0; for(k = 1; k <= n; k++) s = s + 1.0 / (k * (k + 1)); printf( %f\n, s); 请真空, 使以下程序段的功能与上面的程序段完全相同 s = 1.0; k = 1; while( 9 ) { s = s + 1.0 / (k * (k + 1)); k = k + 1; printf(%f\n, s); 10. 以下程序的输出结果是 10 { char a, b; for(a = 0; a < 20; a += 7) { b = a % 10; putchar(b + '0');
11. 以下程序的输出结果是 11 { char *ch[4] = { red, green, blue ; int i = 0; while(ch[i]) { putchar(ch[i][0]); i++; 12. 有以下程序 { int arr[]={1, 3, 5, 7, 2, 4, 6, 8, i, start; scanf("%d", &start); for(i = 0; i < 3; i++) printf( %d, arr[(start + i) % 8]); 若在程序运行时输入整数 10< 回车 >, 则输出结果为 12 13. 以下程序的功能是输出 a 数组中所有字符串, 请填空 { char *a[] = {"ABC", "DEFGH", "IJ", "KLMNOP"; int i = 0; for( ; i < 4; i++) printf("%s\n", 13 ); 14. 以下程序的输出结果是 14 #include <stdlib.h> #include <string.h> { char *p, *q, *r; p = q = r = (char*)malloc(sizeof(char) * 20); strcpy(p, "attaboy,welcome!"); printf( %c%c%c\n, p[11], q[3], r[4]); free(p); 15. 设文件 test.txt 中原已写入字符串 Begin, 执行以下程序后, 文件中的内容为 14 { FILE *fp; fp = fopen("test.txt", "w+"); fputs("test", fp); fclose(fp); 参考答案
1-5 ADDAD 6-10 CBCAD 11-15 AABCB 16-20 DADCA 21-25 CACAD 26-30 BADCB 31-35 CADDC 36-40 DCBDA 1 n - 1 2 29 3 数据操纵语言 4 关系 5 面向对象 6 a=1,b=2 7 2 8 2 9 k <= n 10 074 11 rgb 12 572 13 a[i] 14 cab 15 test