1、二级 C+分类模拟 107 及答案解析(总分:100.00,做题时间:90 分钟)一、程序改错题(总题数:1,分数:30.00)1.使用 VC6 打开 下的源程序文件 modi1.cpp,该程序运行时有错,请改正其中的错误,使得程序正常运行,并使程序输出的结果为: init TestClass del TestClass 注意:不要改动 main 函数,不能增行或删行,也不能更改程序的结构,错误的语句在/*error*的下面。 #includeiostream.h class TestClass /*error* /*error* int TestClass()cout “initTestCl
2、ass“ endl; /*error* void TestClass()cout “delTestClass“ (分数:30.00)_二、程序填空题(总题数:1,分数:30.00)2.使用 VC6 打开 下的源程序文件 modi2.cpp。阅读下列函数说明和代码,完成空出部分程序。该程序从键盘读入整数,并按从大到小的顺序输出输入整数中互不相等的那些整数。程序一边读入整数,一边构造一个以大到小顺序链接的链表,直至输入 0 时结束。然后顺序输出链表上各表元的整数值。主函数每读入一个整数,就调用函数 fun(),函数 fun()将还未出现在链表上的整数按从大到小的顺序插入到链表中。为了插入方便,链表
3、在表首有一个辅助表元。 注意:不能修改程序的其他部分,只能修改 fun()函数。 #include iostream class NODE public: int data; NODE *next; ; void fun(NODE *list, int x) void main( ) int x; NODE *head, *p; /*首先建立只有辅助表元的空链表*/ head = new NODE; head-next = NULL; std:cout “Enter integers,end with 0“ std:endl; while (1) std: cin x; if(x=0) bre
4、ak; fun (head, x); for (p =head-next; p !=NULL; p=p-next) std:cout “ “; std: cout (分数:30.00)_三、程序设计题(总题数:1,分数:40.00)3.使用 VC6 打开 下的源程序文件 modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。 其中:定义了类 circle 和 column,column 类由 circle 类 protected 派生,但是两个类的定义并不完整,请按照以下的要求,将程序补充完整。 (1)定义类 circle 的保护数据成员函数 r 和 area,它们
5、都是 double 型的数据,请在注释/*1*后完成。 (2)添加类 circle 的无参数的构造函数,使得类 circle 对象的 r 默认值为 0,请在注释/*2*后完成。 (3)添加派生类 column 的构造函数的定义,使得参数为 double 型的 height 和 radius 并将其分别赋给数据成员 h 和基类的 r 请在注释/*3*之后完成。 (4)完成派生类 column 的成员函数 print()的定义,请在注释/*4*之后完成,使得输出为: radius=5 area=78.54 height=10 vol=785.4 注意:增加代码,或者修改代码的位置已经用符号表示出来
6、。请不要修改其他的程序代码。 #includeiostream.h const double pi = 3.1416; class circle protected: /*1* public: /*2* r=0.0; circle(double radius) r=radius; void print() area = r*r* pi; cout “radius=“ r “ “area=“ area (分数:40.00)_二级 C+分类模拟 107 答案解析(总分:100.00,做题时间:90 分钟)一、程序改错题(总题数:1,分数:30.00)1.使用 VC6 打开 下的源程序文件 modi
7、1.cpp,该程序运行时有错,请改正其中的错误,使得程序正常运行,并使程序输出的结果为: init TestClass del TestClass 注意:不要改动 main 函数,不能增行或删行,也不能更改程序的结构,错误的语句在/*error*的下面。 #includeiostream.h class TestClass /*error* /*error* int TestClass()cout “initTestClass“ endl; /*error* void TestClass()cout “delTestClass“ (分数:30.00)_正确答案:()解析:(1)添加语句:pub
8、lic: (2)TestClass()cout “init TestClass“ endl; (3)TestClass()cout “del TestClass“ endl;); 答案考生文件夹 解析 本题的功能是分别利用构造函数和析构函数中的输出语句,输出“init TestClass”和“del TestClass”字符串。从已定源程序的 main 主函数开始入手,可以看出程序首先通过类 TestClass 中的 TestClass 构造函数实现各种输出。 (1)打开 modi1.cpp,调试程序,显示错误提示为第一标识下“modi1.cpp(13):error C2248:“TestCl
9、ass:TestClass“:cannot access private member declared in class“TestClass“”,构造函数由于是私有的,无法获得,所以应该定义为 public 型,即第 1 个标识下添加“public:”。 (2)构造函数首部的一般形式为:构造函数名(形参列表),构造函数没有返回值,所以定义构造函数时不需要声明类型,所以“int TestClass()cout “init TestClass“ endl;”语句修改为“TestClass()cout “init TestClass“ endl;“。 (3)析构函数的名字是类名的前面加一个“”符号
10、,所以“voidTestClass()cout “del TestClass“ endl;”修改为“TestClass()cout “del TestClass“ 二、程序填空题(总题数:1,分数:30.00)2.使用 VC6 打开 下的源程序文件 modi2.cpp。阅读下列函数说明和代码,完成空出部分程序。该程序从键盘读入整数,并按从大到小的顺序输出输入整数中互不相等的那些整数。程序一边读入整数,一边构造一个以大到小顺序链接的链表,直至输入 0 时结束。然后顺序输出链表上各表元的整数值。主函数每读入一个整数,就调用函数 fun(),函数 fun()将还未出现在链表上的整数按从大到小的顺序插
11、入到链表中。为了插入方便,链表在表首有一个辅助表元。 注意:不能修改程序的其他部分,只能修改 fun()函数。 #include iostream class NODE public: int data; NODE *next; ; void fun(NODE *list, int x) void main( ) int x; NODE *head, *p; /*首先建立只有辅助表元的空链表*/ head = new NODE; head-next = NULL; std:cout “Enter integers,end with 0“ std:endl; while (1) std: cin
12、 x; if(x=0) break; fun (head, x); for (p =head-next; p !=NULL; p=p-next) std:cout “ “; std: cout (分数:30.00)_正确答案:()解析:NODE*u,*v,*p; u=list; v=u-next; while(v!=NULL v=v-next; if(v=NULL| xv-data)/判断是否为新的元素 p=new NODE; p-data=x; /生成新的元素 p-next=v; u-next=p; /插入新的元素 答案考生文件夹 解析 (1)该程序功能是构造一个以大到小顺序链接的链表。它的
13、解题思路,首先寻找插入的位置,然后判断是否为新元素,最后插入。 (2)从已给部分源程序的 main 主函数开始入手,核心函数 void fun(NODE*list,int x)中的 list 参数为单链表,X 为要插入的数据。 (1)首先利用 while 循环寻找插入元素的位置。 (2)然后判断要插入的元素是否为新元素。 (3)如果为新元素,那么执行单链表的操作,插入元素。三、程序设计题(总题数:1,分数:40.00)3.使用 VC6 打开 下的源程序文件 modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。 其中:定义了类 circle 和 column,col
14、umn 类由 circle 类 protected 派生,但是两个类的定义并不完整,请按照以下的要求,将程序补充完整。 (1)定义类 circle 的保护数据成员函数 r 和 area,它们都是 double 型的数据,请在注释/*1*后完成。 (2)添加类 circle 的无参数的构造函数,使得类 circle 对象的 r 默认值为 0,请在注释/*2*后完成。 (3)添加派生类 column 的构造函数的定义,使得参数为 double 型的 height 和 radius 并将其分别赋给数据成员 h 和基类的 r 请在注释/*3*之后完成。 (4)完成派生类 column 的成员函数 pr
15、int()的定义,请在注释/*4*之后完成,使得输出为: radius=5 area=78.54 height=10 vol=785.4 注意:增加代码,或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。 #includeiostream.h const double pi = 3.1416; class circle protected: /*1* public: /*2* r=0.0; circle(double radius) r=radius; void print() area = r*r* pi; cout “radius=“ r “ “area=“ area (分数
16、:40.00)_正确答案:()解析:(1)添加语句:double r,area; (2)添加语句:circle() (3)添加语句:column(double radius,doubleheight) (4)添加语句:cout “height=“ h “ “vol=“ area*h endl; 答案考生文件夹 解析 本题的功能是计算圆的面积和周长。在 VC 环境下打开程序,根据题干给出的几条功能要求,对程序中给出注释下的内容逐个补全或修改。从已定源程序的 main 主函数开始入手,可以看出程序通过调用类和成员函数实现各种输出操作。 (1)题目 1 要求“定义类 circle 的保护数据成员函数
17、 r 和 area,它们都是 double 型的数据”。保护成员与 private 和 public 一样是用来声明成员的访问权限的。在已有程序 circle 类中的 protected:域,添加变量 r 和 area 的定义,即“double r,area;”。 (2)题目 2 要求“添加类 circle 的无参数的构造函数,使得类 circle 对象的 r 默认值为 0”。在 C+中,构造函数是一种特殊的成员函数,它的名字与类同名,没有参数的构造函数一般形式为:构造函数名(),所以这里添加“circle()”。 (3)题目 3 要求“添加派生类 column 的构造函数的定义”。同(2),另外带参数的构造函数的一般格式为:构造函数名(类型 1 形参 1,类型 2 形参 2,),所以这里添加“column(double radius,double height)”。 (4)题目 4 要求“完成派生类 column 的成员函数 print()的定义”。根据题干中输出结果,知道第一个输出值为 height,第二个输出值为 vol,即 area*h,所以这里添加“cout “height=“ h “ “vol=“ area*h