1、国家二级( C+)机试模拟试卷 139及答案与解析 一、选择题 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、 5, y=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( intn0) n=n0; ( B) void Testclass: setValue ( int n0) n=n0; ( C) void setValue( int n
6、0) n=n0; ( D) setValue( intn0) 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关键字说明一个虚函数后,其派生类中定义相同的原型函数时可不必加
7、 virtual来说明 ( B)虚函数是非成员函数 ( C)虚函数是 static类型的成员函数 ( D)派生类中的虚函数与基类中类型相同的虚函数具有不同的参数个数或类型 19 有如下程序: #include iostream using namespace std; class Base protected: Base() cout Base; Base(char c)cout c; ; class Derived: public Base public: Derived(char c)cout c; ; mt main() Derived d(Derived); return 0: 执行这
8、个程序屏幕上将显示输出 ( )。 ( A) Derived ( B) Derived Base ( C) Base Derived ( D) Derived Derived 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)
9、 a=aa一一; b=a*bb; ,则执行A x( 4, 5);语句后, x a和 x b的值分别为 ( )。 ( A) 3和 15 ( B) 5和 4 ( C) 4和 20 ( D) 20和 5 22 在类中说明的成员可以使用关键字的是 ( )。 ( A) public ( B) extern ( C) cpu ( D) register 23 下列不能作为类的成员的 是 ( )。 ( A)自身类对象的指针 ( B)自身类对象 ( C)自身类对象的引用 ( D)另一个类的对象 24 使用地址作为实参传给形参,下列说法正确的是 ( )。 ( A)实参是形参的备份 ( B)实参与形参无联系 (
10、C)形参是实参的备份 ( D)参与形参是同二对象 25 下列程序的输出结果是 ( )。 #include iostream h void main0 int n3=10, 20, 30, 40, 50, 60; int(*p)3; p=n; cout p00 “, “ *(p0+1) “, “ (*p)2 end1; ( A) 10, 30, 50 ( B) 10, 20, 30 ( C) 209 40, 60 ( D) 10, 30, 60 26 设程序如下: #include iostream using namespace std; int main() int *p, *q, r=10
11、; q=&r; p=&q; cout *p+1 end1; return 0: 以上程序的输出结果是 ( )。 ( A) p的地址 ( B) r的地址 ( C) 11 ( D)运行错误 27 下面关于函数模板的表述中不正确的是 ( )。 ( A)类模板的成员函数都是模板函数 ( B)类模板本身在编译过程中不会产生任何代码 ( C)类模板只能有虚拟类型的参数 ( D)用类模板定义一个对象时,实参不能省略 28 下面类的声明中的几个语句,正确的是 (设定语句足主函数中的语句 )( )。 class TestClass pnvate: int data; public: TestClass (int
12、 g_data) data=g_data; void show() cout data endl; ; ( A) Testclass *p; ( B) Testclassm; ( 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;
13、public: TestClass()i+; ) TestClass ()i一一; static int getVal() return i; ; int TestClass: i=0; void f() TestClass obj2; cout obj2 getVal(); int main() TestClass obj 1; f(); TestClass*obj3=new TestClass, cout obj3一 getVal(); delete obj3; cout TestClass: getVal(); return 0; 程序的输 出结果是 ( )。 ( A) 232 ( B)
14、 221 ( C) 222 ( D) 231 31 下面关于派生类的描述中错误的是 ( )。 ( A)派生类中至少有一个基类 ( B)一个派生类可以作为另一个派生类的基类 ( C)派生类只继承了基类中的公有成员和保护成员 ( D)派生类的缺省继承方式是私有 32 有如下程序: #include iostream using namespace std; class TestClass int n; public: TestClass (int k): n(k) int get()return n; int get()const return n+1; ; int main() TestClas
15、s p(5); const TestClass q(6); cout p get() q get(); return 0: 执行后的输出结果是 ( )。 ( A) 55 ( B) 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+ e
16、ndl; else cout x endl; return 0: 程序的输出是 ( )。 ( A) 3 ( B) 4 ( C) 5 ( D) 6 35 假定 TestClass为一个类,则该类的拷贝构造函数的声明语句为 ( )。 ( A) Testclass ( Testclass x) ( B) Testclass&( Testclass x) ( C) Testclass ( Testclass *x) ( D) Testclass ( Testclass &x) 36 下面关于指 针的说法中错误的是 ( )。 ( A)在指针定义的同时可以对其进行初始化 ( B)指针根据其所指向变量的类型
17、的不同,所占用内存大小也不同 ( C)指针中存放的是内存单元的地址 ( D)相同类型的指针之间可以相互赋值 37 下面不属于 C+的预定义的流对象是 ( )。 ( A) cin ( B) iostream ( C) c1og ( D) cen 38 下列程序执行后,屏幕的输出是 ( )。 #include iostream using namespace std; void swap(int x, int y) int temp=x; x=y; y=temp; cout “x=“ x “, y=“ y endl; int main() int x=3, y=2; swap(x, y); COU
18、t “x=“ x “, y=“ y endl; return 0; ( A) x=3, y=2 x=3, y=2 ( B) x=2, y=3 x=3, y=2 ( C) x=2, y=3 x=2, y=3 ( D) x=3, y=2 x=2, y=3 39 在每个 C+程序中必须有且仅有一个 ( )。 ( A)函数 ( B)主函数 ( C)预处理指令 ( D)语句 40 有如下程序: #include iostream using namespace std; classA public: A()cout “A“; ) ; classBpublic: B()cout “B“; ; class
19、C: public A B b: public: C()cout “C“; ; int main() C obj; return 0; 执行后的输出结果是 ( )。 ( A) ABC ( B) BAC ( C) ACB ( D) CBA 二、基本操作题 41 使用 VC6打开考生文件夹下的源程序文件 modil cpp,该程序运行时有错误,请改正程序中的错误,使得程序输出: 10 Testclassl 注意:不要改动 main函数,不能增行或删行,也不能更改程序的结构,错误的语句在 *error*的下面。 #inc1ude iostream class Testclassl public: T
20、estclassl() ; *error* private: virtual Testclassl() using namespace std; cout “Testclassl“ end1; ; ; class Testclass2: public Testclassl public: explicit Testclass2(int i) ; Testclass2& operator ()(int i) this一 m_i = i; void print() cout m_i endl; private: intm_i; ; void fun(Testclass2 c1) C1 print(
21、); int main() fun(10); retum 0; 三、简单应用题 42 使用 VC6打开考生文件夹下的源程序文件 modi2 cpp。请完成函数 fun(char* s),该函数完成以下功能 : (1)把 s中的大写字母转换成小写字母,把其中的小写字母转换成大写字母。并且在函数中调用写函数 WriteFile()将结果输出到 mod12 txt文件中。 例如: s=“helloTEST”,则结果为: s=“HELLOtest“ (2)完成函数 WriteFile(char*s),把字符串输入文件中。 提示:打开文件使用的第二参数为 ios_base: binary|ios_ ba
22、se: app。 注意:不要改动 main()函数,不得增行或删行,也不得更改程序的结构。 #include iostream #include fstream #include cmath using namespace std; void WriteFile(char*s) void fun(char*s) void ClearFile() ofstream outl; outl open(“modi2 txt“); outl close(), int main() ClearFile(); char s1024; cout “please input a string: “ endl;
23、cin getline(s, 1024); fun(s), return 0; 四、综合应用题 43 用 VC6打开考生文件夹下的源程序文件 modi3 cpp,其中定义了多个类,但类不能达到输出要求,按照 定义的输出修改函数,使得输出如下: TestClass3 TestClass2 TestClass1 其中定义的类并不完整,按照要求完成下列操作,将类的定义补充完整。 (1)类 TestClass2公共继承于 TestClassl,请在注释 *1*后添加适当的语句。 (2) print函数为虚函数,请在注释 *2*后添加适当的语句。 (3)修改语句,使得 p指定对象 obj3,请在注释 *
24、3*后添加适当的语句。 (4)修改语句,利用 p调用 print()函数,完成输出信息,注释*4*后添加适当的语句。 注意:仅在函数指定位置添加语句,请勿改动主函数 main与其他函数中的任何内容。 #include iostream using namespace std; class TestClassl public: void print() cout ”TestClassl” endl; ; *1* class TestClass2 public: *2* void print() cout “TestClass2“ endl; ; class TestClass3: public
25、TestClass2 public: void print() cout ”TestClass3” endl; ; int main() TestClass2 0bj2; TestClass3 0bj3; TestClassl*p; obj2 print(); obj 3 print(); *3* p=obj3; *4* p print(); return 0; 国家二级( C+)机试模拟试卷 139答案与解析 一、选择题 1 【正确答案】 D 【试题解析】 二分法查找只适用于顺序存储的有序表,表中的元素按值从小到大排列。 2 【正确答案】 C 【试题解析】 大量软件设计表明,以下的设计准则是
26、可以借鉴为设计的指导和对软件结构图进行优化,这些准则是:提高模块独立性;模块规模适中:深度、宽度、扇出和扇入适当:使模块的作用域在该模块的控制域中:应减少模块的接口和界面的复杂性;设计成单入口、单出口的模块:设计功能可预测的模块。 3 【正确答案】 D 【试题解析】 队列是只允许在一端删除,在另一端插入的顺序表, 允许删除的一端叫做队头,允许插入的一端叫做队尾。队列的操作数是依据先进先出的原则进行的。因此队列亦称作先进先出的线性表,或后进后出的线性表。 4 【正确答案】 B 【试题解析】 遍历就是不重复地访问二叉树的所有结点。二叉树遍历的方法有 3种:前序遍历、中序遍历和后序遍历。记住 3种遍
27、历的顺序: 前序,访问根一按前序遍历左子树一按前序遍历右子树。 中序,按中序遍历左子树一访问根一按中序遍历右子树。 后序,按后序遍历左子树一按后序遍历右子树一访问根。 所以对该二叉树的中序遍历结果为 ABDGEHCF。 5 【正确答案】 A 【试题解析】 在最坏情况下,冒泡排序所需要的比较次数为 n( n一 1) 2;简单插入排序所需要的比较次数为 n( n一 1) 2;希尔排序所需要的比较次数为 0( n1 5);堆排序所需要的比较次数为 0( nlog2n)。 6 【正确答案】 B 【试题解析】 模块独立性是指每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单。耦合性
28、与内聚性是模块独立性的两个定性标准,耦合与内聚是相互关联的。在程序结构中,各模块的内聚性越强,则耦合性越弱。一般较优秀的软件设计,应尽 量做到高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性。 7 【正确答案】 C 【试题解析】 软件生命周期分为软件定义、软件开发及软件运行维护三个阶段,其中开发阶段包括概要设计、详细设计、实现和测试。 8 【正确答案】 D 【试题解析】 数据独立性是数据与程序间的 小依赖性,即数据库中数据独立于应用程序而不依赖于应用程序。所以选项 A),选项 B)和选项 C)都不正确。 9 【正确答案】 B 【试题解析】 一个班可以有多名学生
29、,而一名学生只能属于 个 班级,所以 “班级 ”与 “学生 ”两个实体集之间的联系属于一对多关系。 10 【正确答案】 C 【试题解析】 在对程序进行了成功的测试之后将进入程序调试,程序调试的任务是诊断和改正程序中的错误。 11 【正确答案】 C 【试题解析】 派生类中的成员,一部分是从基类继承来的,另一部分是自己定义的新成员,所有的这些成员也分为公有、私有和保护三种访问权限。其中,从基类继承下来的全部成员构成派生类的基类,这部分的私有成员是派生类不能直接访问的,而公有成员和保护成员则是派生类可以直接访问的,但它们在派生 类中的访问属性随着派生类对基类的继承方式而改变。 12 【正确答案】 B
30、 【试题解析】 数组的下标是从 0到数组的长度减 1。 *( p+i)是取数组的第 i+1个元素,即下标为 i的元素。因此 *( p+7)取数组的第八个元素,即元素 8。 13 【正确答案】 D 【试题解析】 C+标识符是以字母、下划线开头的,由字母、数字及下划线组成的,不与关键字相同的字符串。选项 C)中 else为关键字。 14 【正确答案】 C 【试题解析】 循环条件是 +x,在 c+中,对于非 0值全都为真, 0代表假。 x的初始值为一 5,所以循环能进行 4次。 15 【正确答案】 B 【试题解析】 C+中类成员函数的实现形式为:返回类型类名:成员函数名(参数列表) 代码块 16 【
31、正确答案】 A 【试题解析】 C+中使用 const关键字来说明函数称为常成员函数,常成员函数不能更新对象中的数据成员。 17 【正确答案】 A 【试题解析】 在 C+中,形参列表是由逗号分开的,分别说明函数的各个参数。在 fun()函数中它包括三个形参: x+y, 3和 min( n一 1, y);当调用一个函数时,实参 与形参一对一匹配,所以实参个数也是 3个。 18 【正确答案】 A 【试题解析】 虚函数是非 static类型的成员函数,基类中可以利用 virtual关键字来声明虚函数,派生类中定义相同原型函数时可不必加 virtual说明,直接重写基类中的函数。在派生类中的虚函数必须与
32、基类中的虚函数具有相同的参数个数与类型。 19 【正确答案】 C 【试题解析】 派生类 Derived由基类 Base公有派生,在派生类构造函数声明时系统会自动调用基类的缺省构造函数。调用 Derived d( Derived); 后,执行类Derived构造函数的 Derived( char c),系统自动调用基类的缺省构造函数 Base(),输出字母 Base:再执行派生类的构造函数 Derived( char c),输出字母Derived。 20 【正确答案】 A 【试题解析】 CH在流操作中,利用 cout对象的 width属性设置输出字符的宽度,用 fill函数来设置需要填充的字符。
33、题目程序中,首先设置填充字符为。输出宽度为 6,但在输出前又设置了填充字符为 #,所以在输出时,其填充字符为 #,由于 888不足 6个字符,所以在前面以三个 “#”来填充。 21 【正确答案】 C 【试题解析】 因为 aa后减,所以 a=4 b的值与 a、 bb相关 b=4*5=20,与 aa没有任何关系。 22 【正确答案】 A 【试题解析】 extern用于声明外部变量的, register声明寄存器类型变量,无cpu类型。它们都不能声明类成员。 public声明为公有访问权限。 23 【正确答案】 B 【试题解析】 类的定义,如果有自身类对象,会使其循环定义,选项 B)错误。在类中具有
34、自身类的指针,可以实现链表的操作,当然也可以使用对象的引用,类中 可以有另一个类的对象,即成员对象。 24 【正确答案】 D 【试题解析】 地址作为实参,表示实参与形参代表同一个对象。如果实参是数值,形参也是普通变量,此时形参是实参的备份。 25 【正确答案】 B 【试题解析】 如果数组元素都是相同类型的指针,则称这个数组为指针数组。指针数组一般用于处理二维数组。声明的格式为:数据类型 ( *变量名) 元素个数 。 p表示指向数组 n的行指针,初始化 “( *p) 3=n; ”,地址的等价形式: p+、 pi、 *( p+i)都表示数组第 i+1行的第 1个元素的 首地址。 *( p+i)+j
35、、 pi+j、 pij都表示数组第 i+1行、第 j+1列元素的地址。值的等价形式:+( *p+i) +j)、 *( pi+j)、 piD都表示数组第 i+1、第 j+1列元素的值。所以本题中分别访问数组元素 p00, p01, p02。 26 【正确答案】 C 【试题解析】 p为一个二级指针,其存放的是指针变量 q的地址,而 q存放的又是 r的地址。故式子 *p相当于对 r的引用。所以最后输出的结果为 11。 27 【正确答案】 C 【试题解析】 类模 板本身在编译时是不会产生代码的,只有在其实例化以后才产生代码。定义一个对象时,不能省略其实参。 28 【正确答案】 A 【试题解析】 C+中
36、,若没有类的显式声明构造函数则系统会为其提供一个默认的构造函数,若提供了构造函数则会将系统提供的默认的构造函数覆盖。调用构造函数时,实参必须与形参匹配。但是如果声明一个对象指针时,不是定义一个对象,不调用对象的构造函数。 29 【正确答案】 B 【试题解析】 在 C+中,字符串以 0作为字符串结束的标志,所以个数为 m一 1。 30 【正确答案 】 B 【试题解析】 由于 i是类 TestClass的静态成员,该成员被类的所有实例共享。当定义 objl时,系统自动调用构造函数 TestClass(), i的值将加 1:调用函数 f()时,在定义 obj2时系统会自动调用构造函数 TestCla
37、ss(), i的值将再加1;调用 obj2 getVal();后,将 i的值输出,输出值为 2;当调用函数 f()即将结束时,系统自动调用析构函数 TestClass(), i的值将减 1;当定义 obj3时,系统自动调用构造函数 TestClass(), i的值将加 1,调用 cout obj3一getVal();后,将 i的值输出,输出值为 2;调用 delete obj3后将执行 TestClass的析构函数 TestClass(),执行后, i的值将减 1, TestClass: getVal()为类的一个静态成员函数,其作用是返回私有静态成员变量 i的值 l。 31 【正确答案】 C
38、 【试题解析】 继承方式有公有继承、私有继承和保护继承 3种,缺省的继承方式是私有继承。派生类从基类继承所有的成员,但是对于基类的私有成员派生类 4是不可直接访问的。 32 【正确答案】 B 【试题解析】 C+中对常对象的成员函数调用,将自动调用其常成员函数,程序中调用原型为 ”int get() const; ”的函数,对于非常对象将调用原型为 ”int gct(); ”的函数。因为首先用 5对对象 p进行了初始化,所以执行 p get()时直接返回 5,而对于常对象则以 6对 q进行初始化,在调用 q get()时,将调用原型为 ”int get() const; ”的函数,该函数将返回
39、n+1,第二个输出应为 7,所以本题答案为 57。 33 【正确答案】 C 【试题解析】 C+中拥有纯虚函数的类称为抽象类。抽象类不能用来定 义对象。如果一个抽象类的派生类没有重定义来自基类的某个纯虚函数,则该函数在派生类中仍是纯虚函数,该类仍为抽象类。 34 【正确答案】 C 【试题解析】 if(条件)语句 l else语句 2,语句的执行过程是:首先判断条件是否为真(不为 0),为真则执行语句 l,否则执行语句 2。题目中的条件是 x=5,意思是把 5赋予变量 x,它将 x置 5且返回一个真值。 35 【正确答案】 D 【试题解析】 C+中的拷贝构造函数是用一个已知的对象初始化一个正在创建
40、的同类对象。拷贝构造函数的一般格式如下:(类名): (类名)( const(类名) &引用对象名):其中 const可以省略。 36 【正确答案】 B 【试题解析】 指针是一种用来存放其他变量地址的数据类型,它的声明形式为:(类型) *(变量名),可以在声明的时候对其进行初始化。由于其存放的是内存单元的地址,所以大小一般都是 4个字节。 37 【正确答案】 B 【试题解析】 C+中的四个预定义流对象: cout, cin, cerr, clog。 38 【正确答案】 B 【试题解析】 C+中默认的参数传递是值传递,也就是将实参的副本传递 给被调用函数的形参,被调用的函数中对形参的任何改动都不会
41、影响实参。 39 【正确答案】 B 【试题解析】 在每一个 C+程序中必须有且只有一个主函数,每个程序的执行都是从主函数的开始。 40 【正确答案】 A 【试题解析】 C+程序中的执行子类,首先执行基类的构造函数,然后执行数据成员类的构造函数,最后执行子类本身的构造函数,所以输出结果为 ABC。 二、基本操作题 41 【正确答案】 (1)删除 “private: ”语句 (2)TestClass2(int_i) (3)std: cout m_i std: endl; 【试题解析】 程序要求输出值为 10, TestClassl。从已给定源程序的 main主函数开始入手, main主函数首先调用
42、 fun函数, fun调用 TestClass2中的 print0函数,其中 TestClass2继承了 TestClassl。 (1)第 1个标识下的 “virtual TestClassl()”语句是 TestClassl()析构函数,不是私有函数,所以删除 “private: ”。 (2)“explicit TestClass2(int i)”构造函数语句中 的 “explicit”是禁止隐式转换。程序中无法实现对类 TestClass2的直接使用,所以这里应该将其删除。即“TestClass2(inti), ”。 (3)第 3个标识下实现, fun函数中 mi的标准输出,即在屏幕上输出
43、 10。在程序中用到 C+标准库时,要使用 std标准命名空间进行限定。 cout为标准库函数,所以要声明 cout是在命名空间 std中定义的流对象,即 “std: cout mjstd: endl; ”或者添加 “using namespace std; ”。 三、简单应用题 42 【正确答案 】 (1) void WriteFile(char* s)中的命令语句: ofstream outl: outl.open(”mod12.txt”, ios_base: binarylios_base: app);打开文件mod12 outl s; 写入字符串 s outl.close(), (2)
44、 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) 如果是小写字符,转换为大写字符 si=si=a+A; si一 a等于字符 s1一 32 WriteFile(s); 【试题解析】 (1)奉题要求实现两个函数的功能,其中 WriteFile(char*s)实现把字符串输入到文件中; fun(char*s)函数实现大写字母转换成小写字母,把其中的小写字母转换成大写字母
45、。 其中大小写字母之间的 ASCII码差为 32。 (2)从已给部分源程序的 main主函数开始入手,首先实现 WriteFile函数,然后再实现 fun函数,并在其中调用 WriteFile函数。 (3)在 WriteFile(char*s)函数中,利用标准流 ofstream实现字符串写入文件mod12.txt。 (4)在 fun函数中,利用 for循环逐个判断字符是大写还是小写。 (5)如果是大写,那么加上 32实现大写转换为小写。否则,就减去 32,实现小写到大写的转换。最后调用前面实现的 WriteFile函数,将字符串写入文件。 四、综合应用题 43 【正确答案】 (1)将 “cl
46、ass TestClass2”补充完整为: class TestClass2: public Test Classl (2)将 “void print0”补充完整为: virtual void print() (3)将 “p=obj3; ”修改为: p=&obj3; (4)将 “p.print(); ”修改为: p一 print(). 【试题解析】 本题的功能是通过 prlnt虚函数将字符串输出。在 VC环境下打开程序,根据题干给出的几条功能要求,对程序中给出注释下的内容逐个补全或修改。从已定源程序的 main主函数开始入手,可以看出程序通过调用类和成员函数实现各种输出操作。 (1)题目 1要
47、求 “类 TestClass2公共继承 f TestClass1”。从已有的类产生一个新的子类,成为类的派生。 声明派生类的一般形式为: class 派生类名: 继承方式 基类名。 根据题目中的要求以及派生类的一般形式,第 1个标识下添加语句 “class TestClass2: publicTestClass1”。 (2)题目 2要求 “print函数为虚函数 ”。在 C+中,用 virtual声明的函数为虚函数,因此第 2个标识下的语句修改为 “virtual void printO”。 (3)题目 3要求 “使得 p指定对象 obj3”。 p为指针变量, obj3为类的对象,将一个指针变量指向另一个变量,只要把被指向的变量的地址赋给指针变量即可。 取对象 obj3地址的语句为 &obj3,所以这里补全