1、全国计算机等级考试二级 C 语言真题 2012 年 9 月及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(1)(10)、(21)(4(总题数:40,分数:70.00)1.下列链表中,其逻辑结构属于非线性结构的是 (分数:2.00)A.双向链表B.带链的栈C.二叉链表D.循环链表2.设循环队列的存储空间为 Q(1, 35),初始状态为 front = rear = 35,现经过一系列入队与退运算后,front = 15, rear = 15, 则循环队列中的元素个数为 (分数:2.00)A.20B.0 或者 35C.15D.163.下列关于栈的叙述中,正确的是 (分数:2.00
2、)A.栈底元素一定是最后入栈的元素B.栈操作遵循先进后出的原则C.栈顶元素一定是最先入栈的元素D.以上三种说法都不对4.在关系数据库中,用来表示实体间联系的是 (分数:2.00)A.网状结构B.树状结构C.属性D.二维表5.公司中有多个部门和多名职员,每个职员只能属于一个部门,一个部门可以有多名职员,则实体部门和职员间的联系是 (分数:2.00)A.1 : m 联系B.m : n 联系C.1 : 1 联系D.m : 1 联系6.有两个关系 R 和 S 如下: (分数:2.00)A.自然连接B.并C.选择D.投影7.数据字典(DD)所定义的对象都包含于 (分数:2.00)A.软件结构图B.方框图
3、C.数据流图(DFC 型)D.程序流程图8.软件需求规格说明书的作用不包括 (分数:2.00)A.软件设计的依据B.软件可行性研究的依据C.软件验收的依据D.用户与开发人员对软件要做什么的共同理解9.下面属于黑盒测试方法的是 (分数:2.00)A.边界值分析B.路径覆盖C.语句覆盖D.逻辑覆盖10.下面不属于软件设计阶段任务的是 (分数:2.00)A.制定软件确认测试计划B.数据库设计C.软件总体设计D.算法设计11. 以下叙述正确的是 (分数:1.00)A.在 C 语言程序中,main 函数必须放在其它函数是最前面B.每个后缀为.C 的 C 语言源程序都可以单独进行编译C.在 C 语言程序中
4、,只有 main 函数才可以单独进行编译D.每个后缀为.C 的 C 语言源程序都应该包含一个 main 函数12.C 语言中的标识符分为关键字、预定义标识符和用户定义标识符,以下叙述正确的是 (分数:1.00)A.预定义标识符(如库函数中的函数名)可以用作用户标识符,但失去原有含义B.用户标识符可以由字母和数字任意顺序组成C.在标识符中大写字母和小写字母被认为是相同的字符D.关键字可用用户标识符,但失去原有含义13.以下选项中表示一个合法的常量是(说明:符号表示空格) (分数:1.00)A.999B.0XabC.123E0.2D.2.7e14.C 语言主要是借助以下哪个功能来实现程序模块化 (
5、分数:1.00)A.定义函数B.定义常量和外部变量C.三种基本结构语句D.丰富的数据类型15.以下叙述中错误的是 (分数:1.00)A.非零的数值型常量有正值和负值的区分B.常量是在程序运行过程中值不能被改变的量C.定义符号常量必须用类型名来设定常量的类型D.用符号名表示的常量叫符号常量16.若有定义和语句:int a, b; scanf(%d,%d, 以下选项中的输入数据,不能把值 3 赋给变量 a,5 赋给变量 b 的是 (分数:1.00)A.3,5,B.3,5,4C.3 ,5D.3,517.C 语言中 char 类型数据占字节数为 (分数:1.00)A.3B.4C.1D.218.以下关系
6、表达式中,结果为“假“的是 (分数:1.00)A.(3 + 4) 6B.(3 != 4) 2C.3 = A ai0 = aj0; aj0 = t; puts(a1); 程序运行后的输出结果是 (分数:2.00)A.fwoB.fixC.twoD.owo33.有以下程序 #include int a = 1, b = 2; void fun1(int a,int b) printf(“%d %d “, a, b); void fun2() a = 3; b = 4; main() fun1(5, 6); fun2(); printf(“%d %d/n“, a, b); 程序运行后的输出结果是 (分
7、数:2.00)A.1 2 5 6B.5 6 3 4C.5 6 1 2D.3 4 5 634.有以下程序 #include int func(int n) static int num=1; num = num + n; printf(“%d “, num); main() func(3); func(4); printf(“/n“); 程序运行后的输出结果是 (分数:2.00)A.4 8B.3 4C.3 5D.4 535.有以下程序 #include #include void fun(int *p1, int *p2, int *s) s = (int*)malloc(sizeof(int)
8、; *s = *p1 + *p2; free(s); main() int a=1, b=40, *q = fun( printf(“%d/n“, *q); 程序运行后的结果是 (分数:2.00)A.42B.0C.1D.4136.有以下程序 #include struct STUchar name9; char sex; int score2; void f(struct STU a) struct STU b = “Zhao“, m, 85, 90; a1 = b; main() struct STU c2 = “Qian“, f, 95, 92, “Sun“, m, 98, 99; f(c
9、); printf(“%s,%c,%d,%d,“, c0.name, c0.sex, c0.score0, c0.score1); printf(“%s,%c,%d,%d,“, c1.name, c1.sex, c1.score0, c1.score1); 程序运行后输出结果是 (分数:2.00)A.Zhao,m,85,90,Sun,m,98,99B.Zhao,m,85,90,Qian,f,95,92C.Qian,f,95,92,Sun,m,98,99D.Qian,f,95,92,Zhao,m,85,9037.以下叙述中错误的是 (分数:2.00)A.可以用 typedef 说明的新类型名来定
10、义变量B.typedef 说明的新类型名必须使用大写字母,否则会出现编译错误C.用 typedef 可以为基本数据类型说明一个新名称D.用 typedef 说明新类型的作用是用一个新的标识符来代表已存在的类型名38.以下叙述中错误的是 (分数:2.00)A.函数的返回值类型不能是结构体类型,只能是简单类型B.函数可以返回指向结构体变量的指针C.可以通过指向结构体变量的指针访问所指结构体变量的任何成员D.只要类型相同,结构体变量之间可以整体赋值39.若有定义语句 int b = 2;则表达式(b *c) c = a; return c; main1 int i, *p = r = st(p);
11、printf(“%d/n“, *r); 程序运行后的结果是 11 。 (分数:2.00)填空项 1:_52.以下程序的输出结果是 12 。 #include #define N 3 #define M(n) (N+1)*n main1 int x; x = 2 * (N + M(2); printf(“%d/n“, x); (分数:2.00)填空项 1:_53.若有定义语句:char str = “0“;,则字符串 str 在内在中实际占 13 字节。(分数:2.00)填空项 1:_54.有以下程序 #include int fun(int n) if(n = 0) return(1); re
12、turn(fun(n - 1) * n); main1 int t; t = fun(3); printf(“%d/n“, t); 程序运行后输出结果是 14 。 (分数:2.00)填空项 1:_55.以下函数的功能是输出链表结点中的数据,形参指针 h 已指向如下链表 (分数:2.00)填空项 1:_全国计算机等级考试二级 C 语言真题 2012 年 9 月答案解析(总分:100.00,做题时间:90 分钟)一、选择题(1)(10)、(21)(4(总题数:40,分数:70.00)1.下列链表中,其逻辑结构属于非线性结构的是 (分数:2.00)A.双向链表B.带链的栈C.二叉链表 D.循环链表解
13、析:2.设循环队列的存储空间为 Q(1, 35),初始状态为 front = rear = 35,现经过一系列入队与退运算后,front = 15, rear = 15, 则循环队列中的元素个数为 (分数:2.00)A.20B.0 或者 35 C.15D.16解析:3.下列关于栈的叙述中,正确的是 (分数:2.00)A.栈底元素一定是最后入栈的元素B.栈操作遵循先进后出的原则 C.栈顶元素一定是最先入栈的元素D.以上三种说法都不对解析:4.在关系数据库中,用来表示实体间联系的是 (分数:2.00)A.网状结构B.树状结构C.属性D.二维表 解析:5.公司中有多个部门和多名职员,每个职员只能属于
14、一个部门,一个部门可以有多名职员,则实体部门和职员间的联系是 (分数:2.00)A.1 : m 联系 B.m : n 联系C.1 : 1 联系D.m : 1 联系解析:6.有两个关系 R 和 S 如下: (分数:2.00)A.自然连接B.并C.选择 D.投影解析:7.数据字典(DD)所定义的对象都包含于 (分数:2.00)A.软件结构图B.方框图C.数据流图(DFC 型) D.程序流程图解析:8.软件需求规格说明书的作用不包括 (分数:2.00)A.软件设计的依据B.软件可行性研究的依据 C.软件验收的依据D.用户与开发人员对软件要做什么的共同理解解析:9.下面属于黑盒测试方法的是 (分数:2
15、.00)A.边界值分析 B.路径覆盖C.语句覆盖D.逻辑覆盖解析:10.下面不属于软件设计阶段任务的是 (分数:2.00)A.制定软件确认测试计划 B.数据库设计C.软件总体设计D.算法设计解析:11. 以下叙述正确的是 (分数:1.00)A.在 C 语言程序中,main 函数必须放在其它函数是最前面B.每个后缀为.C 的 C 语言源程序都可以单独进行编译 C.在 C 语言程序中,只有 main 函数才可以单独进行编译D.每个后缀为.C 的 C 语言源程序都应该包含一个 main 函数解析:12.C 语言中的标识符分为关键字、预定义标识符和用户定义标识符,以下叙述正确的是 (分数:1.00)A
16、.预定义标识符(如库函数中的函数名)可以用作用户标识符,但失去原有含义 B.用户标识符可以由字母和数字任意顺序组成C.在标识符中大写字母和小写字母被认为是相同的字符D.关键字可用用户标识符,但失去原有含义解析:13.以下选项中表示一个合法的常量是(说明:符号表示空格) (分数:1.00)A.999B.0Xab C.123E0.2D.2.7e解析:14.C 语言主要是借助以下哪个功能来实现程序模块化 (分数:1.00)A.定义函数 B.定义常量和外部变量C.三种基本结构语句D.丰富的数据类型解析:15.以下叙述中错误的是 (分数:1.00)A.非零的数值型常量有正值和负值的区分B.常量是在程序运
17、行过程中值不能被改变的量C.定义符号常量必须用类型名来设定常量的类型 D.用符号名表示的常量叫符号常量解析:16.若有定义和语句:int a, b; scanf(%d,%d, 以下选项中的输入数据,不能把值 3 赋给变量 a,5 赋给变量 b 的是 (分数:1.00)A.3,5,B.3,5,4C.3 ,5 D.3,5解析:17.C 语言中 char 类型数据占字节数为 (分数:1.00)A.3B.4C.1 D.2解析:18.以下关系表达式中,结果为“假“的是 (分数:1.00)A.(3 + 4) 6B.(3 != 4) 2 C.3 = A ai0 = aj0; aj0 = t; puts(a1
18、); 程序运行后的输出结果是 (分数:2.00)A.fwo B.fixC.twoD.owo解析:33.有以下程序 #include int a = 1, b = 2; void fun1(int a,int b) printf(“%d %d “, a, b); void fun2() a = 3; b = 4; main() fun1(5, 6); fun2(); printf(“%d %d/n“, a, b); 程序运行后的输出结果是 (分数:2.00)A.1 2 5 6B.5 6 3 4 C.5 6 1 2D.3 4 5 6解析:34.有以下程序 #include int func(int
19、 n) static int num=1; num = num + n; printf(“%d “, num); main() func(3); func(4); printf(“/n“); 程序运行后的输出结果是 (分数:2.00)A.4 8 B.3 4C.3 5D.4 5解析:35.有以下程序 #include #include void fun(int *p1, int *p2, int *s) s = (int*)malloc(sizeof(int); *s = *p1 + *p2; free(s); main() int a=1, b=40, *q = fun( printf(“%d
20、/n“, *q); 程序运行后的结果是 (分数:2.00)A.42B.0C.1 D.41解析:36.有以下程序 #include struct STUchar name9; char sex; int score2; void f(struct STU a) struct STU b = “Zhao“, m, 85, 90; a1 = b; main() struct STU c2 = “Qian“, f, 95, 92, “Sun“, m, 98, 99; f(c); printf(“%s,%c,%d,%d,“, c0.name, c0.sex, c0.score0, c0.score1);
21、 printf(“%s,%c,%d,%d,“, c1.name, c1.sex, c1.score0, c1.score1); 程序运行后输出结果是 (分数:2.00)A.Zhao,m,85,90,Sun,m,98,99B.Zhao,m,85,90,Qian,f,95,92C.Qian,f,95,92,Sun,m,98,99D.Qian,f,95,92,Zhao,m,85,90 解析:37.以下叙述中错误的是 (分数:2.00)A.可以用 typedef 说明的新类型名来定义变量B.typedef 说明的新类型名必须使用大写字母,否则会出现编译错误 C.用 typedef 可以为基本数据类型说
22、明一个新名称D.用 typedef 说明新类型的作用是用一个新的标识符来代表已存在的类型名解析:38.以下叙述中错误的是 (分数:2.00)A.函数的返回值类型不能是结构体类型,只能是简单类型 B.函数可以返回指向结构体变量的指针C.可以通过指向结构体变量的指针访问所指结构体变量的任何成员D.只要类型相同,结构体变量之间可以整体赋值解析:39.若有定义语句 int b = 2;则表达式(b b)解析:47.以下程序运行时从键盘输入:1.0 2.0 ,输出结果是:1.000000 2.000000,请填空 #include main1 double a; float b; scanf(“ 7 “
23、, printf(“%f %f/n“, a, b); (分数:2.00)填空项 1:_ (正确答案:%lf %f)解析:48.有以下程序 #include main1 int n1 = 0, n2 = 0, n3 = 0; char ch; while (ch = getchar2) != !) switch(ch) case 1 : case 3 : n1+; break; case 2 : case 4 : n2+; break; default : n3+; break; printf(“%d %d %d/n“, n1, n2, n3); 若程序运行时输入 01234567!,则输出结果
24、是 8 。 (分数:2.00)填空项 1:_ (正确答案:224)解析:49.有以下程序 #include main 1 int i, sum = 0; for (i = 1; i *c) c = a; return c; main1 int i, *p = r = st(p); printf(“%d/n“, *r); 程序运行后的结果是 11 。 (分数:2.00)填空项 1:_ (正确答案:7)解析:52.以下程序的输出结果是 12 。 #include #define N 3 #define M(n) (N+1)*n main1 int x; x = 2 * (N + M(2); pri
25、ntf(“%d/n“, x); (分数:2.00)填空项 1:_ (正确答案:22)解析:53.若有定义语句:char str = “0“;,则字符串 str 在内在中实际占 13 字节。(分数:2.00)填空项 1:_ (正确答案:2)解析:54.有以下程序 #include int fun(int n) if(n = 0) return(1); return(fun(n - 1) * n); main1 int t; t = fun(3); printf(“%d/n“, t); 程序运行后输出结果是 14 。 (分数:2.00)填空项 1:_ (正确答案:6)解析:55.以下函数的功能是输出链表结点中的数据,形参指针 h 已指向如下链表 (分数:2.00)填空项 1:_ (正确答案:p-next)解析: