1、国家二级 C+机试(选择题)模拟试卷 60 及答案与解析 一、选择题 1 下列叙述中正确的是 ( A)结点中具有两个指针域的链表一定是二叉链表 ( B)结点中具有两个指针域的链表可以是线性结构,也可以是非线性结构 ( C)二叉树只能采用链式存储结构 ( D)循环链表是非线性结构 2 某二叉树的前序序列为 ABCD,中序序列为 DCBA,则后序序列为 ( A) BADC ( B) DCBA ( C) CDAB ( D) ABCD 3 下面不能作为软件设计工具的是 ( A) PAD图 ( B)程序流程图 ( C)数 据流程图 (DFD图 ) ( D)总体结构图 4 逻辑模型是面向数据库系统的模型,
2、下面属于逻辑模型的是 ( A)关系模型 ( B)谓词模型 ( C)物理模型 ( D)实体 -联系模型 5 运动会中一个运动项目可以有多名运动员参加,一个运动员可以参加多个项目。则实体项目和运动员之间的联系是 ( A)多对多 ( B)一对多 ( C)多对一 ( D)一对一 6 堆排序最坏情况下的时间复杂度为 ( A) O(n15) ( B) O(nlog2n) ( C) ( D) O(log2n) 7 某二叉树中有 15个度为 1的结点, 16个度为 2的结点,则该二叉树中总的结点数为 ( A) 32 ( B) 46 ( C) 48 ( D) 49 8 下面对软件特点描述错误的是 ( A)软件没
3、有明显的制作过程 ( B)软件是一种逻辑实体,不是物理实体,具有抽象性 ( C)软件的开发、运行对计算机系统具有依赖性 ( D)软件在使用中存在磨损、老化问题 9 某系统结构图如下图所示 该系统结构图中最大扇入是 ( A) 0 ( B) 1 ( C) 2 ( D) 3 10 设有表示公司和员工及雇佣的三张表,员工可在多家公司兼职,其中公司(公司号, 公司名,地址,注册资本,法人代表,员工数),员工(员工号,姓名,性别,年龄,学历),雇佣(公司号,员工号,工资,工作起始时间)。其中表的键为公司号,表的键为员工号,则表的键(码)为 ( A)公司号,员工号 ( B)员工号,工资 ( C)员工号 (
4、D)公司号,员工号,工资 11 下列叙述中,正确的是 ( A) false是一个字符型常量 ( B) false是一个字符型常量 ( C) 11是一个逻辑型常量 ( D) 1.1是一个 double常量 12 有如下程序段: int i=100; while ( int i=10 ) cout using namespace std; void fun(int i) cout using namespace std; class A public: static int a; void init() a = 10; A(int a = 5) init(); a+=10; ; int A:a =
5、 0; A obj; int main() cout using namespace std; class AA char c; public: AA(char ch):c(ch) cout using namespace std; class Base int m; public: Base() cout T square(T x) return x * x; 其中的 参数 T是 ( A)函数形参 ( B)函数实参 ( C)模板实参 ( D)模板形参 39 假定在一个程序中执行到语句: cout using namespace std; class AA public: AA() cout“
6、A“; AA() cout“a“; ; class BB: public AA AA aa; public: BB() cout“B“; BB() cout“b“; ; int main() BB bb; return 0; 运行这个程序的输出是 ( A) AABaab ( B) AABbaa ( C) BAAaab ( D) BAAbaa 国家二级 C+机试(选择题)模拟试卷 60 答案与解析 一、选择题 1 【正确答案】 B 【试题解析】 具有两个指针域的链表可能是双向链表, A选项错误。双向链表是线性结构,二叉树为非线性结构,二者结点中均有两个指针域, B 选项正确。二叉树通常采用链式存
7、储结构,也可采用其他结构, C选项错误。循环链表是线性结构, D选项错误。 2 【正确答案】 B 【试题解析】 二叉树遍历可以分为 3种:前序遍历(访问根结点在访问左子树和访问右子树之前)、中序遍历(访问根结点在访问左子树和访问右子树两者之间)、后序遍历(访问根结点在访问左子树和访问右子树之后)。本题中前序序列为 ABCD,中序序列为 DCBA,可知 D为根结点, ABC为左侧结点, C为 D左子结点, A为 B子结点,故后序序列为 DCBA,故 B选项正确。 3 【正确答案】 C 【试题解析】 软件设计常用的工具有:图形工具:程序流程图、 N-S 图、 PAD图、 HIPO;表格工具:判定表
8、;语言工具: PDL(伪码) 。另外,在结构化设计方法中,常用的结构设计工具是结构图,故选择 C选项。 4 【正确答案】 A 【试题解析】 逻辑数据模型也称数据模型,是面向数据库系统的模型,着重于在数据库系统一级的实现。成熟并大量使用的数据模型有层次模型、网状模型、关系模型和面向对象模型等。故 A选项正确。 5 【正确答案】 A 【试题解析】 一般来说,实体集之间必须通过联系来建立联接关系,分为三类:一对一联系( 1:1)、一对多联系( 1:m)、多对多联系( m:n)。一个运动项目有很多运动员参加,而一个运动员可以参加多项运 动项目,故实体项目和运动员之间的联系是多对多, A选项正确。 6
9、【正确答案】 B 【试题解析】 堆排序属于选择类的排序方法,最坏情况时间复杂度为 O(nlog2n)。故 B 选项正确。 7 【正确答案】 C 【试题解析】 在树结构中,一个结点所拥有的后件个数称为该结点的度,所有结点中最大的度称为树的度。对任何一棵二叉树,度为 0的结点(即叶子结点)总是比度为 2的结点多一个。由 16个度为 2的结点可知叶子结点个数为 17,则结点结点总数为 16+17+15=48, C选项正确。 8 【正确答案】 D 【试题解析】 软件具有以下特点:软件是一种逻辑实体,具有抽象性;软件没有明显的制作过程;软件在使用期间不存在磨损、老化问题;对硬件和环境具有依赖性;软件复杂
10、性高,成本昂贵;软件开发涉及诸多的社会因素。故 D选项正确。 9 【正确答案】 C 【试题解析】 扇入指的是调用一个给定模块的模块个数。题干系统中,第 2层模块扇入均为 1,第 3层中功能模块 3.1扇入为 2,其余为 1,故最大扇入为 2, C选项正确。 10 【正确答案】 A 【试题解析】 二维表中的行称为元组,候选键(码)是二维表中能唯一标识元 组的最小属性集。若一个二维表有多个候选码,则选定其中一个作为主键(码)供用户使用。公司号唯一标识公司,员工号唯一标识员工,而雇佣需要公司号与员工号同时唯一标识,故表的键(码)为(公司号,员工号),故 A选项正确。 11 【正确答案】 D 【试题解
11、析】 false是逻辑常量, A选项错误; 0是字符常量,字符串常量是用双引号括起来的若干字符序列, B选项错误; 11是一个整型常量, C选项错误;1.1是浮点型常量,一般按双精度处理,是 double型常量,答案为 D。 12 【正确答案】 D 【试题 解析】 首先,程序定义了局部变量 i并初始化为 100,在 while循环中定义了同名局部变量 i并初始化为 10,由变量的作用域可知 while循环中的 i屏蔽了while语句前的局部变量 i,所以 while循环体中的 i初值为 10;其次,由于 while循环的循环条件为 int i=10,每次循环都是重新定义并初始化 i,条件始终为
12、真,所以 while循环将会无限执行下去,输出无穷个 “*“。答案为 D。 13 【正确答案】 D 【试题解析】 程序定义含有五个整型元素的数组 arr,并初始化为: 1,2,3,4,5, 数组名 arr为数组首地址。选项 A中输出第一个元素与 4之和,即 1+4,结果为5;选项 B、 C都是输出第五个元素 5;选项 D中输出第二个元素与 5之和,即2+5,结果为 7, D错误;答案为 D。 14 【正确答案】 D 【试题解析】 A选项中, int是定义整型数据的关键字; B 选项中, static是定义静态数据类型的关键字; C选项中 enum是定义枚举类型的关键字;答案为 D。 15 【正
13、确答案】 C 【试题解析】 枚举类型中,枚举成员可以显式初始化或隐式初始化;默认的情况下第一个枚举成员赋值为 0,后面每个成员赋值 比前面大 1。所以枚举类型COLOR中各个成员值分别为: 0,1,5,8,9,15。 RED为 9,答案为 C。 16 【正确答案】 C 【试题解析】 默认参数是通过给形参表中的形参提供明确的初始值来指定的,可以为一个或多个形参定义默认值,但是如果有一个形参具有默认值,那它右边的形参都必须有默认值 (即全是默认参数 )。选项 C错误,形参 y 也必须要有默认值;答案为 C。 17 【正确答案】 D 【试题解析】 既可以在函数声明中指定默认参数,也可以在函数定义中指
14、定默认参数,但是,在一个源文件中,只能为形参指 定默认参数一次,通常应在函数声明中指定默认参数。 A、 B、 C正确,选项 D错误;答案为 D。 18 【正确答案】 B 【试题解析】 重载赋值运算符是为了操作类的对象,静态函数不满足,选项 A错误;如果类中没有重载赋值运算符,编译器将根据需求合成一个赋值运算符,所以重载赋值运算符必须是类的成员函数,以便编译器可以知道是否需要合成,选项 C错误;赋值运算符不是虚函数,因为虚函数必须在基类和派生类中具有同样的形参,基类的赋值运算符有一个形参是自身类类型的引用,如果该运算符是虚函数,则每个派生类都将有一个虚函数成员 函数,该成员函数定义了其中一个参数
15、为基类对象的 operator=,可能会令人混淆,选项 D错误;答案为 B。 19 【正确答案】 A 【试题解析】 fun 函数原型声明中形参 z是默认参数,所以调用函数 fun 时可以给出 2个实参即可。选项 A错误, B、 C、 D正确,答案为 A。 20 【正确答案】 D 【试题解析】 递归函数 d2b,首先判断参数 n 是否为 0或 1,若是,则输出 n,函数调用结束;否则递归调用自身,将 n/2当做新的参数传入。所以 d2b被调用时,参数分别是: 10,5,2,1。所以函数 d2b被调用 4次。答案为 D。 21 【正确答案】 C 【试题解析】 横线处填写的语句,是重载后缀自增运算符
16、 +的函数声明,为了与内置类型一致,后缀自增运算符应该返回旧值,即尚未自增的值,并且应该作为值返回,而不是返回引用,选项 A、 B错误;另外为了区分运算符的前缀和后缀形式,后缀运算符重载函数需要接受一个额外的 int型形参,选项 D错误;答案为C。 22 【正确答案】 B 【试题解析】 程序有两个重载 fun函数,函数原型分别为 fun(int)、 fun(char);main 函数中调用 fun(0),由于 0可以 精确匹配原型为 fun(int)的函数,所以 fun(0)将选择原型为 fun(int)的函数,输出 int i /;同理 fun(c)精确匹配原型为 fun(char)的函数,
17、输出 char c /,程序最终输出结果为: int i / char c /;答案为 B。 23 【正确答案】 D 【试题解析】 静态数据成员独立于任何对象而存在,不是类对象的组成部分,普通成员函数可以引用静态数据成员。程序定义了类 A,并在 A的定义体外初始化A的静态数据成员 a=0,构造函数 A(int)中的形参 a与 A:a属于不同的变量 ,在函数 A(int)中,形参 a屏蔽了 A:a,所以 A(int)中引用的变量 a是形参,而不是A:a,对 a的任何操作都不影响 A:a,而成员函数 init中引用的是 A:a,语句a=10是将 A:a赋值为 10,所以输出 obj.a其实是输出
18、A:a,结果为 10;答案为D。 24 【正确答案】 C 【试题解析】 友元函数不是类的成员函数,选项 A正确;类成员的默认访问权限是私有的,选项 B 正确;类的静态数据成员可以使常成员,选项 D正确;类的成员函数可以声明为: public、 protected 和 private, 选项 C错误;答案为 C。 25 【正确答案】 C 【试题解析】 创建对象数组时,需要用默认构造函数初始化每个元素,所以ClassA a2需要调用 2次构造函数;创建对象指针数组 b,数组 b的元素是对象指针,没有生成新的对象,不需要调用构造函数;创建对象指针 c,并使用动态分配方式创建新的对象,将新对象的指针赋
19、给 c,需要调用构造函数;综上所述,答案为 C。 26 【正确答案】 D 【试题解析】 派生类对基类成员的访问权限由基类成员的访问标识和类派生列表中的访问标识共同决定的,选项 A错误;派生类私 有继承基类,基类的保护成员在派生类中为 private成员,派生类对象不可见,选项 B错误;派生类包含基类中没有的成员变量和成员函数,将基类对象赋给派生类对象,在调用这些成员时报错,选项 C错误;答案为 D。 27 【正确答案】 D 【试题解析】 含有纯虚函数的类不能被实例化,选项 A错误;基类的保护成员就是为了派生类的访问而设计的,选项 B错误;派生类构造函数的初始化列表通常都要显式调用基类的构造函数
20、,选项 C错误;当基类中不能为虚函数给出一个有意义的实现时,将其声明为纯虚函数,所以纯虚函数没有定义函数体,选 项 D正确;答案为 D。 28 【正确答案】 A 【试题解析】 派生类的对象结束生命周期时,系统先调用派生类的析构函数,然后按继承层次依次向上调用各个基类的析构函数,这是为了每次调用析构函数,都有完整的类对象与析构函数对应,当然如果某个类没有定义析构函数,编译器会自动合成对应的析构函数并调用之,答案为 A。 29 【正确答案】 D 【试题解析】 C+中,使用 class 关键字定义的类,默认的成员访问级别是私有的,所以类 Why中,保护成员有: l、 f;私有成员有: n、 c。答案
21、为 D。 30 【正 确答案】 D 【试题解析】 构造函数初始化列表仅指定用于初始化成员的值,不指定这些初始化执行的次序,成员初始化的次序是类定义中声明成员的次序,成员初始化完成后执行构造函数的函数体;所以程序中在创建 BB对象时,首先初始化 m1,再初始化 m2,由于 m1、 m2 都是 AA对象,且有实参 q、 p,所以调用构造函数AA(char ch),用 ch 初始化成员 c后输出成员 c的值,即输出 q、 p,再执行类BB的函数体,输出 B; 程序执行结束时,系统会自动调用类的析构函数清理自己的成员,析构函数工作过程: 1、执行 析构函数的函数体; 2、如果该类中拥有类对象成员,且类
22、对象有析构函数,则以类对象成员声明次序的相反顺序调用其析构函数,销毁类对象成员; 3、按原来构造顺序的相反顺序向上依次调用基类的析构函数。所以程序运行结束时,首先调用 BB的析构函数并执行函数体,输出 “b“;然后调用 m2 的析构函数,销毁 m2 成员,输出 a,再调用 m1 的析构函数,销毁 m1 成员,输出 a;综上所述,程序运行的输出是: “qpBbaa“;答案为 D。 31 【正确答案】 B 【试题解析】 构造函数不能指定返回类型,选项 C、 D错误;由于是在类 定义体外定义函数,需要在函数名前给出函数的作用域,选项 A错误;答案为 B。 32 【正确答案】 A 【试题解析】 C+中
23、,派生类构造函数都是先调用基类构造函数,再根据声明次序定义数据成员,另外对于多继承,派生类的构造函数初始化列表中,基类构造函数是按照基类在派生类的派生列表中出现的次序调用的;而析构函数是按构造函数运行顺序的逆序进行调用的,可知题目中析构函数的调用顺序为:派生类Derived的析构函数, Base1的析构函数, Base2的析构函数;答案为 A。 33 【正确答案】 B 【试题 解析】 程序中类 How没有定义任何构造函数,所以编译器需要自动生成一个默认构造函数和复制构造函数,答案为 B。 34 【正确答案】 D 【试题解析】 虚继承中,无论虚基类出现在继承层次中的任何地方,总是在构造非虚基类之
24、前构造虚基类;程序中首先构造虚基类 Base,调用 Base的构造函数Base(int m1),输出 “B2“;然后构造非虚基类,按照 Derived的派生列表顺序,首先构造 Mid2部分,忽略 Mid2构造函数初始化列表中 Base的初始化式,再构造Mid1部分,同样忽略 Base的初始化式,最后构 造 Derived部分,执行函数体,输出 “D“;整个程序结果为: “B2D“;答案为 D。 35 【正确答案】 D 【试题解析】 函数形参表即使为空,两边的括号也不能省略,选项 A错误;函数的实参表要用圆括号括起来,模板的实参表要用尖括号括起来,选项 B、 C错误;模板实参表在一定条件下可以省
25、略,选项 D正确;答案为 D。 36 【正确答案】 D 【试题解析】 函数模板 swap有两个数组地址参数 a, b,它们数组元素的类型相同;所以模板形参表中可以使用 1个参数定义为 int,来实例 a, b 的类型,也可以使用 2个参数,分别实例 a, b 的类型;选项 D错误,答案为 D。 37 【正确答案】 B 【试题解析】 cout是 C+预定义的标准输出流对象,答案为 B。 38 【正确答案】 D 【试题解析】 参数 T是模板形参,答案为 D。 39 【正确答案】 D 【试题解析】 由输出结果可知,输出的数据都前向补齐 *,使得每个输出数据有8位,而 setw是用来控制输入输出的宽度
26、,答案为 D。 40 【正确答案】 B 【试题解析】 首先,构造函数的工作过程: 1、派生类的构造函数在执行函数体之前调用基 类的构造函数初始化基类; 2、在执行函数体之前根据声明次序初始化自己的成员; 3、执行自身函数体。所以程序中在创建 BB对象时,首先调用 AA的构造函数,输出 “A“,然后初始化类 BB中的成员 aa,调用 AA的构造函数,输出 “A“,最后执行函数体,输出 “B“; 程序执行结束时,系统会自动调用类的析构函数,析构函数工作过程: 1、执行析构函数的函数体; 2、如果该类中拥有类对象成员,且类对象有析构函数,则以类对象成员声明次序的相反顺序调用其析构函数,销毁类对象成员; 3、按原来构造顺序的相反顺序向上依次调用基类的析构函数。 所以程序运行结束时,首先调用 BB的析构函数并执行函数体,输出 “b“;然后调用 aa的析构函数,销毁 aa成员,输出 “a“;最后调用基类 AA的析构函数,输出 “a“;综上所述,程序运行的输出是: “AABbaa“;答案为 B。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1