1、二级 C+-69及答案解析(总分:100.00,做题时间:90 分钟)一、B基本操作题/B(总题数:1,分数:30.00)1.请使用 VC6或使用答题菜单打开考生文件夹 proj1下的工程 proj1,此工程中包含源程序文件main.cpp,其中有 ElectricFan(“电风扇”)类和主函数 main的定义。程序中位于每个“/ERROR *found*”之后的一行语句有错误,请加以改正。改正后程序的输出结果应该是: 品牌:清风牌,电源:关,风速:0 品牌:清风牌,电源:开,风速:3 品牌:清风牌,电源:关,风速:0 注意:只修改每个“/ERROR *found*”下的那一行,不要改动程序中
2、的其他内容。 #include iostream using namespace std; class ElectricFan /“电扇“类 char * brand; int intensity; /风速: 0-关机 1-弱, 2-中, 3-强 public: ElectricFan (const char * the_brand) : intensity(0) brand = new char strlen (the_brand) +1; strcpy(brand, the_brand); ElectricFan() delete brand; const char * theBrand
3、() const return brand; /返回电扇品牌 int theIntensity () const return intensity; /返回风速 / ERROR * found* bool isOn()const return intensity=0; /返回电源开关状态 / ERROR * found* void turnOff () const intensity =0; /关电扇 void setIntensity (int inten) /开电扇并设置风速 if(inten=1 void show () cout “品牌:“ theBrand () “牌“ “,电源:“
4、 (isOn () ? “开“: “关“) “,风速:“ theIntensity() endl; ; int main() ElectricFan fan(“清风“); fan.show(); fan.setIntensity(3); fan.show(); fan.turnOff(); fan.show(); return 0; (分数:30.00)_二、B简单应用题/B(总题数:1,分数:30.00)2.请使用 VC6或使用答题菜单打开考生文件夹 proj2下的工程 proj2。此工程中包含一个源程序文件main.cpp,其中有“书”类 Book及其派生出的“教材”类 TeachingM
5、aterial的定义,还有主函数 main的定义。请在横线处填写适当的代码并删除横线,以实现上述类定义和函数定义。该程序的正确输出结果应为: 教材名:C+语言程序设计 页数:299 作者:张三 相关课程:面向对象的程序设计 注意:只在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“/*found*”。 #include iostream using namespace std; class Book /“书“类 char * title; /书 int num_pages; /页数 char * writer; /作者姓名 public: /* found* Book(con
6、st char * the title, int pages, const char * the writer): _ title =new char strlen (the_titie) +1; strcpy(title,the_title); /* found* _ strcpy(writer,the_writer); Book() delete title; delete writer; int numOfPages()const return numpages; /返回书的页数 const char * theTitle () const return title; /返回书名 con
7、st char * theWriter () const return writer; /返回作者名 ; class TeachingMaterial: public Book /“教材”类 char * course; public: TeachingMaterial (const char * the_title, int pages, const char * the_writer, const char * the_course) /* found* :_ course = new char strlen (the_course) +i; strcpy (course, the_cou
8、rse); TeachingMaterial () delete course; const char * theCourse () const return course; /返回相关课程的名称 ; int main () TeachingMaterial abook (“C+语言程序设计“, 299, “张三“, “面向对象的程序设计“); cout “教材名:“ a book.theTitle() endl “页数:“ a_book.numOfPages () endl “作者:“ a book.theWriter () endl /* found* “相关课程:“ _; cout en
9、dl; return 0; (分数:30.00)_三、B综合应用题/B(总题数:1,分数:40.00)3.请使用 VC6或使用答题菜单打开考生文件夹 proj3下的工程 proj3,其中声明的 IntSet是一个用于表示正整数集合的类。IntSet 的成员函数 Merge的功能是求当前集合与另一个集合的并集,在 Merge中可以使用成员函数 IsMemberOf判断一个正整数是否在集合中。请完成成员函数 Merge。在 main函数中给出了一组测试数据,此时程序的输出应该是: 求并集前: 1 2 3 5 8 10 2 8 9 11 30 56 67 求并集后:1 2 3 5 8 10 2 8
10、9 11 30 56 67 1 2 3 5 8 10 9 11 30 56 67 要求: 补充编制的内容写在“/*333*”与“/*666*”之间,不得修改程序的其他部分。 注意:程序最后将结果输出到文件 out.dat中。输出函数 writeToFile已经编译为 obj文件,并且在本程序中调用。/Intset.h #include iostream using namespace std; const int Max=100; class IntSet public: IntSet() /构造一个空集合 end = -1; IntSet(int a, int size) /构造一个包含数组
11、a中 size个元素的集合 if (size =Max) end=Max-1; else end =size-1; for(int i=0; i=end; i+) elementi=ai; bool IsMemberOf(int a) /判断 a是否为集合中的元素 for(int i=0; i=end; i+) if (elementi=a) return true; return false; int GetEnd() return end; /返回最后一个元素的下标 int GetElement(int i) return elementi; /返回下标 i处的元素 IntSet Merg
12、e(IntSet /求当前集合与集合 set的并集 void Print() /输出集合中的所有元素 for(int i=0; i=end; i+) if(i+1)% 20=0) cout elementi endl; else cout elementi ; cout endl; private: int elementMax; int end; ; void writeToFile(const char * ); /main.cpp #include “IntSet.h“ IntSet IntSet:Merge(IntSet /* 333* /* 666* return IntSet(a,
13、 size); int main () int a = 1, 2, 3, 5, 8, 10; int b =2, 8, 9, 11, 30, 56, 67; IntSet set1(a, 6), set2(b, 7), set3; cout “求并集前:“ endl; set1.Print(); set2.Print(); set3.Print(); set3 =set1.Merge(set2); cout endl “求并集后: “ endl; set1.Print(); set2.Print(); set3.Print(); writeToFile(“); return 0; (分数:40
14、.00)_二级 C+-69答案解析(总分:100.00,做题时间:90 分钟)一、B基本操作题/B(总题数:1,分数:30.00)1.请使用 VC6或使用答题菜单打开考生文件夹 proj1下的工程 proj1,此工程中包含源程序文件main.cpp,其中有 ElectricFan(“电风扇”)类和主函数 main的定义。程序中位于每个“/ERROR *found*”之后的一行语句有错误,请加以改正。改正后程序的输出结果应该是: 品牌:清风牌,电源:关,风速:0 品牌:清风牌,电源:开,风速:3 品牌:清风牌,电源:关,风速:0 注意:只修改每个“/ERROR *found*”下的那一行,不要改
15、动程序中的其他内容。 #include iostream using namespace std; class ElectricFan /“电扇“类 char * brand; int intensity; /风速: 0-关机 1-弱, 2-中, 3-强 public: ElectricFan (const char * the_brand) : intensity(0) brand = new char strlen (the_brand) +1; strcpy(brand, the_brand); ElectricFan() delete brand; const char * theBr
16、and () const return brand; /返回电扇品牌 int theIntensity () const return intensity; /返回风速 / ERROR * found* bool isOn()const return intensity=0; /返回电源开关状态 / ERROR * found* void turnOff () const intensity =0; /关电扇 void setIntensity (int inten) /开电扇并设置风速 if(inten=1 void show () cout “品牌:“ theBrand () “牌“ “,
17、电源:“ (isOn () ? “开“: “关“) “,风速:“ theIntensity() endl; ; int main() ElectricFan fan(“清风“); fan.show(); fan.setIntensity(3); fan.show(); fan.turnOff(); fan.show(); return 0; (分数:30.00)_正确答案:(1)bool isOn()const return intensity=1; /返回电源开关状态 (2)void turnOff() intensity=0; /关电扇 (3)intensity=inten;)解析:考点
18、本题考查的是 ElectricFan类,其中涉及构造函数、const 函数、bool 函数和成员函数。 解析 (1)主要考查考生对 bool函数的掌握情况,理清函数的逻辑关系。 (2)主要考查考生对成员函数的掌握情况,理清函数的逻辑关系。函数中有 intensity=0;参数值发生改变,因此函数不能为 const。 (3)主要考查考生对成员函数的掌握情况,intensity 是类的私有成员。二、B简单应用题/B(总题数:1,分数:30.00)2.请使用 VC6或使用答题菜单打开考生文件夹 proj2下的工程 proj2。此工程中包含一个源程序文件main.cpp,其中有“书”类 Book及其派
19、生出的“教材”类 TeachingMaterial的定义,还有主函数 main的定义。请在横线处填写适当的代码并删除横线,以实现上述类定义和函数定义。该程序的正确输出结果应为: 教材名:C+语言程序设计 页数:299 作者:张三 相关课程:面向对象的程序设计 注意:只在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“/*found*”。 #include iostream using namespace std; class Book /“书“类 char * title; /书 int num_pages; /页数 char * writer; /作者姓名 public:
20、/* found* Book(const char * the title, int pages, const char * the writer): _ title =new char strlen (the_titie) +1; strcpy(title,the_title); /* found* _ strcpy(writer,the_writer); Book() delete title; delete writer; int numOfPages()const return numpages; /返回书的页数 const char * theTitle () const retur
21、n title; /返回书名 const char * theWriter () const return writer; /返回作者名 ; class TeachingMaterial: public Book /“教材”类 char * course; public: TeachingMaterial (const char * the_title, int pages, const char * the_writer, const char * the_course) /* found* :_ course = new char strlen (the_course) +i; strcp
22、y (course, the_course); TeachingMaterial () delete course; const char * theCourse () const return course; /返回相关课程的名称 ; int main () TeachingMaterial abook (“C+语言程序设计“, 299, “张三“, “面向对象的程序设计“); cout “教材名:“ a book.theTitle() endl “页数:“ a_book.numOfPages () endl “作者:“ a book.theWriter () endl /* found*
23、“相关课程:“ _; cout endl; return 0; (分数:30.00)_正确答案:(1)num_pages(pages) (2)writer=new charstrlen(the_writer)+1; (3)Book(the_title, pages, the_writer) (4)a_book.theCourse()解析:考点 本题考查的是 Book类及其派生类 TeachingMaterial类,其中涉及构造函数、析构函数和const函数。 解析 (1)主要考查考生对构造函数的掌握情况,使用成员列表进行初始化。 (2)主要考查考生对动态分配的掌握情况,使用 new给 writ
24、er分配空间。 (3)主要考查考生对构造函数的掌握情况,使用成员列表初始化给基类初始化。 (4)主要考查考生对成员函数调用的掌握情况,函数 theCourse()返回相关课程。三、B综合应用题/B(总题数:1,分数:40.00)3.请使用 VC6或使用答题菜单打开考生文件夹 proj3下的工程 proj3,其中声明的 IntSet是一个用于表示正整数集合的类。IntSet 的成员函数 Merge的功能是求当前集合与另一个集合的并集,在 Merge中可以使用成员函数 IsMemberOf判断一个正整数是否在集合中。请完成成员函数 Merge。在 main函数中给出了一组测试数据,此时程序的输出应
25、该是: 求并集前: 1 2 3 5 8 10 2 8 9 11 30 56 67 求并集后:1 2 3 5 8 10 2 8 9 11 30 56 67 1 2 3 5 8 10 9 11 30 56 67 要求: 补充编制的内容写在“/*333*”与“/*666*”之间,不得修改程序的其他部分。 注意:程序最后将结果输出到文件 out.dat中。输出函数 writeToFile已经编译为 obj文件,并且在本程序中调用。/Intset.h #include iostream using namespace std; const int Max=100; class IntSet public
26、: IntSet() /构造一个空集合 end = -1; IntSet(int a, int size) /构造一个包含数组a中 size个元素的集合 if (size =Max) end=Max-1; else end =size-1; for(int i=0; i=end; i+) elementi=ai; bool IsMemberOf(int a) /判断 a是否为集合中的元素 for(int i=0; i=end; i+) if (elementi=a) return true; return false; int GetEnd() return end; /返回最后一个元素的下标
27、 int GetElement(int i) return elementi; /返回下标 i处的元素 IntSet Merge(IntSet /求当前集合与集合 set的并集 void Print() /输出集合中的所有元素 for(int i=0; i=end; i+) if(i+1)% 20=0) cout elementi endl; else cout elementi ; cout endl; private: int elementMax; int end; ; void writeToFile(const char * ); /main.cpp #include “IntSet
28、.h“ IntSet IntSet:Merge(IntSet /* 333* /* 666* return IntSet(a, size); int main () int a = 1, 2, 3, 5, 8, 10; int b =2, 8, 9, 11, 30, 56, 67; IntSet set1(a, 6), set2(b, 7), set3; cout “求并集前:“ endl; set1.Print(); set2.Print(); set3.Print(); set3 =set1.Merge(set2); cout endl “求并集后: “ endl; set1.Print(
29、); set2.Print(); set3.Print(); writeToFile(“); return 0; (分数:40.00)_正确答案:(for(int i=0; i=end; i+) /i 从零开始到 end遍历,即实现把数组 element复制到数组ai ai=elementi; /把 elementi赋值给 ai size+; /size自加 1 for(int k=0; k=set.GetEnd(); k+) /k 从 0至 4 set.GetElement遍历 if(!IsMemberOf(Set.GetElement (k) /如果 set.GetElement(k)不是 element中的元素 asize+=set.GetElement(k); /把set.GetElement(k)放到数组 a中)解析:考点 本题考查的是 IntSet类,其中包括构造函数、bool 函数和成员函数。 解析 主要考查考生对数组的掌握情况,题目要求计算集合的并集,定义一个新集合 a,先复制一个数组的元素,再判断另一个数组中的元素,只要元素不重复就添加到集合 a中。