1、国家二级( C+)笔试模拟试卷 208及答案与解析 1 下列叙述中正确的是 ( )。 ( A)一个算法的空间复杂度大,则其时间复杂度必定大 ( B)一个算法的空间复杂度大,则其时间复杂度必定小 ( C)一个算法的时间复杂度大,则其空间复杂度必定小 ( D)上述三种说法都不对 2 下列叙述中错误的是 ( )。 ( A)线性表是由 n个元素组成的一个有限序列 ( B)线性表是一种线性结构 ( C)线性表的所有结点有且仅有一个前件和后件 ( D)线性表可以是空表 3 数据流图中带有箭头的线段表示的是 ( )。 ( A)控制流 ( B)数据流 ( C)模块调用 ( D)事件驱动 4 下面对对象概念描述
2、正确的是 ( )。 ( A)任何对象都必须有继承性 ( B)对象是属性和方法的封装体 ( C)对象问的通信靠信息传递 ( D)方法是对象的静态属性 5 栈 S最多能容纳 4个元素,现有 6个元素按 A、 B、 C、 D、 E、 F的顺序进栈,下列哪个序列不是可能的出栈序列 ( )。 ( A) C、 B、 E、 D、 A、 F ( B) C、 D、 B、 F、 E、 A ( C) A、 D、 E、 C、 B、 F ( D) A、 F、 E、 D、 C、 B 6 两个或两个以上模块之间联系的紧密程度称为 ( )。 ( A)耦合性 ( B)内聚性 ( C)复杂性 ( D)数据传输特性 7 在下列关于
3、二叉树的叙述中,正确的一项是 ( )。 ( A)在二叉树中,任何一个结点的度都是 2 ( B)二叉树的度为 2 ( C)在二叉树中至少有一个结点的度为 2 ( D)一棵二叉树的度可以小于 2 8 待排序的关键码序列为 (33, 18, 9, 25, 67, 82, 53, 95, 12, 70),要按关键码值递增的顺序排序,采取以第一个关键码为基准元素的快速排序法,第一趟排序后关键码 33被放到第 ( )个位置。 ( A) 3 ( B) 5 ( C) 7 ( D) 9 9 设根结点的层次为 0,高度为 K的二叉树最最大结点数为 ( )个。 ( A) 2K ( B) 2K+1-1 ( C) 2K
4、+1 ( D) 2K+1+1 10 设有如下关系表: 则下列操作正确的是 ( )。 ( A) T=R S ( B) T=RS ( C) T=RS ( D) T=R S 11 在公有派生时,派生类中定义的成员函数只能访问原基类的 ( )。 ( A)私有成员、保护成员和公有成员 ( B)保护成员和私有成员 ( C)公有成员和保护成员 ( D)公有成员和私有成员 12 有如下定义: int b10=1, 2,3,4, 5,6, 7,8,9, 10, *q=b; 则数值为 8的表达式是 ( )。 ( A) *q+8 ( B) *(q+7) ( C) *q+=8 ( D) q+7 13 下面的符号中可以
5、用作 C+标识符的是 ( )。 ( A) 3test ( B) fcc-othcr ( C) else ( D) radius 14 下列程序执行后,输出的结果是 ( )。 int x=-5, y=0; while(+x) y+; cout using namespace std; class Base protected: Base()cout using namespace std; intmain() cout fill(*); cout width(6); cout fill(#); cout using namespace std; int main() int*p, *q, r=1
6、0; q=&r; p=&q; cout using narnespace std; class TestClass static int i; public: TestClass()i+; TestClass()i -; static int getVal()return i; ; int TestClass: i=0; void f()TestClass obj2; coutgetVal(); delete obj3; cout using namespace std; class TestClass int n; public: TestClass(int k): n(k) int get
7、()return n; int get()constreturn n+1; ; int main() TestClass p(5); const TestClass q(6); cout using namespace std; int main() intx: 3: if(x=5) cout using namespace std; void swap(int x, int y) int temp=x; x=y; y=temp; cout using namespace std; classA public: A()cout0,且 i using namespace std; class C
8、on charID; public: Con(): ID(A)cout using namespace std; class TestClass public: virtual void wh00coutwho(); p=&obj2; p-who(); p=&obj3; p-who(); return 0: 48 有一种只在循环语句或 switch语句中使用的流程控制语句,表示该语句的关键字是 _。 49 程序中有如下语句: for(int i: 0; i using namespace std; class Base public; intm, n; ; class Derivedl: _B
9、ase; class Derived2: public Derivedl public: void SetMN(int M, int N)m=M; n=N; ) int GetSumMN0return(m+n); ; int main() Derived2 objD; objD SetMN(3, 4); cout是由逗号分开的,分别说明函数的各个参数。在 fun()函数中它包括三个形参: x+y, 3和 min(n-1, y);当调用一个函数时,实参与形参一对一匹配,所以实参个数也是 3个。 18 【正确答案】 A 【试题解析】 虚函数是非 static类型的成员函数,基类中可以利用 virt
10、ual关键字来声明虚函数,派生类中定义相同原型函数时可不必加 virtual说明,直接重写基类中的函数。在派生类中的虚函数必须与基类中的虚函数具有相同的参数个数与类型。 19 【正确答案】 C 【试题解析】 派生类 Derived由基类 Base公有派生,在派生类构造函数声明时系统会自动调用基类的缺省构造函数。调用 Derived d(Derived)后,执行类Derived构造函数的 Derived(charc),系统自动调用基类的缺省构造函数 Base(),输出字母 Base;再执行派生类的构造函数 Derived(char c),输出字母 Derived。 20 【正确答案】 A 【试题
11、解析】 C+在流操作中,利用 cout对象的 width属性设置输出字符的宽度,用 fill函数来设置需要填充的字符。题目程序中,首先设置填充字符为 *,输出宽度为 6,但在输出前又设置了填充字符为 #,所以在输出时,其填充字符为 #,由于 888不足 6个字符,所以在前面以三个 “#”来填充。 21 【正确答案】 C 【试题解析】 p为一个二级指针,其存放的是指针变量 q的地址,而 q存放的又是 r的地址。故式子 *p相当于对 r的引用。所以最后输出的结果为 11。 22 【正确答案】 C 【试题解析】 类模板本身在编译时是不会产生代码的,只有在其实例化以后才产生代码。定义一个对象时,不能省
12、略其实参。 23 【正确答案】 A 【试题解析】 C+中,若没有类的显式声明构造函数则系统会为其提供一个默认的构造函数,若提供了构造函数则会将系统提供的默认的构造函数覆盖。调用构造函数时,实参必须与形参匹配。但是如果声 明一个对象指针时,不是定义一个对象,不调用对象的构造函数。 24 【正确答案】 B 【试题解析】 在 CH中,字符串以 0作为字符串结束的标志,所以个数为 m-1。 25 【正确答案】 B 【试题解析】 由于 i是类 TestClass的静态成员,该成员被类的所有实例共享。当定义 obj1时,系统自动调用构造函数 TestClass(), i的值将加 1;调用函数 f()时,在
13、定义 obj2时系统会自动调用构造函数 TestClass (), i的值将再加 1;调用obj2 getVal();后,将 i的值输出 ,输出值为 2;当调用函数 f()即将结束时,系统自动调用析构函数 TestClass(), i的值将减 1;当定义 obj3时,系统自动调用构造函数 TestClass(), i的值将加 1,调用 coutgetVal();后,将 i的值输出,输出值为 2;调用 delete obj3后将执行 TestClass的析构函数 TestClass (),执行后, i的值将减 1, TestClass: getVal()为类的一个静态成员函数,其作用是返回私有静
14、态成员变量 i的值 1。 26 【正确答案】 C 【试题解析 】 继承方式有公有继承、私有继承和保护继承 3种,缺省的继承方式是私有继承。派生类从基类继承所有的成员,但是对于基类的私有成员派生类是不可直接访问的。 27 【正确答案】 B 【试题解析】 C+中对常对象的成员函数调用,将自动调用其常成员函数,程序中调用原型为 “int get()const; “”的函数,对于非常对象将调用原型为 “int get(); ”的函数。因为首先用 5对对象 p进行了初始化,所以执行 p get()时直接返回 5,而对于常对象则以 6对 q进行初始化,在调用 q get()时,将调用原型为 “int ge
15、toconst; ”的函数,该函数将返回 n+1,第二个输出应为 7,所以本题答案为57。 28 【正确答案】 C 【试题解析】 C+中拥有纯虚函数的类称为抽象类。抽象类不能用来定义对象。如果一个抽象类的派生类没有重定义来自基类的某个纯虚函数,则该函数在派生类中仍是纯虚函数,该类仍为抽象类。 29 【正确答案】 C 【试题解析】 if(条件 )语句 1 else语句 2,语句的执行过程是:首先判断条件是否为真 (不为 0),为真则执行语句 1,否则执行语句 2。题目中的条件是 x=5,意思是把 5赋予变量 x,它将 x置 5且返回一个真值。 30 【正确答案】 D 【试题解析】 C+中的拷贝构
16、造函数是用一个已知的对象初始化一个正在创建的同类对象。拷贝构造函数的一般格式如下: (类名 ): (类名 )(const(类名 )&引用对象名 );其中 const可以省略。 31 【正确答案】 B 【试题解析】 指针是一种用来存放其他变量地址的数据类型,它的声明形式为: (类型 )*(变量名 ),可以在声明的时候对其进行初始化。由于其存放的是内存单元的地址,所以大小一般都是 4个字节。 32 【正确答 案】 B 【试题解析】 C+中的四个预定义流对象: cout, cin, corr, clog。 33 【正确答案】 B 【试题解析】 C+中默认的参数传递是值传递,也就是将实参的副本传递给被
17、调用函数的形参,被调用的函数中对形参的任何改动都不会影响实参。 34 【正确答案】 B 【试题解析】 在每一个 C+程序中必须有且只有一个主函数,每个程序的执行都是从主函数的开始。 35 【正确答案】 A 【试题解析】 C+程序中的执行予类,首先执行基类的构造函数,然后执行数据成员类的 构造函数,最后执行子类本身的构造函数,所以输出结果为 ABC。 36 【正确答案】 自顶向下 【试题解析】 程序设计时,应先考虑总体,后考虑细节,逐步使问题具体化,对复杂的问题,应该设计一些子目标作为过渡,上述方法概括为:自顶向下,逐步细化。 37 【正确答案】 63 【试题解析】 满二叉树是指除最后一层外,每
18、一层上的所有结点都有两个子结点的二叉树。满二叉树在其第 i层上有 2i-1个结点,即每一层上的结点数都是最大结点数。对于深度为 6的满二叉树,叶子结点所在的是第 6层,所有结点数是: 26-1=63。 在任意一颗二叉树中,若终端结点的个数为 n0,度为 2的结点数为 n2,则n0=n2+1,所以总结点数为 n0+n2=n2+l+n2=2n2+1=63,因此 n2=(63-1)/2=36,即度为 2的结点人数为 36。 38 【正确答案】 内聚性 【试题解析】 衡量软件的独立性使用耦合性和内聚性两个定性的度量标准。内聚性是一个模块内部各个元素间彼此结合的紧密程度的度量,内聚是从功能角度来度量模块
19、内的联系。耦合性是模块间互相连接的紧密程度的度量。 39 【正确答案】 (n-1), 2 【 试题解析】 完全二叉树中除最下面一层外,各层都被结点充满了,每一层结点个数恰是上一层结点个数的 2倍。因此,从一个结点的编号就可以推知它的双亲及左、右子女结点的编号。当 i=n 2时,结点 i的左子女是结点 2i,否则结点 i没有左子女; 当 i=(n-1) 2时,结点 i的右子女是结点 2i+1,否则结点 i没有右子女; 当 i1时,结点 i的双亲是结点 i, 2。 40 【正确答案】 数据库系统 【试题解析】 在人工管理阶段,数据无法共享、冗余度大,完全依赖于程序;在文件系统阶段,数据共享性差 ;
20、而数据库系统具有三级模式及二级映射的抽象结构系统,从而保证了数据独立性的实现。 41 【正确答案】 13A23B 【试题解析】 Con c1定义 c1对象,调用 Con的无参数构造函数,输出 1, ID值变为 A,执行 show(c1)时会调用拷贝构造函数,将 c1对象的值拷贝给 show()函数的形参,此时输出 3,然后在 show()里面输出 c1的 ID值 A, Con c2(B)定义c2对象,调用 Con(char ID)构造函数,输出 2, c2的 ID值为 B, show(c2)执行时先调用拷贝构造函数输出 3,然后输出 B。因此程序输出结果为 “13A23B”。 42 【正确答案
21、】 x=y.operator*(z) 【试题解析】 此题考查的是 “*”运算符的重载。运算符函数的调用有两种形式,第一种是像一般函数那样用函数名调用,即 y operator*z);另一种是通过运算符构成表达式,即 y*z。 43 【正确答案】 false 【试题解析】 此题考查的是逻辑常量。在 C+语言中只有两个逻辑常量: true和false。故本题应填入 false。 44 【正确答案】 成员初始化列表 【试题解析】 派生类 是基类的具体化,而基类则是派生类的抽象。派生类也就是基类的具体实现,所以对基类数据成员的初始化是在派生类的构造函数中成员初始化列表执行的。 45 【正确答案】 2
22、【试题解析】 首先声明为 privace的 “pfivate: int j; ”中 j为私有成员。然后在类中没有指定,系统默认为私有。即 “int i: ”中的 i也是私有成员。所以本题中的私有成员数量为 2。 46 【正确答案】 构造函数 【试题解析】 构造函数的主要作用是对数据成员初始化,系统为成员分配内存时,保留这些存储单元的原状。 47 【正确答案】 1bstClass1 Class 【试题解析】 TestClass为基类, TestClass1和 TestClass2都是 TestClass的派生类。本题从 main主函数入手,首先定义了 Testclass类型的对象 obj1和指针
23、 p,然后又分别定义了 TestClass1和 Testclass2的对象 obj2和 obj3。指针分别指向对象 obj1、 obj2和 obj3,然后分别调用其成员函数 who(),分别输出: “Base Class”, “Testclass1 Class”, “TbstClass2 Class”。 48 【正确答案】 break 【试题解析】 此题考查的是流程控制语句。 “只在循环语句或 switch语句中使用 ”的流程控制语句只有 break。 49 【正确答案】 int*p=DATA 【试题解析】 此题考查的是指针变量的定义及初始化。题目中要求输出 int型数组 DATA的前五个元素,由表达式 *(p+0)和 *(p+4)可知变量 p是一个指向 DATA首地址的 int型指针,故它的定义及初始化语句是 int*p=DATA。 50 【正确答案】 privale 【试 题解析】 此题考查的是类的继承方式。类的继承方式有公有、保护和私有三种。分析题目可以得到,若横线处填入的是口 rivate,即类 Derived1私有继承类Base将导致 objD m和 obiD n出错,符合题目要求。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1