1、国家二级 C+机试(操作题)模拟试卷 115及答案与解析 一、基本操作题 1 使用 VC6打开考生文件夹下的源程序文件 modil cpp,该程序运行时有错,请改正其中的错误,使得程序正常运行,并使程序输出的结果为: TestClass 1 TestClass2 注意:不要改动 main函数,不能增行或删行,也不能更改程序的结构,错误的语句在 *error*的下面。 #include #include struct TestClas0 *error* virtual void fun(); ; class TestClassl: public TestClass0 void fun() cou
2、tfun(); *error* P=*obj 2; P一 fun(); return; 二、简单应用题 2 使用 VC6打开考生文件夹下的源程 序文件 modi2 cpp。阅读下列函数说明和代码,补充空出的代码。 sum(int n)计算所有 n的因子之和 (不包括 1和自身 )。 注意:不能修改程序的其他部分,只能补充 sum()函数。 #include int sum(int n) ) void main() cout 2 class TestClass0 3 4 *1* 5 6 ; 7 *2* 8 C1ass TestClassl: 9 10 public: 11 void print(
3、) 12 13 cout”TestClassl”endlj 14 15 ; *3* class TestClass2: public: void print() cout“TestClass2”endl; ) )j *4* class TestClass3: public: void print() cout“TestClass3”endl; ; void main() TestClass3 c3; TestClass2 c2 ; c3 print(); c2 print(); return; 国家二级 C+机试(操作题)模拟试卷 115答案与解析 一、基本操作题 1 【正确答案】 (1)vi
4、rtual void fun()=0; (2)p=&obj 1; (3)p=&obj 2; 【试题解析】 本题程序中的功能为输出字符串 TestClassl和 TestClass2。从已定源程序的 main主函数开始入手,通过定义的类,实现题目中要求的输出结果。 解题思路 (1)如果在基类中并不使用这个虚函数,其返回值也是没有意义的,它应该被定义为纯虚函数。所以虚函数 fun()应该是纯虚函数,也就是声明虚函 数的时候初始化为 0的函数。即第 1个标识下的 “virtual void fun()=0; ”。 (2)第 2个标识下的 p为指针变量,将对象 objl赋值给 p,实际上是 p指向对象
5、objl的地址,所以 “p=*0bjl; ”修改为 “p=&obiil; ”。 (3)第 3个标识下的 “p=*ob i2; ”语句同 (2),修改为 “p=&obj2; ”。 二、简单应用题 2 【正确答案】 int a11=0; for(int i=2; in; i+) if(n i=0) all+=i; return all; 【试题解析】 (1)数 n的因子是指为整除 n等于 0的所有自然数的集合。 (2)为了实现计算所有 n的因子之和且不包含 1和自身,函数中定义一个变量 all用来保存求和结果,并为最终结果在函数结束时返回; (3)在循环中逐个寻找 n的因子,为了在计算中排除掉 l
6、和 n本身,因此循环变量 i的变化范围为从 2到 n一 1。 (4)如果 n i=0,说明 i是 n的因子,因此将 i加到 all上。 三、综合应用题 3 【正确答案】 (1)添加语句: virtual void print()=0; (2)将 “class TestClasSl: ”补充完整为: classTestClassl: virtual private TestClasS0 (3)将 “class TestClass2: ”补充完整为: classTestClass2: public TestClass0 (4)将 “class TestClass3: ”补充完整为: classTe
7、stClass3: public TestClass2, public TestClassl 【试题解析】 在 VC环境下打开程序,根据题干给出的几条功能要求,对程序中给出注释下的 内容逐个补全或修改。本题从题干要求入手,依次处理各个类,完成各个类的定义。 解题思路 (1)题目 1要求 “请定义一个纯虚函数 print”。在 C+中,虚函数在基类中用 virtual声明成员函数为虚函数。纯虚函数是在声明虚函数时被 “初始化 ”为 0的函数,即“virtualvoid print0=0; ”。 (2)题目 2要求 “类 TestClassl私有虚继承类 TestClass0”。在 C+中声明一个
8、派生类时将基类的继承方式指定为 private的,称为私有继承。同 (1),声明 TestClassl虚继承类 “: virtualTestClass0”,题目要求为私有,即 “class TestClassl:virtualprivate TestClass0”。 (3)题目 3要求 “类 TestClass2公有继承类 TestClass0。 ”同 (2),公有继承是在定义一个派生类时将基类的继承方式指定为 public的,称为公用继承。所以这里补全“classTestClass2: public TestClass0”。 (4)题目 4要求 “类 TestClass3公有继承类 TestClass2与 TestClassl。 ”同 (3),所以这里补全 “class TestClass3: public TestClass2, public TestClass l”。