1、国家二级 C+机试(操作题)模拟试卷 93及答案与解析 一、基本操作题 1 使用 VC6打开考生文件夹下的源程序文件 modil cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,输出的结果为: Constructor,i=O, Destructor 注意:错误的语句在 *4*的下面,修改访语句即可。 #include class CObj int i; public: CObj(); void display(); -CObj(); ; *error* CObj: cobj() cout #include void fun() int main() fun(); return 0;
2、 三、综合应用题 3 使用 VC6打开考生文件夹下的源程序文件 modi3 cpp。程序通过继承关系,实现对姓名的控制。类 TestClass 1实现对名字访问的接口, TestClass2实现对名字的设置和输出。程序输出为: TestClass2Name May 其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。 (1)在类 TestClassl中定义接口函数 GetName,为纯虚函数。请在注释 *1*后添加适当的语句。 (2)函数 GetName20实现获得名字的缓存,但是只获得读允许操作这个缓存,请在注释 *2*后添加适当的语句。 (3)实现 TestClass2的构造函数
3、,请在注释 *3*后添加适当的语句。 (4)完成 TestClass2的构造函数,实现对名字的处理。请在注释 *4*后添加适当的语句。 注意:增加代码 ,或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。 #include class TestClassl public: *1* ; class TestClass2: public TestClassl public: void GetName() coutGetName(); cout: (),因此第 1个标 识下应改为 CObj:CObi(),默认构造函数没有参数。 (2)第 2个标识下 “COb j: display()”
4、,从其后的语句看,这是在类外实现 COb j函数,因此也有作用域运算符使用错误问题, display()函数返回值为 void,因此第2个标识下应改为 void CObj: display()。 (3)第 3个标识下 “CObj: CObj()”,显然这里是在类外实现析构函数,析构函数是一个特殊的函数,它的名字和类名相同,并在前面加 “ ”字符,用来与构造函数加以区别,因此第 3个标识下应改为 CObj:一 CObj()。 二、简单应用题 2 【正确答案】 long int i, x, y, z ; f017。 (i=1 ; i100000; i+) x=sqrt(i+100); x为加上 1
5、00后开方后的结果 y=sqrt(i+268); y为再加上 268后开方的结果 if(x*x=i+100& y*y=i+268) 如果一个数的平方根的平方等于该数,说 明此数是完全平方数 coutiend1; 【试题解析】 (1)该程序功能是找出一个整数,它加上 100后是一个完 全平方数,再加上 268又是一个完全平方数。它的解题思路,根据题干中给出的分析可知解题思路为,先将该数加上 100后再开方,再将该数加上 268后开方,如果开方后的结果满足条件,即是结果。 (2)从已给部分源程序的 main主函数开始入手,核心函数 void fun()实现题目中的功能。 【解题思路】 (1)利用循
6、环找到满足条件的整数。 (2)首先计算 x加上 100和 y加上 268的开方。 (3)一个数的平方根的平方等于该数,说明此数是完全平方数。 三、综合应用题 3 【正确答案】 (1)添加语句: virtual void GetName(): 0; (2)添加语句: const char*GetName2() (3)添加语句: TestClass2(char*str) (4)添加语句: m stri=0 ; 【试题解析】 在 VC环境下打开程序,根据题干给出的几条功能要求,对程序中给出注释下的内容逐个补全或修改。从已定源程序的 main主函数开始入手,可以看出程序通过调用类 TestClass和
7、接口函数 Getname实现各种输出操作。 解题思路 (1)题目 l要求 “在类 TestClassl中定义接口函数 GetName,为纯虚函数 ”。在 C+中,在基类中用 virtual声明成员函数为虚函数。纯虚函数是在声明虚函数时被 “初始化 ”为 0的函数,即 “virtual void GetName0=0; ”。 (2)题目 2要求 “函数 GetName20实现获得名字的缓存,但是只获得读允许操作这个缓存 ”。只能引用数据成员,而不能修改,那么使用常成员函数。一般形式为,const函数类型函数名,即 “const char*GetName20”。 (3)题目 3要求 “实现 TestClass2的构造函数 ”。 TestClass2的构造函数与类TestClass2名应该相同,而且第三个标识下的大括弧中是对字符数组 str的操作,所以类 TestClass2的构造函数中的参数为 str,即这里补全为“TestClass2(char*str)”。 (4)题目 4要求 “完成 TestClass2的构造函数,实现对名字的处理 ”,补全类TestClass2的构造函数,构造函数中的名字变量 s仃对应于类 TestClass中的成员变量 m str,所以这里补全变量赋值操作 “m stri=0; 990