1、国家二级 C+机试(选择题)模拟试卷 44及答案与解析 一、选择题 1 下列叙述中正确的是 ( A)一个算法的空间复杂度大,则其时间复杂度也必定大 ( B)一个算法的空间复杂度大,则其时间复杂度必定小 ( C)一个算法的时间复杂度大,则其空间复杂度必定小 ( D)算法的时间复杂度与空间复杂度没有直接关系 2 下列叙述中正确的是 ( A)循环队列中的元素个数随队头指针与队尾指针的变化而动态变化 ( B)循环队列中的元素个数随队头指针的变化而动态变化 ( C)循环队列中的元素个数随队尾指针的变化而动态变 化 ( D)以上说法都不对 3 一棵二叉树中共有 80个叶子结点与 70个度为 1的结点,则该
2、二叉树中的总结点数为 ( A) 219 ( B) 229 ( C) 230 ( D) 231 4 对长度为 10的线性表进行冒泡排序,最坏情况下需要比较的次数为 ( A) 9 ( B) 10 ( C) 45 ( D) 90 5 构成计算机软件的是 ( A)源代码 ( B)程序和数据 ( C)程序和文档 ( D)程序、数据及相关文档 6 软件生命周期可分为定义阶段、开发阶段和维护阶段,下面不属于开发阶段任务的是 ( A)测试 ( B)设计 ( C)可行性研究 ( D)实现 7 下面不能作为结构化方法软件需求分析工具的是 ( A)系统结构图 ( B)数据字典 (DD) ( C)数据流程图 (DFD
3、图 ) ( D)判定表 8 在关系模型中,每一个二维表称为一个 ( A)关系 ( B)属性 ( C)元组 ( D)主码(键) 9 若实体 A和 B是一对多的联系,实体 B和 C是一对一的联系,则实体 A和 C的联系是 ( A)一对一 ( B)一对多 ( C)多对一 ( D)多对多 10 有三个关系 R、 S和 T如下:则由关系 R和 S得到关系 T的 操作是 ( A)选择 ( B)投影 ( C)交 ( D)并 11 Windows环境下,由 C+ 源程序文件编译而成的目标文件的扩展名是 ( A) obj ( B) exe ( C) cpp ( D) out 12 字符串 “8+a=bnr“ 的
4、长度为 ( A) 14 ( B) 7 ( C) 9 ( D) 16 13 有如下程序: #include using namespace std; int main() int f,f1=1,f2=1; for(int i=0;i using namespace std; int main() int a10; for(int* p=a;p using namespace std; void f1(int x=y; y=z; void f2(int x, int y) int z=x+y; x=y; y=z; int main() int x=10,y=26; f1(x,y); f2(x,y)
5、; cout using namespace std; class XA int a; public: static int b; XA(int aa):a(aa) b+; XA() int get() return a; ; int XA:b=0; int main() XA d1(2),d2(3); cout #include using std:cout; class Point public: friend double distance(const Point Point(int xx=0,int yy=0): x(xx), y(yy) private: int x, y; ; do
6、uble distance(const Point int main() Point p0,p1(3,4); cout #include using namespace std; class Wheel public: Wheel(string s=“W“):name(s) cout using namespace std; class Point public: int GetXY() return x+y; protected: void SetXY(int a,int b) x=a;y=b; private: int x,y; ; class Circle:public Point pu
7、blic: int GetR() return radius; int GetAll() return GetXY()+radius; protected: void SetR(int r) radius=r; private: int radius; ; int main() Circle c; c.GetXY(); / c.SetXY(3,4); / c.GetR(); / c.GetAll(); / return 0; 在标注号码的语句行中存在语法错误的是 ( A) ( B) ( C) ( D) 35 有如下程序: #include using namespace std; class
8、Appliance public: Appliance() Appliance() cout #include using namespace std; class Animal public: virtual string GetType() const return “Animal“; virtual string GetVoice() const return “Voice“; ; class Dog:public Animal public: string GetType() const return “Dog“; string GetVoice() const return “Woo
9、f“; ; class Cat:public Animal public: string GetType() const return “Cat“; string GetVoice() const return “Miaow“; ; void Type(Animal coutsetfill(*)leftsetw(7)ABendl; coutAsetfill(*)rightsetw(7)Bendl; coutsetfill(*)rightsetw(7)ABendl; 其中执行时显示 A*B 的是 ( A) 和 ( B) 和 ( C) 和 ( D) 和 国家二级 C+机试(选择题)模拟试卷 44答
10、案与解析 一、选择题 1 【正确答案】 A 【试题解析】 算法的空间复杂度是指算法在执行过程中所需要的内存空间,算法的时间复杂度,是指执行算法所需要的计算工作量,两者之间并没有直接关系,答案为 D。 2 【正确答案】 D 【试题解析】 在循环队列中,用队尾指针 rear指向队列中的队尾元素,用排头指针 front指向排头元素的前一个位置。因此,从排头指针 front指向的后一个位置直到队尾指针 rear指向的位置之间所有的元素均为队列中的元素。 所以循环队列中的元素个数与队头指针和队尾指针的变化而变化, A正确。 3 【正确答案】 C 【试题解析】 二叉树中,度为 0的节点数等于度为 2的节点
11、数加 1,即 n2=n0-1,叶子节点即度为 0,则 n2=79,总结点数为 n0+n1+n2=80+70+79=229,答案为B。 4 【正确答案】 C 【试题解析】 冒泡法是在扫描过程中逐次比较相邻两个元素的大小,最坏的情况是每次比较都要将相邻的两个元素互换,需要互换的次数为9+8+7+6+5+4+3+2+1=45,选 C。 5 【正确答案】 B 【试题解析】 软件指的是计算机系统中与硬件相互依赖的另一部分,包括程序、数据和有关的文档,选 D。 6 【正确答案】 A 【试题解析】 开发阶段包括分析、设计和实施两类任务。其中分析、设计包括需求分析、总体设计和详细设计 3个阶段,实施则包括编码
12、和测试两个阶段, C不属于开发阶段。 7 【正确答案】 C 【试题解析】 结构化方法软件需求分析工具主要有数据流图、数据字典、判定树和判定表。 8 【正确答案】 C 【试题解析】 关系模型采用二维表来表示,即每个二维表称为一个关系。 9 【正确答案】 D 【试题解析】 A和 B为一对多的联系,则对于 A中的每一个实体, B中有多个实体与之联系,而 B与 C为一对一联系,则对于 B中的每一个实体, C中之多有一个实体与之联系,则可推出对于 A中的每一个实体, C中有多个实体与联系,所以为一对多联系。 10 【正确答案】 A 【试题解析】 关系 T中的元素与关系 R和关系 S中不同元素的总和,因此
13、为并操作。 11 【正确答案】 B 【试题解析】 C+程序开发过程包括编辑、编译、链接、运行和调试。编译完成后链接之前会生成后缀为 obj的目标 文件,所以答案为 A。 12 【正确答案】 D 【试题解析】 本题考查字符常量中转义字符常量, n,r为转义字符,只占一个字节,所以该字符串的长度为 7。选项 B正确。 13 【正确答案】 B 【试题解析】 本题考查 for循环,当 i为 0时, f1变为 1, f2变为 3;当 i为 2时, f1变为 3, f2变为 5;当 i为 4时, f1变为 5, f2变为 11,即 f为 11,所以答案为 D。 14 【正确答案】 D 【试题解析】 本题考
14、查使用指针对一维数组赋值,可以看出一维数组的元素值为下标 *2+1,所以 a2=2*2+1=5,a8=8*2+1=17,那么 a2+a8=22。 C选项错误。 15 【正确答案】 A 【试题解析】 本题考查除号 /,当除号两边都是整数时,得出的结果为整数, 2/3等于 0,所以结果为 0, D选项正确。 16 【正确答案】 A 【试题解析】 函数 f1调用 f2,如果 f2定义在 f1之后,那么必须将 f2的函数原型声明放在 f1之前,如果 f2定义在 f1之前,那么不需要 f2函数原型声明。所以B选项正确。 17 【正确答案】 A 【试题解析】 本题主要考查运算符重 载函数,运算符重载函数既
15、可以定义为类的成员函数也可以定义为类的友元函数,所以 D选项错误。 18 【正确答案】 D 【试题解析】 在类体中定义的成员函数, C+系统会自动将它们作为内联函数处理,而在类外定义的成员函数,系统并不把它们默认为内联函数,使用 inline也是内联函数,所以共有 2个内联函数 f1和 f4, D选项正确。 19 【正确答案】 D 【试题解析】 本题考查重载减法运算符,重载运算符的一般形式为: 函数类型 operator 运算符名称 (参数列表 ) 对运算符的重载处理 根据定 义规则,只有 B选项正确。 20 【正确答案】 D 【试题解析】 参数传递有三种: 传值 (value),传址 (ad
16、dress),和传引用 (reference) 传值时子函数(被调用者)复制父函数(调用者)传递的值,这样子函数无法改变父函数变量的值,函数 f2就属于传值调用,所以不会改变 y的值。 传址时父函数将变量的地址传递给子函数,这样子函数可以能过改写地址里的内容改变父函数中的变量 传引用则是一种看起来像传值调用,而实际上功能同传址一样的传递方式。子函数可以改写父函数的变量值。 f1函数属于传引用调用 ,所以 y的值在执行完函数后变为了 36, C选项正确。 21 【正确答案】 C 【试题解析】 本题考查类型转换函数,其一般形式如下: operator 类型名 () 实现转换的语句 在函数名前面不能
17、指定函数类型,函数没有参数,所以 A选项正确。 22 【正确答案】 D 【试题解析】 本题考查运算符重载,不能重载的运算符只有 5个: .、 .*、 :、sizeof、 ?:。 C+规定有的运算符(如赋值运算符、下标运算符、函数调用运算符)必须定义为类的成员函数,只有 D选项正确。 23 【正确答案】 C 【试题解析】 本题考查如何引用类的数据成员,本题中要引用类的非静态数据成员,可以直接引用,所以 A选项正确。 24 【正确答案】 B 【试题解析】 本题考查类的静态数据成员,题目中定义了类的静态数据成员 b,当执行定义两个对象时执行构造函数,构造函数执行 b+,所以 b最终为 2,而d1.g
18、et()为 2, d2.get()为 3,最终结果为 7, C选项正确。 25 【正确答案】 B 【试题解析】 本题考查类的析构函数的定义,析构函数 (destructor) 与构造函数相反,当对象脱离其作用域 时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做 “清理善后 “ 的工作(例如在建立对象时用 new开辟了一片内存空间,应在退出前在析构函数中用 delete释放)。 以 C+语言为例,析构函数名也应与类名相同,只是在函数名前面加一个波浪符,例如 stud( ),以区别于构造函数。它不能带任何参数,也没有返回值(包括void类型)。只能有一个析构函数,不能重
19、载。如果用户没有编写析构函数,编译系统会自动生成一个缺省的析构函数,它也不进行任何操作。所以 C选项错误。 26 【正确答案 】 D 【试题解析】 本题考查继承使用的关键字,属于基础知识,使用 D选项为继承使用的关键字。 27 【正确答案】 C 【试题解析】 运行时多态与虚函数有关。派生类的对象可以认为是基类的对象,但基类的对象不是其派生类的对象。因此, C+允许一个基类对象的指针指向其派生类对象,但不允许一个派生类对象指向其基类对象。在调用虚函数的过程中指针和引用会起到一定的作用。 28 【正确答案】 C 【试题解析】 本题考查友元函数,本题中定义的 show不能直接访问 Base里的私有成
20、员。 29 【 正确答案】 D 【试题解析】 本题考查构造函数的定义,构造函数名为类的名称,所以只有 B选项正确。 30 【正确答案】 B 【试题解析】 当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数,所以 正确使用 this指针。 31 【正确答案】 A 【试题解析】 本题考查构造函数的应用,题目中定义对象 p0时,执行默认构造函数,得出 x和 y都为 0,定义对象 p1(3,4),得到 x和 y分别是 3,4,执行distance(p1,p0)后得出 5 32 【正确答案】 C 【试题解析】 定义 Bicycle bike时,执行
21、Wheel的构造函数输出 FR,然后执行Bicycle的构造函数输出 G,最后执行析构函数,一次执行派生类的析构函数输出G,再输出基类的析构函数输出 RF,最终输出 FRGGRF,选项 C正确。 33 【正确答案】 D 【试题解析】 本题考查派生类的定义,题目中基类有 4个成员,派生类都继承下来,派生类本身有 2个成员,所以总共有 6个成员, D选项正确。 34 【正确答案】 A 【试题解析】 本题考查派生类对基类成员的 访问属性,派生类公用继承基类的保护成员,在派生类中也变为了保护成员,只能在派生类内访问,不能在类外访问,所以 B选项错误。 35 【正确答案】 B 【试题解析】 执行派生类构
22、造函数的顺序是: 1、调用基类构造函数, 2、调用子对象构造函数, 3、再执行派生类析构函数,4、执行基类的析构函数,所以本题中定义 room1时,程序结束时先调用派生类析构函数输出 T41,然后执行基类的析构函数输出 A,而定义对象指针,并不会调用构造函数,所以什么也不输出,所以结果为 T41A, B 选项正确。 36 【正确答案】 A 【试题解析】 本题考查虚函数的运用,本题中定义 Dog d; Type(d)时,执行类class的 Type函数,输出 Dog,然后输出 speak,然后执行派生类的 Speak函数输出 Voice,最后输出 -,同理 cat输出类似,所以结果为 B选项正确
23、。 37 【正确答案】 C 【试题解析】 函数模板是一个抽象函数,使用模板定义的函数可以有返回值,函数模板的虚拟类型参数并不是函数参数。只有 D选项正确。 38 【正确答案】 D 【试题解析】 本题中要求返回值为 double行,那么 T1就是 double型, T2默认为 int,所以只有 C选项正确。 39 【正确答案】 A 【试题解析】 C+操作符 endl可以实现输出的回车换行的功能;在处理文件 I/O时,要包含头文件 iostream,是为了说明引用的参数或函数的位置;函数 eof()用来检测是否到达文件尾,如果到达件尾返回非 0值,否则返回 0。 40 【正确答案】 B 【试题解析】 本题考查输入输出格式的控制,只有 和 可以输出符合题目要求的格式,所以 C选项正确。