1、国家二级( C+)笔试模拟试卷 116及答案与解析 1 下列叙述中正确的是 ( A)线性表是线性结构 ( B)栈与队列是非线性结构 ( C)线性链表是非线性结构 ( D)二又树是线性结构 2 下列数据结构中,插入时不需要移动其他元素的是 ( A)有序线性表 ( B)无序线性表 ( C)栈和队列 ( D)以上三种都不是 3 数据的存储结构是指 ( A)数据所占的存储空间量 ( B)数据的逻辑结构在计算机中的表示 ( C)数据在计算机中的顺序存储方式 ( D)存储在外存中的数据 4 一棵二叉树中共 有 70个叶子结点与 80个度为 1的结点,则该二叉树中的总结点数为 ( A) 221 ( B) 2
2、19 ( C) 231 ( D) 229 5 下列关于栈的叙述中正确的是 ( A)只能在栈顶插入元素,而不能删除元素 ( B)可以插入元素,也能删除元素 ( C)插入元素时需要移动栈中所有的元素 ( D)删除元素时需要移动栈中所有的元素 6 下列叙述中正确的是 ( A)软件测试的目的是证明程序是否正确 ( B)软件测试的目的是尽可能多的发现程序中的错误 ( C)软件测试的目的是使程序运行结果正确 ( D)软件测试的 目的是使程序符合结构化原则 7 下列叙述中正确的是 ( A)在面向对象的程序设计中,各个对象之间应相对独立,相互依赖性小 ( B)在面向对象的程序设计中,各个对象之间应具有密切的联
3、系 ( C)在面向对象的程序设计中,各个对象应都是公用的 ( D)上述三种说法都不对 8 下列叙述中正确的是 ( A)数据库设计是指设计数据库系统 ( B)数据库设计是指设计数据库管理系统 ( C)数据库设计是指在已有数据库管理系统的基础上建立数据库 ( D)以上三种说法都不对 9 设有二元关系 R和三元关系 S,下列运算 中合法的是 ( A) RS ( B) R S ( C) R-S ( D) RS 10 下列关于 E-R图的描述中正确的是 ( A) E-R图只能表示实体之间的联系 ( B) E-R图只能表示实体和实体之间的联系 ( C) E-R图只能表示实体和属性 ( D) E-R图能表示
4、实体、属性和实体之间的联系 11 以下对 C/C+语言函数的描述中,正确的是 ( A) C程序由一个或一个以上的函数组成 ( B) C函数既可以嵌套定义又可以递归调用 ( C)函数必须有返回值,否则不能使用函数 ( D) C+程序中调用关系的所有函 数必须放在同一个程序文件中 12 以下正确的描述为 ( A)每个 C+语言程序必须在开头用预处理命令: ( B)预处理命令必须位于 C+源程序的首部 ( C)在 C+语言中预处理命令都以 “#”开头 ( D) C+语言的预处理命令只能实现宏定义和条件编译的功能 13 下列叙述中正确的是 ( A)全局变量的作用域一定比局部变量的作用域范围大 ( B)
5、静态类别变量的生存期贯穿于整个程序的运行期间 ( C)函数的形参都属于全局变量 ( D)未在定义语句中赋初值的 auto变量和 static变量的初值都是随机值 14 以下选项中合法的用户标识符是 ( A) long ( B) _2 Test ( C) 3 Dmax ( D) A, dat 15 已知大写字母 A的 ASCII码值是 65,小写字母 a的 ASCII码是 97,则用八进制表示的字符常量 101是 ( A)字符 A ( B)字符 a ( C)字符 e ( D)非法的常量 16 下面对宏定义的描述中不正确的是 ( A)宏不存在类型问题,宏名无类型,它的参数也无类型 ( B)宏替换不
6、占用运行时间 ( C)宏替换时先求出实参表达式的值,然后代入形参数运算求值 ( D) 其实,宏替换只不过是字符替代而已 17 下列不是循环语句的是 ( A) while语句 ( B) do. while语句 ( C) for语句 ( D) if. else语句 18 如果 a 1, b 2, c=3, d 4,则表达式 a b? a: c d? c: d的值为 ( A) 1 ( B) 2 ( C) 3 ( D) 4 19 有关构造函数的说法中错误的是 ( A)构造函数名字和类的名字一样 ( B)构造函数在说明类变量时自动执行 ( C)构造函数无任何函数类型 ( D)构造函数有且只有一个 20
7、以下 有关析构函数的叙述不正确的是 ( A)一个类只能定义一个析构函数 ( B)析构函数和构造函数一样可以有形参 ( C)析构函数不允许有返回值 ( D)析构函数名前必须冠有符号 “ ” 21 以下关于静态成员变量的叙述不正确的是 ( A)静态成员变量为类的所有对象所公有 ( B)静态成员变量可以在类内任何位置上声明 ( C)静态成员变量的赋初值必须放在类外 ( D)定义静态成员变量时必须赋初值 22 若执行下面的程序时,从键盘上输入 3和 4,则输出结果是 main() int a,b, s; cin a b; s=a; if(a B) s b: s=s*s; cout s end1; (
8、A) 14 ( B) 16 ( C) 18 ( D) 20 23 以下程序不用第三个变量实现将两个数进行对调的操作,划线处应为main() int a,b; scanf(“ % d%d“, cin a b;cout “a= “a “b = “ b; a=a+b; b=a-b;a= _; cout “a= “ a “b= “ b end1; ( A) a+b ( B) a-b ( C) b*a ( D) a/b 24 如下程序的输出结果是 main()float x=2.0, y; if(x 0.0)y=0.0; else if(x10.0)y= 1.0/x; else y= 1.0cout y
9、 end1 ( A) 0 ( B) 0.25 ( C) 0.5 ( D) 1 25 如下程序的输出结果是 main()inta=2, b=-1, c=2;if(a B) if(b 0)c=0; else c+;cout c end1; ( A) 0 ( B) 1 ( C) 2 ( D) 3 26 有以下程序段 int k 0; while(k 1)k+; while 如循环执行的次数是 ( A)无限次 ( B)有语法错,不能执行 ( C)一次也不执行 ( D)执行 1次 27 以下程序的输出结果是 main() intnum= 0;while(num = 2) num+; cout num;
10、( A) 1234 ( B) 123 ( C) 12 ( D) 1 28 设有数组定义: char array = “China“;则数组 array 所占的空间为 ( A) 4个字节 ( B) 5个字节 ( C) 6个字节 ( D) 7个字节 29 以下程序的输出结果是 intf() static int i= 0; int s=1; s+=i; i+; return s;main( ) inti, a=0; for(i=0; i5;i+)a+=f(); cout a end1; ( A) 20 ( B) 24 ( C) 25 ( D) 15 30 有以下程序 main( ) int a3=
11、1,2,3,4,5,0,(*pa) 3, i;pa=a;for(i=0;i 3;i+ +) if(i 2) pa1i = pa1i-1;else pa1i = 1;cout a01+a11+a12 end1;执行后输出结果是 ( A) 7 ( B) 6 ( C) 8 ( D)无确定值 31 有以下程序 void fun(int * a, int i, int j) int t; if(i j); t =ai ;ai= aj ;ai= t; fun(a, +i, -j);main() int ai=1,2,3,4,5,6, i; fun(a,0,5); for(i=0; i 6; i+) cou
12、tai;执行后输出结果是 ( A) 654321 ( B) 432156 ( C) 456123 ( D) 123456 32 有以下程序 main() int p7= 11,13,14,15,16,17,18,i=0,k=0; while(i 7 执行后输出结果是 ( A) 58 ( B) 56 ( C) 45 ( D) 24 33 有以下程序 main( ) int i=0,s=0;do if(i%2) i+ +; continue; i+; s+=i; while(i 7)cout s end1; 执行后输出结果是 ( A) 16 ( B) 12 ( C) 28 ( D) 21 34 下
13、列语句中,输出与众不同的是 ( A) cout “ 1. “ setfill( ) “ Hello ! “ end1 ( B) cout “1. “ “ “Hello!“n“; ( C) cout “1. Hello!“ end1; ( D) cout 1. “ setw(7) “Hello! “; 35 阅读以下程序 # include fstream. h void main()ifstream infile;ofstream outfile; stream iofile;iofile. open(“a. txt“, ios: in);iofile. close(); iofile. op
14、en(b. txt“ ,ios: :out):下列描述错误的是 ( A)对象 infile只能用于文件输入操作 ( B)对象 outfile只能用于文件输出操作 ( C)对象 iofile在文件关闭后,不能再打开另一个文件 ( D)对象 iofile可以打开一个文件同时进行输入和输出 36 数据结构的存储结 构包括顺序、索引、散列和【 】四种。 37 在顺序存储结构中进行插入和删除操作比在链表中进行插入和【 】操作的效率低。 38 如果一个对象部分地包含自己,或自己定义自己,则称这个对象是【 】的对象。 39 一棵树的广义表表示为 a(b(c, d(e, f), g(h), i(j, k(x,
15、 y),结点 f的层数为【 】。假定树根结点的层数为 0。 40 一棵树按照左子女 -右兄弟表示法转换成对应的二叉树,则该二叉树中树根结点肯定没有【 】子女。 41 int k=10; float a=3.5, b=6.7, c; c=a+k%3*(int)(a+b)%2/4;则 c的值【 】。 42 若执行下面程序段后的输出为: 345,请填空。 int a, b=3, c=5; a=b c?【 】: c+; cout a b c; 43 一个类中有【 】个构造函数。 44 在 C+类的规定中:静态函数只能给引用类的静态成员和【 】。 国家二级( C+)笔试模拟试卷 116答案与解析 1 【
16、正确答案】 A 【试题解析】 线性表 是线性结构;线性链表是线性表的链式存储结构,因此也是线性结构;栈与队列是特殊的线性表,因此也是线性结构;二叉树是非线性结构。 2 【正确答案】 C 【试题解析】 显然,对于栈和队列来说,插入时不需要势动其他元素。 3 【正确答案】 B 【试题解析】 数据的存储结构是指数据的逻辑结构在计算机中的表示。 4 【正确答案】 B 【试题解析】 二叉树有一个性质:在任意一棵二叉树中,度为。的结点 (即叶子结点 )总是比度为 2的结点多一个,由于本题中的二叉树有 70个叶子结点,因此有69个度为 2的结点。 该二叉树中总的结点数为 度为 2的结点数 +度为 1的结点数
17、 +叶子结点数 69+80+70 219 5 【正确答案】 B 【试题解析】 栈 (stack)是限定在一端进行插入与删除的线性表。 6 【正确答案】 B 【试题解析】 软件测试的目标是在精心控制的环境下执行程序,以发现程序中的错误,给出程序可靠性的鉴定。由此可知,测试不是为了证明程序是正确的,而是在设想程序有错误的前提下进行的,其目的是设法暴露程序中的错误和缺陷。测试只能说明程序有错,而不能证明程序无错 ,希望通过有限次的测试就能发现程序中的所有错误是不可能的,即完全测试是不可能的。 7 【正确答案】 A 【试题解析】 在面向对象的程序设计中,对象是面向对象的软件的基本模块,它是由数据及可以
18、对这些数据施加的操作所组成的统一体,而且对象是以数据为中心的,操作围绕对其数据所需做的处理来设置,没有无关的操作。从模块的独立性考虑,对象内部各种元素彼此结合得很紧密,内聚性强。由于完成对象功能所需要的元素 (数据和方法 )基本上都被封装在对象内部,它与外界的联系自然就比较少,因此,对象之间的耦合通常比较松。因此, 选项 B 与 C中的说法都是错误的,而选项 A中的说法是正确的。 8 【正确答案】 C 【试题解析】 数据库设计是指在已有数据库管理系统的基础上建立数据库。 9 【正确答案】 D 【试题解析】 在并 ( )、交 ()、差 ( )三种运算中,都要求参加运算的两个关系具有相同的属性名表
19、,其运算结果电与它们具有相同的属性名。即它们的表框架是相同的。由此可以看出,本题给出的两个关系 R与 S 其表格框架是不同的 (R是二元关系, S是三元关系 ),因此,它们不能作并 ( )、交 ()、差 ( )这三种运算。而两个不同框架的 关系是可以作笛卡尔积 ()运算的。 10 【正确答案】 D 【试题解析】 E-R(实体 联系, Entity-Relationship)图是设计概念模型的有力工具。在 E-R图中,用三种图框分别表示实体,属性和实体之间的联系: 用矩形框表示实体,框内标明实体名; 用椭圆状框表示实体的属性,框内标明属性名; 用菱形框表示实体问的联系,框内标明联系名; 实体与其
20、属性之间以无向边连接,菱形框与相关实体之间也用无向边连接,并在无向边旁标明联系的类型。 因此,用 E-R图不仅 可以简单明了地描述实体及其相互之间的联系,还可以方便地描述多个实体集之间的联系和一个实体集内部实体之间的联系。 由此可知,选项 A、 B、 C二个选项中的既法都是不对的。 11 【正确答案】 A 【试题解析】 C语言的基本单位是函数,本题考察的就是函数的基本涵义及其使用。 12 【正确答案】 C 【试题解析】 本题中, A和 B 的描述是一样的,故可以捧除。在 C+中,建议用 inline函数取代 C语言中的宏定义功能。 13 【正确答案】 B 【试题解析】 本题考察的是变量的作用域
21、及其 生存期,需要掌握变量类别及其特点。 14 【正确答案】 B 【试题解析】 注意 A选项用了 C+的保留字 long,选项 C使用了数字开头,选项 D中存在空格,这些均是错误的标识。正确答案应为 B。 15 【正确答案】 A 【试题解析】 首先将八进制数转换成十进制数,则发现是 65,故答案为 A。 16 【正确答案】 C 【试题解析】 本题考察对宏的理解。宏其实就是替换,这种替换不是在运行时进行,而是自编译时就完成的。替换时仅仅将表达式展开不进行运算求值。 17 【正确答案】 D 【试题解析】 本题很简单,选项 D是条件语句,不是循环语句。 18 【正确答案】 A 【试题解析】 本题考察
22、问号表达式的嵌套,只要掌握了问号表达式的求解顺序,是可以轻松求解本题的, a b成立,故整个表达式的值是 a,即 1。答案为 A。 19 【正确答案】 D 【试题解析】 本题考察构造函数的定义和使用。构造函数可以重载,故不可能只有一个。 20 【正确答案】 B 【试题解析】 本题考察析构函数的定义和使用,析构函数不能有形参,也没有返回值,故正确答案应为 B。 21 【正确答案】 D 【试题解析】 静态成员变量的引入是为了解决同一类的不同对象间数据共享的需要。因此,类的静态数据成员在定义时不能赋初值。只能在类外赋初值,此外要注意赋值时要用类名进行限制。 22 【正确答案】 B 【试题解析】 按照
23、程序的执行顺序考生可以很快得出正确答案为 B。 23 【正确答案】 B 【试题解析】 本题思路巧妙,分析时可以发现 b=(a+ b)-b,则此时 b 中放的是a,完成交换工作的一半。然后要将 b 放到 a中,将表达式展开,则为 a=(a+ b)-a,此时正好把 b 放到 a中。此时完成 全部的交换。 24 【正确答案】 C 【试题解析】 本题主要考察条件语句的运行规则,考生按照逻辑顺序分析可知正确答案为 C。 25 【正确答案】 C 【试题解析】 本题考察的是 ifelse 语句中的配对原则:与最近的配对,故当 a b 为假时直接执行输出语句,即 c的值是 2,正确答案为 C。 26 【正确答
24、案】 A 【试题解析】 注意本题有个陷阱,马虎的考生将纷纷落马。本来 while中的表达式应为 k=1,而本题却为 k=1,是赋值表达式而不是逻辑表达式。因此,编译器将其值一直认为是 1,因 此表达式一直为真,陷入无限次的循环。 27 【正确答案】 B 【试题解析】 本题考察的是循环次数的判定。有 while后的逻辑表达式可知,整个循环体需要执行 3次,故可直接选定正确答案为 B。 28 【正确答案】 C 【试题解析】 本题考察在 C+语言中,字符串的存放规则。即字符串存放在字符数组中,而且在字符的后面自动插入标识字符串结束的标识符 0,因此,共 6个字符,每个字符占用一个字节,故正确答案为
25、C。 29 【正确答案】 D 【试题解析】 本题考察的是同名局部变量和全局变量的作 用域之间的关系。同时考察了静态变量的特点:退出函数和进入函数并不影响静态变量的值。因此,循环多次,实际上完成静态变量的累加。即 1+2+3+4+5,其值为 15,故答案为 D。 30 【正确答案】 A 【试题解析】 本题考察对二维数组的使用。只要按照要求细心分析各个数组元素的位置,即可以正确的得到答案为 A。 31 【正确答案】 A 【试题解析】 本题采用递归函数的方式将数组中的元素进行倒置,只要能够看出函数 fun的功能,即可以得出正确答案为 A。 32 【正确答案】 D 【试题解析】 分析可知本题中 whi
26、le循环体的功能是将数组中元素值为奇数的项目累加,在遇到第一个元素值为偶数时停止累加。因此,观察数组中各元素值可知 14之前的奇数相加是 11+13,故答案为 D。 33 【正确答案】 A 【试题解析】 本题考察 continue语句在 while循环中的使用:直接跳转到条件判断表达式位置,不再执行 continue后面的语句。另外,根据分析可知,本题循环体的功能是将 0, 2, 4, 6位元素加一后累加,故结果应是 1+3+5+7,因此正确答案为 A。 34 【正确答案】 A 【试题解析】 本题主要考察 setfill的用法。只用在设置了宽度的情况下,字符填充操作 setfill才有意义。另
27、外要注意的是设置宽度 setw是所有格式中惟一一个一次有效的设置。 35 【正确答案】 C 【试题解析】 本题看似复杂,其实掌握技巧的话可以很容易的得出正确答案为C。按照常识,一个文件关闭后,应该可以再打开另外一个文件。 36 【正确答案】 链接 【试题解析】 数据结构的存储结构包括顺序、链接、索引和散列四种。 37 【正确答案】 删除 【试题解析】 在链表中进行插入和删除操作的效 率比在顺序存储结构中进行相同操作的效率高。只需要改变指针指向即可。 38 【正确答案】 递归 【试题解析】 如果一个对象部分地包含自己,或自己定义自己,则称这个对象是递归的对象。 39 【正确答案】 3 a(b(c
28、, d(e, f), g(h), i(j, k(x, y) 【试题解析】 转换后 a为第 0层; b, i为第 1层; c, d, g, j, k为第 2层; e,f, h, x, y为第 3层。 40 【正确答案】 右 【试题解析】 对于根结点没有兄弟,所以没有右子女。 41 【正确答案】 3.5 【试题解析】 运算符的优先级概念,式中要先算 (a+b)的值,再算强制类型变换, *、 /、 %是同级的要从左到右计算,最后算加法和赋值。 42 【正确答案】 b+ 或者 4 【试题解析】 条件运算符和增量运算符的概念,题中 b c为真,应取 b+的值给 a,因 b 的值是先用后增 1,所以 a为 3,题中的 C+没有执行到, c保持原值。 43 【正确答案】 多 【试题解析】 一个类中可以有多个构造函数,但只能由一个析构函数。如果没有特殊定义构造函数或者析构函数,系统都会自动建立一个默认 的构造函数或者析构函数。 44 【正确答案】 非数据成员 【试题解析】 在 C+类的规定中,静态函数只能给引用类的静态成员和非数据成员。