1、2009年 9月国家二级( C语言)笔试真题试卷及答案与解析 1 下列数据结构中,属于非线性结构的是 ( A)循环队列 ( B)带链队列 ( C)二叉树 ( D)带链栈 2 下列数据结构中,能够按照 “先进后出 ”原则存取数据的是 ( A)循环队列 ( B)栈 ( C)队列 ( D)二叉树 3 对于循环队列,下列叙述中正确的是 ( A)队头指针是固定不变的 ( B)队头指针一定大于队尾指针 ( C)队头指针一定小于队尾指针 ( D)队头指针可以大于队尾指针,也可以小于队尾指针 4 算法的空间复杂度是 指 ( A)算法在执行过程中所需要的计算机存储空间 ( B)算法所处理的数据量 ( C)算法程
2、序中的语句或指令条数 ( D)算法在执行过程中所需要的临时工作单元数 5 软件设计中划分模块的一个准则是 ( A)低内聚低耦合 ( B)高内聚低耦合 ( C)低内聚高耦合 ( D)高内聚高耦合 6 下列选项中不属于结构化程序设计原则的是 ( A)可封装 ( B)自顶向下 ( C)模块化 ( D)逐步求精 7 软件详细设计产生的图如下: 该图是 ( A) Ns图 ( B) PAD图 ( C)程序流程图 ( D) E-R图 8 数据库管理系统是 ( A)操作系统的一部分 ( B)在操作系统支持下的系统软件 ( C)一种编译系统 ( D)一种操作系统 9 在 E-R图中,用来表示实体联系的图形是 (
3、 A)椭圆形 ( B)矩形 ( C)菱形 ( D)三角形 10 有三个关系 R, s和 T如下:其中关系 T由关系 R和 S通过某种操作得到,该操作为 ( A)选择 ( B)投影 ( C)交 ( D)并 11 以下叙述中正确的是 ( A)程序设计的任务就是编写程序代码并上机调试 ( B)程序设计的任务就是确定所用数据结构 ( C)程序设计的任务就是确定所用算法 ( D)以上三种说法都不完整 12 以下选项中,能用作用户标识符的是 ( A) void ( B) 8_8 ( C) _0_ ( D) unsigned 13 阅读以下程序 #include main( ) int case; floa
4、t printF; printf(“请输入 2个数: ”); scanf(“ d f”, a+=b; pfinff(“ d”, A); main( ) int e=20; fun(C); a+=e; printf(“ d n”, A); 程序运行后的输出结果是【 】。 52 设有定义: struct person int ID; char name12; P; 请将 scanf(“ d”, 【 】 );语句补充完整,使其能够为结构体变量 P的成员 ID正确读人数据。 53 有以下程序 #jnclude main( ) char a20=“How ale you?”, b20; scanf(“
5、s”, B); pfinff(“ s s n”, a, B); 程序运行时从键盘输入: How are you? 则输出结果为【 】。 54 有以下程序 #include typedef struct int num; double s; REC; void funl(REC x)x nllm=23; x s=88 5; main( ) REC a=16, 90 0); funl(A); prinff(“ d n”, a num); 程序运行后的输出结果是【 】。 55 有以下程序 #include fun(int x) if(x 2O)fun(x 2); prinff(“ d ”, x);
6、main( ) fun(6), printf(“ n”); 程序运行后的输出结果是【 】。 2009年 9月国家 二级( C语言)笔试真题试卷答案与解析 1 【正确答案】 C 【试题解析】 根据数据结构中各数据元素之间前后关系的复杂程度,一般将数据结构分为两大类型:线性结构与非线性结构。线性结构表示数据元素之间为一对一的关系,非线性结构表示数据元素之间为一对多或者多对一的关系。根据各种结构的定义知二叉树是一种非线性结构。 2 【正确答案】 B 【试题解析】 栈是限定只在一端进行插入与删除的线性表,通常称插入、删除的这一端为栈顶,另一端为栈底。栈顶元素总是后被插入的元素,也是最先被删除的元素;栈
7、底元素总是 最先被插入的元素,也是最后才能被删除的元素。栈是按照 “先进后出 ”或 “后进先出 ”的原则组织数据的。 3 【正确答案】 D 【试题解析】 循环队列是将顺序队列首尾相连形成的,随着插人元素或删除元素的进行,其队头指针及队尾指针是在不断变化的,有时可能会出现队头指针大于队尾指针的情况,也可能是队尾指针大于队头指针,故答案为 D)。 4 【正确答案】 A 【试题解析】 算法的空间复杂度是指:算法执行过程中所需的存储空间。一个算法所占用的存储空间包括算法程序所占的空间、输入的初始数据所占的存储空间以及 算法执行过程中所需要的额外空间。 5 【正确答案】 B 【试题解析】 模块划分应考虑
8、的因素包括模块之间的耦合和内聚。一般来说,要求模块之间的耦合尽可能地低,即模块尽可能独立,要求模块的内聚程度尽可能地高,即遵循高内聚、低耦合的原则。 6 【正确答案】 A 【试题解析】 模块化、自顶向下、逐步求精都是结构化程序设计的原则;可封装是面向对象程序设计原则。 7 【正确答案】 C 【试题解析】 Ns图是由若干基本框图构成的流程图,其特点是没有流程线;PAD图即问题分析图 (Problem Anal ysis Diagram),它是一种由左往右展开的二维树型结构;程序流程图用于描述问题解决的过程和步骤,其中方框表示处理步骤,菱形框表示逻辑判断,箭头表示控制流向; ER图即实体一联系图
9、(Entity:Relationship Diagram),用来描述现实世界的概念模型,构成元素有实体、属性和联系,分别用矩形、椭圆形和菱形表示。本题答案为 C)。 8 【正确答案】 B 【试题解析】 数据库管理系统是指位于用户与操作系统之间的数据管理软件。数据库管理系统是为数据库建立、使用和维护而配置 的软件。 9 【正确答案】 C 【试题解析】 E R图中用矩形表示实体 (等同于表 ),用椭圆形表示实体的属性(等同于表中字段 ),用菱形表示实体关系 (等同于外键 )。 10 【正确答案】 D 【试题解析】 两个相同结构关系的并是由属于这两个关系的元组组成的集合。 11 【正确答案】 D 【
10、试题解析】 程序设计通常分为问题建模、算法设计、编写代码和编译调试四个阶段。所以选项 A)、 B)、 c)说法都不完整。 12 【正确答案】 C 【试题解析】 c语言的标识符命名规则为: 只能由 字母、数值和下划线 3种字符组成; 第一个字符必须是字母或下划线; 不能与 c语言中的关键字或保留字相同。 13 【正确答案】 A 【试题解析】 标识符不能与 c编译系统已经预定义的、具有特殊用途的保留标识符 (即关键字 )同名,否则程序在编译时会出现错误。题目源程序中使用了已经预定义的关键字 car,所以将出现错误。 14 【正确答案】 B 【试题解析】 (int)(double)9 2)的值为 4
11、, (9) 2的值为 1,因此 (int)(double)9 2)-(9) 2的值为 3。 15 【正 确答案】 B 【试题解析】 x-=x+x可化为: x=x-(x+x),由于 x初始值为 10,所以计算后,x=10-20=-10,因此选 B)。 16 【正确答案】 D 【试题解析】 执行第一个 pfinff语句时, b=a十 b=1,所以输出 1,执行第二个prinff语句时, 8=2+b=2,所以输出结果为 2。 17 【正确答案】 C 【试题解析】 逗号表达式的求解过程是:按表达式顺序从左往右依次求解。本题中由于判断条件 ab的值为假,所以选项 A)、 B)、 D)中 if语句后面的语
12、句均未被执行,而 c)中的后两条语句 a=b和 b; c被执行,因此选项 c)的执行效果与其他三个不同。 18 【正确答案】 A 【试题解析】 第一次循环时, k=1,在 switch语句中,先执行 default后面的语句,即 c=c+k=1,因为没有 break语句,所以不会跳出 switch结构,会接着执行case2后面的语句,即 c=c+1=2,然后跳出 switch;第二次循环时, k=2,直接执行 case2后面的语句,即 c=c+1=3,然后跳出 switch语句,结束循环,执行输出语句。 19 【正确答案】 A 【试题解析 】 表达式 k=ab?(bc?1: 0): 0表示:如
13、果 (ab)条件为真,则 k取值 (bc?1: 0),否则 k取值 0;当 ab的情况下,如果 bc,则 k值为 1,否则为0。所以该表达式与选项 A)功能相同。 20 【正确答案】 B 【试题解析】 在字符串数组 sj中,只有当下标 i=3和 i=4时,才满足 if条件,所以 n的值从 0增加两次,结果为 2。 21 【正确答案】 D 【试题解析】 本题考查逻辑运算符的 “短路 ”现象,由于 k的值为 0,表达式首先去求 k+的值,因为表达式 k+的值为 0,系统完全 可以确定逻辑表达式的运算结果总是为 0,因此将跳过 n+2,不再对它进行求值,即 k的值加 1, n的值不变。 22 【正确
14、答案】 C 【试题解析】 aa是字符串,不用加上单引号。 23 【正确答案】 A 【试题解析】 c1输出字符的 ASCII码比字母 A大 4,即字母 E: c2以十进制数字形式输出,因此可以判断本题答案为 A)。 24 【正确答案】 C 【试题解析】 程序运行后,首先输出的是 p的值,然后再输出 a的值。 p=d+,得到 p的值为 d的初始值 2; a的值不变,仍为 1。 25 【正 确答案】 D 【试题解析】 对 max赋初值,应该要放在循环语句之前,不然每次循环都将是从 MIN开始比较。 26 【正确答案】 B 【试题解析】 m和 n的值不变,输出结果为 1, 2;指针 *p和 *q交换了
15、指向的位置,即十 p= n, *q= m,输出结果分别为 2, 1。 27 【正确答案】 A 【试题解析】 直接将二维数组 a赋给 p不合法,两者类型不匹配。 28 【正确答案】 C 【试题解析】 可以将二维数组 str看成一个是一个特殊的一维数组,其元素也是一个数组。那么, strO为 “One*World” , str1为 “One*Dream!”。 29 【正确答案】 C 【试题解析】 第一次循环, i=0, i 2=0, a0 2=0, a0=a0+1=3;第二次循环, i=l, 1 2=1, a1=0;第三次循环, i=2, a2 2=l, a2=a2-1=4;第四次循环, i=3,
16、 i 2=1, a3=0。 30 【正确答案】 B 【试题解析】 strlen( )用来返回字符串的长度,而 si-zeof( )返回的是一个对象或者类型所占的内存字节数,即数组 所占的内存。 31 【正确答案】 D 【试题解析】 字符数组中的内容既可以是字符,也可以是字符串,选项 D)说法不正确。 32 【正确答案】 A 【试题解析】 表达式 *b=*a是将 a所指的字符赋给 b所指的空间,然后,指针 a和 b依次后移,直到到达指针 a所指字符串的结尾。 33 【正确答案】 A 【试题解析】 函数指针的定义形式是:数据类型标识符 (*指针变量名 )( )。void(*pf)( )定义了一个没
17、有返回值的函数指针 pf,在给函数指针变量赋值时,只需给出函数名而不必给出参数 。所以给 pf赋值时,只把函数名 fun赋给 pf即可。所以正确答案为选项 A)。 34 【正确答案】 C 【试题解析】 s=f(a)表达式第一次调用 f(n)函数时。 f(n)函数运行结果为 n: 4,a=2,即 s等于 4; s=g+f(a)表达式第二次涮用 f(n)函数时, f(n)函数运行结果为n=5,所以得到 s值为 9。 35 【正确答案】 A 【试题解析】 s=f(a+1)=a+1*a+1*a+1=10; s=f(a+1)=(a+1)*(a+1)*(a+1)=64。 36 【正确答案】 B 【试题解析
18、】 定义结构体变量有三种方式: 先声明结构体类型,再定义变量名,如选项 A)所示; 在声明类型的同时定义变量,如选项 C)所示; 直接定义结构体类型变量,如选项 D)所示。 37 【正确答案】 A 【试题解析】 选项 B)、 D)中,没有为字符串分配空间。因此不能用 c指向字符串。选项 c)中 getchat( )函数返回一个字符,不能将字符赋给字符指针 c。选项 A)中首先定义了字符数组 str,然后将 str的首地址赋给指针 c,这样就使指针 c指向了字符串 “string”。 38 【正确答案】 D 【试题解析】 在主函数中,通过 a=f(a)实现幽数调用,所以输出的结构体变量相应变为
19、1002, ChangRong, 1202 0。 39 【正确答案】 C 【试题解析】 8用二进制表示为 1000,右移 1位后为 0100,即十进制 4。 40 【正确答案】 C 【试题解析】 文件由数据序列组成,可以构成二进制文件,也可以构成文本文件。 41 【正确答案】 14 【试题解析】 在二叉树中,度为 O的结点数是度为 2的结点数加 1,故二叉树中结点数的总和为度为 O的结点数、度为 1的结点数及 度为 2的结点数 i者相加,得出结果为 14个结点。 42 【正确答案】 逻辑判断 【试题解析】 绘制流程图时事实描述用椭圆形表示、行动方案用矩形表示、问题用菱形表示、箭头代表流动方向。
20、 43 【正确答案】 需求分析 【试题解析】 需求分析阶段的工作主要包括需求获取、需求分析、编写需求规格说明书和需求评审等 4方面,产生的主要文档为软件需求规格说明书。它可以为用户、分析人员和设计人员之间的交流提供方便,直接支持目标软件系统的确认,也可以作为控制软件开发进程的依据。 44 【正确答案】 多对多 【试题解析】 一名学生可以选择多门课程,一门课程也可以由多名学生选择,因此是多对多的联系。 45 【正确答案】 身份证号 【试题解析】 主关键字是表中区别不同的记录的标识,在该表中只有身份证号能具有这个作用,所以用其作为主关键字。 46 【正确答案】 5 【试题解析】 a+的含义是在使用
21、 a值以后,使 a值加 1,所以 a+的值为 5。 47 【正确答案】 1 【试题解析】 y=(int)(x 5) 2=(int)(3 4) 2=3 2=l。 48 【正确答案】 10 【试题解析】 第一个 prinff语句输出的结果是逻辑表达式 (x0I Ix0 x1,循环继续;第二次循环执行后 b=1, a=5,不满足条件 bl,结束循环。所以输出的 a值为 5。 50 【正确答案】 0 1 123 【试题解析】 第一个 printf语句输出结果为 0 1。循环体总共循环三次,第 一次循环结果为, f=1, n=1, f2=1;第二次循环结果为 f=2, n=1, f2=2;第三次循环结果
22、为 f=3, f1=2, f2=3。 51 【正确答案】 3025 【试题解析】 fun(c)调用函数 fun(b),函数执行结果为 a=a+b=10+20=30;调用完函数后,主函数继续执行,输出结果 a=a+c=5+20=25。 52 【正确答案】 p ID 【试题解析】 结构体成员的引用通过符号 “ ”来表示,通过 scard语句对变量进行赋值时,要用取地址符。 53 【正确答案】 How are you?How 【试题解析】 用 s格式输入字符串时,空格和回车都做为输人数据的分隔符,不能被读入,因此数组 b的输出结果为 How。 54 【正确答案】 16 【试题解析】 主函数中,通过 funl( )函数将 a值传递给 x。但没有把形参 x的值返回,此时变量 a的值并没有发生变化,所以输出 a hum的值为 16。 55 【正确答案】 1 3 6 【试题解析】 依次执行 fun(6), fun(3), fun(1),当执行 fun(6)时要调用 fun(3),执行 fun(3)时要调用 fun(1),所以输出的结果为 1 3 6。