1、国家二级 C+机试(选择题)模拟试卷 82及答案与解析 一、选择题 1 下列叙述中正确的是 ( A)循环队列是顺序存储结构 ( B)循环队列是链式存储结构 ( C)循环队列是非线性结构 ( D)循环队列的插入运算不会发生溢出现象 2 下列叙述中正确的是 ( A)所有数据结构必须有根结点 ( B)所有数据结构必须有终端结点(即叶子结点) ( C)只有一个根结点,且只有一个叶子结点的数据结构一定是线性结构 ( D)没有根结点或没有叶子结点的数据结构一定是非线性结构 3 下列关于算法的描述中错误的是 ( A)算法强调动态的执行过程,不同于静态的计算公式 ( B)算法必须能在有限个步骤之后终止 ( C
2、)算法设计必须考虑算法的复杂度 ( D)算法的优劣取决于运行算法程序的环境 4 在线性表的顺序存储结构中,其存储空间连续,各个元素所占的字节数 ( A)相同,元素的存储顺序与逻辑顺序一致 ( B)相同,但其元素的存储顺序可以与逻辑顺序不一致 ( C)不同,但元素的存储顺序与逻辑顺序一致 ( D)不同,且其元素的存储顺序可以与逻辑顺序不一致 5 设二叉树如下: 则中序序列为 ( A) ABDEGCFH ( B) DBGEAFHC ( C) DGEBHFCA ( D) ABCDEFGH 6 下面不属于软件需求分析阶段工作的是 ( A)需求获取 ( B)需求计划 ( C)需求分析 ( D)需求评审
3、7 下面不属于黑盒测试方法的是 ( A)边界值分析法 ( B)基本路径测试 ( C)等价类划分法 ( D)错误推测法 8 在数据库系统中,数据模型包括概念模型、逻辑模型和 ( A)物理模型 ( B)空间模型 ( C)时间模型 ( D)数据模型 9 若实体 A和 B是一对一的联系,实体 B和 C是多对一的联系,则实体 A和 C的联系是 ( A)多对一 ( B)一对多 ( C)一对一 ( D)多对多 10 某二叉树中共有 935个结点,其中叶子结点有 435个,则该二叉树中度为 2的结点个数为 ( A) 64 ( B) 66 ( C) 436 ( D) 434 11 下列描述中,属于面向对象思想主
4、要特征的是 ( A)继承性 ( B)灵活性 ( C)可重用性 ( D)健壮性 12 有如下程序段: int i=10; while(1) i+; if(i = 30)break; if(i%2 = 0)cout using namespace std; void fun(int c=a; a=b; b=c; int main() int x,y; x=1; y=2; fun(x,y); cout using namespace std; class AA public: AA() cout using namespace std; class Shape /图形类 public: /图形绘制函
5、数(用显示字母模拟) virtual void draw()const coutdraw(); int main() Shape s; Triangle t; plot( plot( s=t; s.draw(); return 0; 运行这个程序的输出是 ( A) STT ( B) STS ( C) TSS ( D) TTT 38 有如下的类声明: #include using namespace std; class AA public: virtual void disp() coutA; ; class BB: public AA public: void disp() coutB; ;
6、 class CC: public BB public: virtual void disp() coutC; ; void plot(AA a) a.disp(); int main() BB bb; CC cc; BB plot(bb); cc.disp(); rb.disp(); return 0; 运行这个程序的输出是 ( A) ACC ( B) ACB ( C) BCC ( D) BCB 39 若目前 E盘根目录下不存在 data.txt 文件,则下列打开文件方式不会自动创建 data.txt 文件的是 ( A) ifstream fin; fin.open(“e:data.txt“
7、,ios_base:in); ( B) fstream fio; fio.open(“e:data.txt“,ios_base:out); ( C) ofstream fout; fout.open(“e:data.txt“,ios_base:out); ( D) ofstream fout; fout.open(“e:data.txt“,ios_base:app); 40 要利用 C+ 流进行文件操作,必须在程序中包含的头文件是 ( A) iomanip ( B) fstream ( C) strstream ( D) cstdlib 国家二级 C+机试(选择题)模拟试卷 82答案与解析 一
8、、选择题 1 【正确答案】 A 【试 题解析】 循环队列是队列的一种顺序存储结构 . 线性结构是个数据元素构成的有限序列,除第一个元素外的每一个元素,有且只有一个前件,除最后一个元素外,有且只有一个后件。循环队列是线性结构。当需要插入的数据大于循环队列的存储长度,入队运算会覆盖前面的数据,发生溢出现象。故 A选项正确。 2 【正确答案】 D 【试题解析】 一个非空的数据结构如果满足以下两个条件:有且只有一个根结点;每一个结点最多有一个前件,也最多有一个后件,称为线性结构,在数据结构中习惯称为线性表, D选项正确。图是可能不包含根结点或叶子 结点的数据结构, AB选项错误。数据结构中若有中间结点
9、不满足只有一个前件或者后件条件,则不属于线性结构, C选项错误。 3 【正确答案】 D 【试题解析】 算法是指对解题方案的准确而完整的描述,简单地说,就是解决问题的操作步骤。算法不同于数学上的计算方法,强调实现, A选项叙述正确。算法的有穷性是指,算法中的操作步骤为有限个,且每个步骤都能在有限时间内完成, B选项叙述正确。算法复杂度包括算法的时间复杂度和算法的空间复杂度。算法设计必须考虑执行算法所需要的资源,即时间与空间复杂度,故 C选项叙述正确。算法的 优劣取决于算法复杂度,与程序的环境无关,当算法被编程实现之后,程序的运行受到计算机系统运行环境的限制,故正确答案为 D选项。 4 【正确答案
10、】 A 【试题解析】 顺序表具有以下两个基本特征:线性表中所有元素所占的存储空间是连续的;线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。在顺序表中,每个元素占有相同的存储单元。 A选项正确。 5 【正确答案】 B 【试题解析】 二叉树遍历可以分为 3种:前序遍历(访问根结点在访问左子树和访问右子树之前)、中序遍历(访问根结点在访问左子树和访问右子树 两者之间)、后序遍历(访问根结点在访问左子树和访问右子树之后)。本题中前序遍历为 ABDEGCFH,中序遍历为 DBGEAFHC,后序遍历为 DGEBHFCA,故 B选项正确。 6 【正确答案】 B 【试题解析】 需求分析阶段的工作可以分为
11、 4个方面:需求获取、需求分析、编写需求规格说明书和需求评审,而需求计划不属于需求分析阶段的工作,故正确答案为 B选项。 7 【正确答案】 B 【试题解析】 常用的黑盒测试方法和技术有:等价类划分法、边界值分析法、错误推测法和因果图等。基本路径测试属于白盒测试,故 正确答案为 B选项。 8 【正确答案】 A 【试题解析】 数据模型按照不同的应用层次分为 3种类型:概念数据模型、逻辑数据模型、物理数据模型,故 A选项正确。 9 【正确答案】 A 【试题解析】 一般来说,实体集之间必须通过联系来建立联接关系,分为三类:一对一联系( 1:1)、一对多联系( 1:m)、多对多联系( m:n)。 A与
12、B是 1:1联系, B与 C是 m:1联系,则 A与 C是 m:1联系,即多对一,故 A选项正确。 10 【正确答案】 D 【试题解析】 在树结构中,一个结点所拥有的后件个数称为该 结点的度,所有结点中最大的度称为树的度。对任何一棵二叉树,度为 0的结点(即叶子结点)总是比度为 2的结点多一个。叶子结点有 435个,则度为 2的结点为 434, D选项正确。 11 【正确答案】 A 【试题解析】 面向对象思想的主要特征有:封装、继承和多态。答案选 A。 12 【正确答案】 C 【试题解析】 程序首先定义一个整型变量 i并初始化为 10, while循环条件为1,始终为真,所以只有执行 brea
13、k语句才能结束循环。在 while循环中, i自增运算语句在循环开始,所以 while语句第一次循环, i值自增为 11,最后一次循环开始时, i值为 29;另外输出语句中若 i为偶数则输出 “*“,综上 while循环中在 i自增 1后取值为: 12,14,16,18,20,22,24,26,28时,输出 “*“;答案为 C。 13 【正确答案】 D 【试题解析】 C+的标识符由字母、数字和下划线组成, A、 B、 C错误,答案为 D。 14 【正确答案】 B 【试题解析】 字符型常量是用单引号括起来的一个字符。 B选项中 “n“是字符串常量,答案为 B。 15 【正确答案】 A 【试题解析
14、】 选项 B中, y=1语句后面少了分号 “; “;选项 C中, then不是关键字,不符合 if语法;选项 D中,条件部分 x != 0必须用圆括号括起来;只有选项 A正确,整型变量 x在条件中转化为逻辑变量,非 0情况下都转化为 1;答案为A。 16 【正确答案】 D 【试题解析】 该题是隐式类型转换。首先 2/3会按照 int型来计算,结果自然是0,由于赋值运算符左操作数对象是 double型,所以需要将 int型结果转换为double型 0.0,答案为 D。 17 【正确答案】 D 【试题解析】 函数声明由函数返回类型、函数名和形参列表 组成,形参列表中必须包含形参类型,不必对形参命名
15、。答案为 D。 18 【正确答案】 D 【试题解析】 出现在相同作用域中的两个函数,如果具有相同的名字而形参表不同,称为重载函数。选项 A中,仅当形参是引用或指针时,形参是否为 const对重载才有影响,这里 const对重载没有影响,另外函数不能仅仅基于不同的返回类型实现重载, A错误;选项 B中,当调用函数 fun(x)只带有一个实参时,两个函数都匹配,该调用具有二义性, B错误;选项 C中形参列表只有默认参数不同,默认参数并不改变形参个数, C错误;选项 D正确,形 参列表中参数个数不同;答案为 D。 19 【正确答案】 C 【试题解析】 流运算符 “不能重载为类的成员函数,因为一旦该操
16、作符重载为类的成员函数,那么左操作数将只能是该类类型的对象,这样的用法与正常 I/O使用方式相反。为了支持正常用法,左操作数必须为 ostream类型。但是,标准库中的类是不能人为添加成员的,答案为 C。 20 【正确答案】 C 【试题解析】 友元函数不是类的成员函数,所以友元函数的调用不需要使用类对象;另外运算符重载不改变运算符的优先级,所以表达式 c2*c1+先执行 c1+;为了区分运算符的前缀和后缀形式,规定后缀式运算符函数接受一个额外的 int型形参,使用时可以提供 0作为形参的实参,所以 c1+相当于 operator+(c1, 0),c2*c1+相当于 c2.operator*(o
17、perator+(c1, 0);答案为 C。 21 【正确答案】 A 【试题解析】 横线处填写的语句,是重载前缀自增运算符 +的函数声明,为了与内置类型一致,前缀自增运算符应该返回自增对象的引用,选项 C、 D错误;自增运算符是一元运算符,即操作数是类对象,所以参数列表为空,选项 B错误;答案为 A。 22 【正确答案】 C 【试题解析】 main函数中定义两个整型变量 x=1, y=2,由输出 x, y的结果为21,可知函数 fun的功能是交换两个实参的值,由于函数 fun中未使用指针类型的变量,所以若想通过函数 fun交换实参的值,形参类型必然为引用类型,横线处语句为 int &b,答案为
18、 C。 23 【正确答案】 B 【试题解析】 复制构造函数用于以下情况:根据另一个同类型的对象显式或隐式初始化一个对象;复制一个对象,将它作为实参传给一个函数;从函数返回时复制一个对象;初始化顺序 容器中的元素;根据元素初始化列表初始化数组元素。选项 B中调用赋值运算符,而不是复制构造函数,答案为 B。 24 【正确答案】 D 【试题解析】 C+中,静态成员是类的组成部分,不是任何对象的组成部分,因此静态成员函数没有 this指针,类的非 const成员函数包括静态成员函数,所以选项 A、 C错误;答案选 B或 D。 25 【正确答案】 C 【试题解析】 C+中,不能在类中直接初始化 cons
19、t数据成员,因为在类没有被初始化时,成员是不存在的,所以 const数据成员必须在构造函数初始化列表中初始 化,语句 1、 4正确,语句 2错误;另外类的 static数据成员不能在类定义中初始化,也不能通过类的构造函数进行初始化,而必须在类定义体的外部定义,语句 3错误;答案为 C。 26 【正确答案】 C 【试题解析】 类的非静态成员函数都隐含 this指针,静态成员是类的组成部分,不是任何对象的组成部分,因此静态成员函数没有 this指针,选项 D错误;友元函数不属于成员函数,没有 this指针,选项 A、 B错误;答案为 C。 27 【正确答案】 C 【试题解析】 C+中,只有当一个类
20、没有定义构造函数时,编译 器才会自动生成一个默认构造函数,一个类哪怕只定义了一个构造函数,编译器也不会再生成默认构造函数;答案为 C。 28 【正确答案】 D 【试题解析】 派生类对基类成员的访问权限由基类成员的访问标识和类派生列表中的访问标识共同决定的,类 D公有继承类 B,所以类 B中成员函数 fun1对类 D不可见;成员函数 fun2为类 D的 protected成员;成员函数 fun3为类 D的 public成员;综上所述 fun1, fun2, fun4对类 D对象 obj均不可见, fun3对 obj可见,答案为 D。 29 【正确答案】 D 【试题解析】 派生类对象的撤销顺序与构
21、造顺序相反:首先运行派生类析构函数,然后按继承层次依次向上调用各基类析构函数,这样做是为了每次析构函数销毁的都是完整的对象,选项 D错误,答案为 D。 30 【正确答案】 A 【试题解析】 C+中,实现运行时多态性必须满足两个条件: 1、被调用的成员函数为虚函数; 2、调用必须通过基类类型的引用或指针。选项 B、 C、 D正确;多态性是虚函数在运行时期绑定,而重载的函数是在编译期绑定,重载主要是为了 C+的代码复用,与多态性没有关系;答案为 A。 31 【正确答案】 C 【试题解析】 只有当类定义体完成之后才能定义类,题目中四个声明语句位置,Fin类未定义完整,属于不完全类型,此时数据成员只能
22、是指向该类类型的指针或引用,而不能是该类的对象;语句 3会产生编译错误;答案为 C。 32 【正确答案】 B 【试题解析】 C+中,触发多态性必须满足两个条件: 1、被调用函数为虚函数; 2、必须通过基类类型的引用或指针调用函数,选项 A、 C正确;非多态调用虚函数只能通过类对象调用,类对象调用虚函数使用成员访问运算符 “.“进行,选项 D正确;一旦函数在基类中被声明为虚函数, 那它在后续的派生类中都是虚函数,可以不使用 virtual关键字,派生类无法改变该函数是虚函数这一事实;选项B错误;答案为 B。 33 【正确答案】 B 【试题解析】 C+中,派生类构造函数都是先调用基类构造函数,再根
23、据声明次序定义数据成员,所以 Derived构造函数的初始化列表中,最后初始化 q;另外对于多继承,派生类的构造函数初始化列表中,基类构造函数是按照基类在派生类的派生列表中出现的次序调用的;由于 Derived类的派生列表中, Base2在前,所以应该先调用 Base2的构造函数;这样 Derived类中初始化顺序为:基类 Base2、基类 Base1、数据成员 q;所以数据成员 m、 n、 q的初始化顺序为: n、 m、 q,答案为 B。 34 【正确答案】 A 【试题解析】 C+中,常数据成员必须在构造函数的初始化列表中完成初始化,答案为 A。 35 【正确答案】 D 【试题解析】 对象数
24、组,就是数组元素是类对象,不管对象数组在哪里定义,如果没有显式的调用构造函数初始化,编译器将使用类的默认构造函数初始化对象元素,这里程序中显式的使用构造函数 Pa(int n)初始化各个元素,所以被调用的构造函数 只有 Pa(int n),没有调用默认构造函数和复制构造函数,答案为 C。 36 【正确答案】 A 【试题解析】 main()函数中首先动态创建 AA类对象,调用 AA类构造函数,输出 “A“,创建 BB类对象,调用 BB类构造函数,输出 “B“,使用 delete显式销毁AA类对象,调用 AA类析构函数,输出 “A“,程序结束时,销毁 BB类对象,编译器自动调用 BB类析构函数,输
25、出 “B“,整个程序输出结果为: “ABAB“,答案为 A。 37 【正确答案】 B 【试题解析】 main函数中, plot函数的 参数通过 Shape对象引用和 Triangle对象引用来调用虚函数 draw(),由于形参 s是基类引用,所以符合多态性调用,程序将在运行时期根据 s引用对象的类型决定调用哪个 draw(),这里实参 s是 Shape类类型,因而调用 Shape类的 draw()函数,实参 t是 Triangle类类型,因而调用Triangle类的 draw()函数,输出: “ST“;程序接着将派生类对象 t赋给 s,由于基类 Shape没有显式的定义赋值运算符和将派生类对象
26、作为参数的基类构造函数,因而编译器自动产生基类 Shape的赋值运算符 operator=(Shape &a),语句 s=t将调用赋值运算符, a引用派生类对象 t,完成赋值,此时 s包含 t中基类的副本,而 t中剩下部分将被忽略,语句 s.draw()将调用 Shape类中的 draw()函数,输出“S“,程序输出结果为 “STS“。答案为 B 38 【正确答案】 A 【试题解析】 程序定义了类 AA,成员函数 disp是虚函数;类 BB公有继承AA,重新定义了函数 disp,由虚函数的性质可知,即使 BB中未使用 virtual修饰disp,函数 disp仍然是虚函数;类 CC公有继承了
27、BB,同样重新定义了虚函数disp; main函数中定义了 BB类对象 bb, CC类对象 cc, BB类引用 rb, rb被初始化指向 cc;然后调用 plot函数,由于 plot函数的形参是 AA类对象 a,不满足多态性中调用者必须要是引用或者指针类型的条件,所以无论实参是 bb或 cc,a.disp()调用的都是 AA类中的函数 disp,输出 “A“; cc.disp()显然调用的是类 CC中的函数,输出 “C“; rb.disp(),由于 rb是引用,指向的是类 CC对象 cc,所以这里由多态性可知调用的是 CC类中的 disp函数,输出 “CC“;程序输出结果为:“ACC“; 答案
28、为 A。 39 【正确答案】 A 【试题解析】 定义文件流对文件进行操作时,需要指定文件模式,选项 B、 C中, ios_base:out是打开文件进行写操作,删除文件所有数据,如果文件不存在则创建它,不符合题意;选项 D中, ios_base:app是打开文件进行写操作,在文件尾部追加数据,由于文件与 ofstream流关联,当文件不存在时创建文件,也不符合题意,选项 A正确, ios_base:in是打开文件做读操作,文件不存在时打开文件失败。答案为 A。 40 【正确答案】 B 【试题解析】 iomanip是 I/O流控制头文件; strstream是输入输出字符串流头文件; cstdlib是常用函数库,提供一些函数和符号常量;选项 A、 C、 D错误;fstream是输入输出文件流头文件,答案为 B。