1、国家二级( C+)机试模拟试卷 25及答案与解析 一、选择题 1 下列数据结构中,能用二分法进行查找的是 ( )。 ( A)无序线性表 ( B)线性链表 ( C)二叉链表, ( D)顺序存储的有序表 2 下列叙述中,不属于设计准则的是 ( )。 ( A)提高模块独立性 ( B)使模块的作用域在该模块的控制域中 ( C)设计成多入口、多出口模块 ( D)设计功能可预测的模块 3 下列队列的描述中,正确的是 ( )。 ( A)队列属于非线性表 ( B)队列在队尾删除数据 ( C)队 列按 “先进后出 ”进行数据操作 ( D)队列按 “先进先出 ”进行数据操作 4 对于长度为 n的线性表,在最坏情况
2、下,下列各排序法所对应的比较次数中正确的是 ( )。 ( A)冒泡排序为 n(n一 1) 2 ( B)简单插入排序为 n ( C)希尔排序为 n ( D)快速排序为 n 2 5 为了使模块尽可能独立,要求 ( )。 ( A)内聚程度要尽量高,耦合程度要尽量强 ( B)内聚程度要尽量高,耦合程度要尽量弱 ( C)内聚程度要尽量低,耦合程度要尽量弱 ( D)内聚程度要尽量低,耦合程度要尽量强 6 下列选项中不属于软件生命周期开发阶段任务的是 ( )。 ( A)软件测试 ( B)概要设计 ( C)软件维护 ( D)详细设计 7 数据独立性是数据库技术的重要特点之一。所谓数据独立性是指 ( )。 (
3、A)数据与程序独立存放 ( B)不同的数据被存放在不同的文件中 ( C)不同的数据只能被对应的应用程序所使用 ( D)以上三种说法都不对 8 在学校中, “班级 ”与 “学生 ”两个实体集之间的联系属于 ( )关系。 ( A)一对一 ( B)一对多 ( C)多对一 ( D)多对多 9 软件调 试的目的是 ( )。 ( A)发现错误 ( B)改善软件的性能 ( C)改正错误 ( D)验证软件的正确性 10 在公有派生时,派生类中定义的成员函数只能访问原基类的 ( )。 ( A)私有成员、保护成员和公有成员 ( B)保护成员和私有成员 ( C)公有成员和保护成员 ( D)公有成员和私有成员 11
4、有如下定义: 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 12 下面的符号中可以用作 C+标识符的是 ( )。 ( A) 3test ( B) fcc other ( C) else ( D) radius 13 下列程序执行后,输出的结果是 ( )。 int x一 5, Y=0; while(+x) y+; cout using namespace std; class Base protected: Base()cout usmg
5、 namespace std; int main() cout fin(*); cout width(6); cout fill(#); cOut void main() int n3=1 0, 20, 30, 40, 50, 60); int(*p)3; p=n; cout using namespace std; int main0 int*p, *q, r=10; q=&r: P=&q; cout using namespace std; class TestClass static int i; public: TestClass()i+; ) TestClass 0i-; ) sta
6、tic int getVal0return 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 get0return n; int get()constreturn n+l; ; int main() TestClass p(5); const TestClass q(6); cout using namespace std
7、; int main() int x=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()cout class TestClass l public: TestClassl0 ; /*error* private: virtual-TestClass l() using namespace std; coutm i=i; ) void print() /*error* cout #incl
8、ude #include using namespace std; void WriteFile(char*s) void fun(char*s) void ClearFile() ofstream outl; outl open(“modi2 txt”); out 1 close(); int main() ClearFile0; char s1024; cout using namespace std; class TestClass 1 public: void print() cout是由逗号分开的,分别说明函数的各个参数。在 fun()函数中它包括三个形参: x+y, 3和 min(
9、n 1, y);当调用一个函数时,实参与形参一对一匹配,所以实参个数也是 3个。 17 【正确答案】 A 【试题解析】 虚函数是非 static类型的成员函数,基类中可以利用 virnJal关键字来声明虚函数,派生类中定义相同原型函数时可不必 加 vinual说明,直接重写基类中的函数。在派生类中的虚函数必须与基类中的虚函数具有相同的参数个数与类型。 18 【正确答案】 C 【试题解析】 派生类 Derived由基类 Base公有派生,存派生类构造函数声明时系统会自动调用基类的缺省构造函数。调用 Derived d(Derived);后,执行类DeriVed构造函数的 Derived(char
10、 c),系统自动调用基类的缺省构造函数 Base(),输出字母 Base;再执行派生类的构造函数 Derived(char c),输出字母 Derived。 19 【正确答案】 A 【试题解析】 c+在流操作中,利用 cout对象的 width属性设置输出字符的宽度,用 fill函数来设置需要填充的字符。题目程序中,首先设置填充字符为 +,输出宽度为 6,但在输出前又设置了填充字符为 #,所以在输出时,其填充字符为 #,由于 888不足 6个字符,所以在前面以三个 “#”来填充。 20 【正确答案】 C 【试题解析】 因为 aa后减,所以 a=4; b的值与 a、 bb相关, b=4*5=20
11、,与 aa没有任何关系。 21 【正确答案】 A 【试题解析】 extem用于声明外部变量的, register声明寄存器类型变量,无 cpu类型。它们都不能声明类成员。 public声明为公有访问权限。 22 【正确答案】 B 【试题解析】 类的定义,如果有自身类对象,会使其循环定义,选项 B)错误。在类中具有自身类的指针,可以实现链表的操作,当然也可以使用对象的引用,类 ,可以何另一个类的对象,即成员对象。 23 【正确答案】 D 【试题解析】 地址作为实参,表示实参与形参代表同一个对象。如果实参足数值,形参也是普通变量,此时形参是实参的备份。 24 【正确 答案】 B 25 【正确答案】
12、 C 【试题解析】 p为一个二级指针,其存放的是指针变量 q的地址,而 q存放的又是 r的地址。故式子 *p相当于对 r的引用。所以最后输出的结果为 11。 26 【正确答案】 C 【试题解析】 类模板本身在编译时是不会产生代码的,只有在其实例化以后才产牛代码。定义一个对象时,不能省略其实参。 27 【正确答案】 A 【试题解析】 C+中,若没有类的显式声明构造函数则系统会为其提供一个默认的构造函数,若提供了构造函数则会将系统提供的默认的构造函数覆盖。 调用构造函数时,实参必须与形参匹配。但是如果声明一个埘象指针时,不是定义一个对象,不凋用对象的构造函数。 28 【正确答案】 B 【试题解析】
13、 在 C+中,字符中以 0作为字符串结束的标志,所以个数为 m一 1。 29 【正确答案】 B 【试题解析】 由 i是类 TestClass的静态成员,该成员被类的所有实例共享。当定义 obil时,系统自动渊用构造函数 TestClass, i的值将加 l;调用函数 f()时,在定义 obj2时系统会自动调用构造函数 TestC: lass(), i的值将再加 l:调用obj2 getVal();后,将 i的值输出,输出值为 2;当调用函数 f()即将结束时,系统自动调用析构函数 TestClass(), i的值将减 1;当定义 obi3时,系统自动调用构造函数 TestClass(), i的
14、值将加 l,调用 coutgetVal();后,将 i的值输出,输出值为 2;调用 delete obj3后将执行 TestClass的析构函数TestClass(),执行后, i的值将减 1, TestC: lass: getVal()为类的一个静态成员函数,其作用是返回私有静态成员变量 i的值 1。 30 【正确答案】 C 【试题解析】 继承方式有公有继承、私有继承和保护继承 3种,缺省的继承方式是私有继承。派生类从基类继承所有的成员,但是对于基类的私有成员派生类是不可直接访问的。 31 【正确答案】 B 【试题解析】 C+中对常对象的成员函数调用,将自动调用其常成员函数,程序中调用原型为
15、 “int get()const; ”的函数,对于非常对象将调用原型为 ” int get(); ”的函数。凶为首先用 5对对象 p进行了初始化,所以执行 p get()时直接返回 5,而对于常对象则以 6对 q进行初 始化,在调用 q get()时,将渊用原型为 ”int get()const; “的函数,该函数将返回 n+1,第二个输出应为 7,所以本题答案为 57。 32 【正确答案】 C 【试题解析】 C+中拥有纯虚函数的类称为抽象类。抽象类不能用来定义对象。如果一个抽象类的派生类没有重定义来自基类的某个纯虚函数,则该函数在派生类中仍是纯虚函数,该类仍为抽象类。 33 【正确答案】 C
16、 【试题解析】 if(条件 )语句 l else语句 2,语句的执行过程足:首先判断条件是否为真 (不为 0),为真则执行语句 1,甭 则执行语句 2。题目中的条件足 x=5,意思是把 5赋予变量 x,它将 x置 5且返回一个真值。 34 【正确答案】 D 【试题解析】 C+中的拷贝构造函数是用一个已知的对象初始化一个正在创建的同类对缘。拷叭构造函数的一般格式如下: (类名 ): (类名 )(const, (类名 )&=A&si=a&siprint(); 【试题解析】 本题 的功能是通过 print虚函数将字符串输出。在 VC:环境下打开程序,根据题干给出的几条功能要求,对程序中给出注释下的内
17、容逐个补全或修改。从己定源程序的 main主函数开始入手,可以看出程序通过调用类和成员函数实现各种输出操作。 【解题思路】 (1)题日 1要求 “类 TLest(: lass2公共继承于 TestClassl”。从已有的类产生一个新的子类,成为类的派生。声明派生类的一般形式为: class 派生类名: 继承方式 基类名。根据题目中的要求以及派生类的一般形式,第 1个标识下添加语句 “class TestClass2: public TestClassl”。 (2)题目 2要求 “print函数为虚函数 ”。存 C+中,用 virtual声明的函数为虚函数,因此第 2个标识下的语句修改为 “virtualvoid print()”。 (3)题目 3要求 “使得 p指定对象 obj3”。 p为指针变量, obj3为类的对象,将一个指针变量指向另一个变量,只要把被指向的变量的地址赋给指针变量即可。取对象 ob3地址的语句为 &obj3,所以这早补全 “p=&obj3; ”。 (4)题目 4要求 “利用 p调用 print()函数 ”。 c+中用 ” ”运算符实现成员访问,因此调用 print()函数,戍将第 4个标识下修改为 “p一 print(); ”。