1、国家二级( C+)机试模拟试卷 169及答案与解析 一、选择题 1 下列数据结构中,能用二分法进行查找的是 ( )。 ( A)无序线性表 ( B)线性链表 ( C)二叉链表 ( D)顺序存储的有序表 2 下列叙述中,不属于设计准则的是 ( )。 ( A)提高模块独立性 ( B)使模块的作用域在该模块的控制域中 ( C)设计成多入口、多出口模块 ( D)设计功能可预测的模块 3 下列队列的描述中,正确的是 ( )。 ( A)队列属于非线性表 ( B)队列在队尾删除数据 ( C)队列按 “先进后出 ”进行数据操作 ( D)队列按 “先进先出 ”进行数据操作 4 对下列二树进行前序遍历的结果为 (
2、)。 ( A) ABCDEFGH ( B) ABDGEHCF ( C) GDBEHACF ( D) GDHEBFCA 5 对于长度为 n的线性表,在最坏情况下,下列各排序法所对应的比较次数中正确的是 ( )。 ( A)冒泡排序为 n(n-1) 2 ( B)简单插入排序为 n ( C)希尔排序为 n ( D)快速排序为 n 2 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、数只能访问原基类的 ( )。 ( 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 下面的符号中可以用作 C+标识符的是 ( )。 ( A) 3test ( B) fcc other ( C) else ( D) radius 14 下列程序执行后,输出的结果是 ( )。 int x=-5, y=
5、0; while(+x) y+; cout y endl; ( A) 1 ( B) 2 ( C) 4 ( D) 5 15 有如下类声明: class TestClass int n; public: TestClass(int i=0): n(i) void setValue(int n0); ; 下面关于 setValue成员函数的实现中,正确的是 ( )。 ( A) TestClass: setValue(int n0)n=n0; ( B) void TestClass: setValue(int n0)n=n0; ( C) void setValue(int n0)n=n0; ( D)
6、setValue(int n0)n=n0; 16 下面关于常成员函数的说法中正确的是 ( )。 ( A)常成员函数不能修改任何的数据成员 ( B)常成员函数只能修改一般的数据成员 ( C)常成员函数只能修改常数据成员 ( D)常成员函数只能通过常对象来调用 17 下面的函数调用为: fun(x+y, 3, min(n-1, y)则 fun的实参个数是 ( )。 ( A) 3 ( B) 4 ( C) 5 ( D) 6 18 下面关于虚函数的描述中,正确的是 ( )。 ( A)基类中利用 virtual关键字说明一个虚函数后,其派生类中定义相同的原型函数时可不必加 virtual来说明 ( B)虚
7、函数是非成员函数 ( C)虚函数是 static类型的成员函数 ( D)派生类中的虚函数与基类中类型相同的虚函数具有不同的参数个数或类型 19 有如下程序: #include iostream using namespace std; class Base protected: Base()cout ase; Base(char c)cout c; ; class Derived: public Base public: Derived(char c)cout c; ; int main() Derived d(Derived); return 0; 执行这个程序屏幕上将显示输出 ( )。 (
8、 A) Derived ( B) DerivedBase ( C) BaseDerived ( D) DerivedDerived 20 有如下程序: #include iostream using namespace std; int main() cout fill(*); cout width(6); cout fill(#); cout 888 endl; return 0: 的执行结果是 ( )。 ( A) #888 ( B) 888# ( C) *888 ( D) 888* 21 假定一个类的构造函数为 A(int aa, int bb)a=aa-; b=a*bb; ,则执行 Ax
9、(4,5);语句后, x a和 x b的值分别为 ( )。 ( A) 3和 15 ( B) 5和 4 ( C) 4和 20 ( D) 20和 5 22 在类中说明的成员可以使用关键字的是 ( )。 ( A) public ( B) extem ( C) cpu ( D) register 23 下列不能作为类的成员的是 ( )。 ( A)自身类对象的指针 ( B)自身 类对象 ( C)自身类对象的引用 ( D)另一个类的对象 24 使用地址作为实参传给形参,下列说法正确的是 ( )。 ( A)实参是形参的备份 ( B)实参与形参无联系 ( C)形参是实参的备份 ( D)参与形参是同一对象 25
10、 下列程序的输出结果是 ( )。 #include iostrearn h void main() int n3=10, 20, 30, 40, 50, 60; int(*p)3; p=n; cout p00 , *(p0+1) , (*p)2 endl; ( A) 10, 30, 50 ( B) 10, 20, 30 ( C) 20, 40, 60 ( D) 10, 30, 60 26 设程序如下: #include iostrearn using narnespace std; int main() int*p, *q, r=10; q= ( A) TestClass*p; ( B) Te
11、stClass m; ( C) TestClass data=8; ( D) TestClass show(); 29 类中的一个字符指针成员指向具有 m个字节的存储空间时,它所能存储的字符串的最大长度为 ( )。 ( A) m-2 ( B) m-1 ( C) m ( D) m+1 30 有如下程序: #include iostream using namespace std; class TestClass static int i; public: TestClass()i+; TestClass ()i-; ) static int getVal0return i; ; int Test
12、Class: i=0; void f()TestClass obj2; cout obj2 getVal(); int main() TestClass obj1; f(); TestClass*obj3=new TestClass; cout obj3- getVal(); delete obj3; cout TestClass: getVa1(); return 0; 程序的输出结果是 ( )。 ( A) 232 ( B) 221 ( C) 222 ( D) 231 31 下 面关于派生类的描述中错误的是 ( )。 ( A)派生类中至少有一个基类 ( B)一个派生类可以作为另一个派生类的基
13、类 ( C)派生类只继承了基类中的公有成员和保护成员 ( D)派生类的缺省继承方式是私有 32 有如下程序: #include iostream using namespace std; class TestClass int n; public: TestClass(int k): n(k) int get()return n; im getOconstreturn n+l; ; int main() TestClass p(5); const TestClass q(6); cout p get() q get(); return 0: 执行后的输出结果是 ( )。 ( A) 55 ( B
14、) 57 ( C) 75 ( D) 77 33 下列关于抽象类的表述中正确的是 ( )。 ( A)派生类必须要实现作为基类的抽 象类中的纯虚函数 ( B)抽象类的成员函数至少有一个没实现 ( C)抽象类不可能用来定义对象 ( D)派生类不能成为抽象类 34 执行下列语句: #include iostream using namespace std; int main() int x=3; if(x=5) cout x+ endl; else cout x endl; return 0; 程序的输出是 ( )。 ( A) 3 ( B) 4 ( C) 5 ( D) 6 35 假定 TestClas
15、s为一个类。则该类的拷贝构造函数的声明语句为 ( )。 ( A) TestClass(TestClass x) ( B) TestClass iass TestClass2: public TestClass1 public: *error* explicit TestClass2(int i) m_i=i; ; TestClass2& operator ()(int i) this- m_i=i; void print() *error* cout m_i endl; private: int m_i; ; void fun(TestClass2 C1) C1 print(); int ma
16、in() fun(10); return 0; 三、简单应用题 42 使用 VC6打开考生文件夹下的源程序文件 modi2 epp。请完成函数fun(char*s),该函数完成以下功能: (1)把 S中的大写字母转换成小写字母,把其中的小写字母转换成大写字母。并且在函数中调用写函数 WriteFile()将结果输出到 modi2 txt文件中。 例如: s=helloTEST,则结果为: s=HELLOtest (2)完成函数 WriteFile(char*s),把字符串输入文件中。 提示:打开文件使用的第二参数为 ios 注意:不要改动 main函数,不得增行或行,也不得更改程序的结构。 #
17、include iostream #include fstream #include cmath using narnespace std; void WriteFile(char*s) void fun(ehar*s) void ClearFile() orstream out1; out1 open(modi2 txt); out1 close(); intmain() ClearFile(); char s1024; tout please input a string: endl; cin getline(s, 1024); fun(s); return 0; 四、综合应用题 43 用
18、 VC6打开考生文件夹下的源程序文件 modi3 cpp,其中定义了多个类,但类不能达到输出要求,按照定义的输出修改函数,使得输出如下: TestClass3 TestClass2 TestClass1 其中定义的类并不完整,按照要求完成下列操作,将类的定义补充完整。 (1)类 TestClass2公共继承于 TestClass1,请在注 释 *1*后添加适当的语句。 (2)print函数为虚函数,请在注释 *2*后添加适当的语句。 (3)修改语句,使得 p指定对象 obj3,请在注释 *3*后添加适当的语句。 (4)修改语句,利用 p调用 print()函数,完成输出信息,注释*4*后添加适
19、当的语句。 注意:仅在函数指定位置添加语句,请勿改动主函数 main与其他函数中的任何内容。 #include iostream using namespace std; class TestClass1 public: void print() toutgetVal();后,将 i的值输出,输出值为 2:调用 delete obj3后将执行 TestClass的析构函数TestClass(),执行后, i的值将减 1, TestClass: getVal()为类的一个静态成员函数,其作用是返回私有静态成员变量 i的值 1。 31 【正确答案】 C 【试题解析】 继承方式有公有继 承、私有继承
20、和保护继承 3种,缺省的继承方式是私有继承。派生类从基类继承所有的成员,但是对于基类的私有成员派生类是不可直接访问的。 32 【正确答案】 B 【试题解析】 C+中对常对象的成员函数调用,将自动调用其常成员函数,程序中调用原型为 “int got()const; “的函数,对于非常对象将调用原型为 “int get(); 的函数。因为首先用 5对对象 p进行了初始化,所以执行 p get()时直接返回 5,而对于常对象则以 6对 q进行初始化,在调用 q get()时,将调用原型为 “int got()const; “的函数,该函数将返回 n+1,第二个输出应为 7,所以本题答案为57。 33
21、 【正确答案】 C 【试题解析】 C+中拥有纯虚函数的类称为抽象类。抽象类不能用来定义对象。如果一个抽象类的派生类没有重定义来自基类的某个纯虚函数,则该函数在派生类中仍是纯虚函数,该类仍为抽象类。 34 【正确答案】 C 【试题解析】 if(条件 )语句 1 else语句 2,语句的执行过程是:首先判断条件是否为真 (不为 0),为真则执行语句 1,否则执行语句 2。题目中的条件是 x=5,意思是把 5赋予变量 x,它将 x置 5且返回一个真值。 35 【正确答案】 D 【试题解析】 C+中的拷贝构造函数是用一个已知的对象初始化一个正在创建的同类对象。拷贝构造函数的一般格式如下: (类名 ):
22、类名 )(const(类名 )&引用对象名 );其中 eonst可以省略。 36 【正确答案】 B 【试题解析】 指针是一种用来存放其他变量地址的数据类型,它的声明形式为: (类型 )*(变量名 ),可以在声明的时候对其进行初始化。由于其存放的是内存单元的地址,所以大小一般都是 4个字节。 37 【正确答案】 B 【 试题解析】 C+中的四个预定义流对象: cout, cin, cerr, clog。 38 【正确答案】 B 【试题解析】 C+中默认的参数传递是值传递,也就是将实参的副本传递给被调用函数的形参,被调用的函数中对形参的任何改动都不会影响实参。 39 【正确答案】 B 【试题解析】
23、 在每一个 C+程序中必须有且只有一个主函数,每个程序的执行都是从主函数的开始。 40 【正确答案】 A 【试题解析】 C+程序中的执行子类,首先执行基类的构造函数,然后执行数据成员类的构造函数,最后执行 子类本身的构造函数,所以输出结果为 ABC。 二、基本操作题 41 【正确答案】 (1)删除 private: 语句 (2)TestClass2(int i) (3)std: cout m_i std: endl; 【试题解析】 (1)第 1个标识下的 “virtual TestClass1()”语句是 TestClass1()析构函数,不是私有函数,所以删除 “private: ”。 (2
24、)“explicit TestClass2(int i)”构造函数语句中的 “explicit”是禁止隐 式转换。程序 中无法实现对类 TestClass2的直接使用,所以这里应该将其删除。即“TestClass2(int i)”。 (3)第 3个标识下实现, fun函数中 m_i的标准输出,即在屏幕上输出 10。在程序中用到 C+标准库时,要使用 std标准命名空间进行限定。 cout为标准库函数,所以要声明 cout是在命名空间。 std中定义的流对象,即 “std: coutm_i std: endl; ”或者添加 “using namespace std; ”。 三、简单应用题 42
25、【正确答案】 (1)void WriteFile(char*s)中的命令语句: ofstream out1; out1 open(“modi2 txt“,ios_base: binarylios_base: app);打开文件modi2 out1 s: 写入字符串 s out1 close(); (2)void fun(char*s)中的命令语句: for(int i=0; si!=0; i+) 循坏判断每一个字符 if( si =A&si =Z) 如果是大写字符,转换 为小写字符 si=si-A+a; si-A+a等于字符 si+32 Else if(si =a&si =z) 如果是小写字符
26、,转换为大写字符 si=si-a+A; si-a+A等于字符 si-32 WriteFile(s); 【试题解析】 (1)在 WriteFile(char*s)函数中,利用标准流 ofstream实现字符串写入文件 modi2 txt。 (2)在 fun函数中,利用 for循环逐个判断字符是大写还是小写。 (3)如果是大写,那么加上 32实现大写转换为小写。否则,就减去 32,实现小写到大写的转换。最后调用前面实现的 WriteFile函数,将字符串写入文件。 四、综合应用题 43 【正确答案】 (1)将 “class TestClass2”补充完整为: class TestClass2: p
27、ublic TestClass1 (2)将 “void print()”补充完整为: virtual void print() (3)将 “p=obi3; ”修改为: p=&obj3; (4)将 “p print(); ”修改为: p- print(); 【试题解析】 (1)题目 1要求 “类 TestClass2公共继承于。 TestClass1”。从已有的类产生一个新的子类,成为类的派生。声明派生类的一般形式为 class派生类名:继承方式 基类名。根据题目中的要求以及派生类的一般形式,第 1个标识下添加语句 “class TestClass2: publicTestClass1”。 (2
28、)题目 2要求 “print函数为虚函数 ”。在 C+中,用 virtual声 明的函数为虚函数,因此第 2个标识下的语句修改为 “virtualvoid print()”。 (3)题目 3要求 “使得 p指定对象 obj3”。 p为指针变量, obj3为类的对象,将一个指针变量指向另一个变量,只要把被指向的变量的地址赋给指针变量即可。取对象 0bj3地址的语句为 &obj3,所以这里补全 “p=&obj3; ”。 (4)题目 4要求 “利用 p调用 print()函数 ”。 C+中用 ”- ”运算符实现成员访问,因此调用 print()函数,应将第 4个标识下修改为 “p- print(); ”。