1、二级 C+分类模拟 110 及答案解析(总分:100.00,做题时间:90 分钟)一、程序改错题(总题数:1,分数:30.00)1.使用 VC6 打开 下的源程序文件 modi1.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,并使程序输出的结果为: TestClass2 TestClass3 注意:不要改动 main 函数,不能增行或删行,也不能更改程序的结构,错误的语句在/*error*的下面。 #includeiostream class TestClass1 public: virtual void fun()=0; ; class TestClass2: public T
2、estClass1 /*error* int fun() using namespace std; cout “TestClass2“ endl; ; class TestClass3: public TestClass1 /*error* void fun() /*error* cout “TestClass3“ (分数:30.00)_二、程序填空题(总题数:1,分数:30.00)2.使用 VC6 打开 下的源程序文件 modi2.epp。阅读下列函数说明和代码,完成空出部分程序,使函数fun()实现以下功能:找出一个整数,它加上 100 后是一个完全平方数,再加上 268 又是一个完全平方
3、数,请问该数是多少? 程序分析:在 10 万以内判断,先将该数加上 100 后再开方,再将该数加上 268 后开方,如果开方后的结果满足条件,即是结果。 #includeioStream.h #includecmath void fun() int main() fun(); return 0; (分数:30.00)_三、程序设计题(总题数:1,分数:40.00)3.使用 VC6 打开 下的源程序文件 modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能: (1)定义纯虚类 TestClass0,包含纯虚函数 fun(),请在注释/*1*后添加适当的语
4、句。 (2)完成类 TestClass1,以公有继承 TestClass0,请在注释/*2*后添加适当的语句。 (3)定义 TestClass0 对象指针 p,请在注释/*3*后添加适当的语句。 (4)把 TestClass1 的对象 obj 的指针赋给 TestClass0 指针 p,请在注释/*4*后添加适当的语句。 注意:增加代码,或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。 #includeiostream.h class TestClass0 public: /*1* ; /*2* class TestClass1 public: void fun() cout
5、“fun“ (分数:40.00)_二级 C+分类模拟 110 答案解析(总分:100.00,做题时间:90 分钟)一、程序改错题(总题数:1,分数:30.00)1.使用 VC6 打开 下的源程序文件 modi1.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,并使程序输出的结果为: TestClass2 TestClass3 注意:不要改动 main 函数,不能增行或删行,也不能更改程序的结构,错误的语句在/*error*的下面。 #includeiostream class TestClass1 public: virtual void fun()=0; ; class Test
6、Class2: public TestClass1 /*error* int fun() using namespace std; cout “TestClass2“ endl; ; class TestClass3: public TestClass1 /*error* void fun() /*error* cout “TestClass3“ (分数:30.00)_正确答案:()解析:(1)void fun() (2)添加语句:public: (3)std:cout “TestClass3“ std:endl;或者添加 using namespace std; 答案考生文件夹 解析 本题程
7、序中的功能为输出字符串 TestClass2 和 TestClass3。从已定源程序的main 主函数开始入手,可以看出程序通过定义类的对象,利用类中定义的成员函数完成题目中要求的输出。 (1)fun()函数是没有返回值的,而第 1 个标识下的“intfun()”语句中定义的 fun()函数是有 int 型返回值的,所以将其修改为“void fun()”。 (2)第 2 个标识下的 fun()函数,没有被定义为 public 型,所以外部其他成员无法访问,只能是类本身访问,所以添加“public:”。 (3)在程序中用到 C+标准库时,要使用 std 标准命名空间进行限定。第三个标识下 cou
8、t 为标准库函数,所以要声明 cout 是在命名空间 std 中定义的流对象,即为“std:cout “TestClass3“ 二、程序填空题(总题数:1,分数:30.00)2.使用 VC6 打开 下的源程序文件 modi2.epp。阅读下列函数说明和代码,完成空出部分程序,使函数fun()实现以下功能:找出一个整数,它加上 100 后是一个完全平方数,再加上 268 又是一个完全平方数,请问该数是多少? 程序分析:在 10 万以内判断,先将该数加上 100 后再开方,再将该数加上 268 后开方,如果开方后的结果满足条件,即是结果。 #includeioStream.h #includecm
9、ath void fun() int main() fun(); return 0; (分数:30.00)_正确答案:()解析:long int i,x,y,z; for(i=1;i100000;i+) x=sqrt(i+100);/x 为加上 100 后开方后的结果 y=sqrt(i+268);/y 为再加上 268 后开方的结果 if(x*x=i+100 /*2* class TestClass1 public: void fun() cout “fun“ (分数:40.00)_正确答案:()解析:(1)添加语句:virtual void fun()=0; (2)将“class Testc
10、lassl”补充完整为:classTestClassl:public TestClass0 (3)添加语句:Testclass0*p; (4)添加语句:p= 答案考生文件夹 解析 本题中的程序功能是利用派生类中的 fun 成员函数输出字符串“fun”。在 VC 环境下打开程序,根据题干给出的几条功能要求,对程序中给出注释下的内容逐个补全或修改。从已定源程序的 main 主函数开始入手,可以看出程序通过调用类的成员函数实现各种输出操作。 (1)题目 1 要求“定义纯虚类 TestClass0”。在 C+中,虚函数在基类用 virtual 声明类为虚类。纯虚类是在声明虚类时被“初始化”为 0 的函
11、数。所以第 1 个标识下应添加“virtual void fun()=0;”。 (2)题目 2 要求“完成类 TestClass1,以公有继承 TestClass0”。公有继承是在定义一个派生类时将基类的继承方式指定为 public 的,称为公用继承。所以这里补全“classTestClass1:public TestClass0”。 (3)题目 3 要求“定义 TestClass0 对象指针 p”。定义类的对象指针变量,一般的格式为:类名指针变量,所以这里添加“TestClass0*p;”。 (4)题目 4 要求“把 TestClass1 的对象 obj 的指针赋给 TestClass0 指针 p”。将指针指向的对象赋值给另一个指针,其实是将其地址指向另一个指针的地址,所以使用取地址运算符“”。