1、二级 C+-50及答案解析(总分:100.00,做题时间:90 分钟)一、B基本操作题/B(总题数:1,分数:30.00)1.请使用 VC6或使用答题菜单打开考生文件夹 proj1下的工程 proj1,该工程中包含程序文件main.cpp,其中有类 Clock(“时钟”)的定义和主函数 main的定义。程序中位于每个“/ERROR*found*”之后的一行语句有错误,请加以改正。改正后程序的输出结果应为: Initial times are 0 d:0 h:0 m:59 s After one second times are 0 d:0 h:1 m:0 s 注意:只修改每个“/ERROR*f
2、ound*”下的那一行,不要改动程序中的其他内容。 #include iostream using namespace std; class Clock public: Clock (unsigned long i = 0); void set (unsigned long i = 0); void print () const; void tick(); /时间前进一秒 Clock operator + (); private: unsigned long total_sec, seconds,minutes, hours, days ; ; Clock:Clock (unsigned lo
3、ng i) : total_sec(i), seconds(i % 60), minutes(i / 60) % 60), hours(i / 3600) % 24), days(i / 86400) void Clock: :set (unsigned long i) total sec = i; seconds = i % 60; minutes = (i / 60) % 60; hours = (i /3600)% 60; days = i / 86400; / ERROR *found* void Clock:print () cout days “d:“ hours “h:“ min
4、utes “m:“ seconds“s“ endl; void Clock:tick() / ERROR *found* set (total_sec+); Clock Clock:operator + () tick (); / ERROR *found* return this; int main () Clock ck(59); cout “Initial times are“ endl; ck.print(); +ck; cout “After one second times are“ endl; ck.print(); return 0; (分数:30.00)_二、B简单应用题/B
5、(总题数:1,分数:30.00)2.请使用 VC6或使用答题菜单打开考生文件夹 pmj2下的工程 proj2,该工程中包含程序文件main.cpp,其中有类 Mammal(“哺乳动物”)、类 Elephant(“大象”)、类 Mouse(“老鼠”)的定义和主函数 main的定义。请在横线处填写适当的代码并删除横线,以实现上述定义。此程序的正确输出结果应为: ELEPHANT MOUSE 注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“/*found*”。 #include iostream using namespace std; enum category EM
6、PTY, ELEPHANT, MOUSE; char* output = “EMPTY“, “ELEPHANT“, “MOUSE“; class Mammal public: Mammal(char* str) /*found* name = new_ strcpy(name, str); virtual char* WhoAmI()=0; virtual Mammal() delete name; void Print () cout WhoAmI () endl; private: char* name; ; class Elephant : public Mammal public: /
7、*found* Elephant(char* str): _ char* WhoAmI () return outputELEPHANT; ; class Mouse : public Mammal public: Mouse (char* str) : Mammal(str) /*found* char* WhoAmI () _ ; int main () /*found* Mammal * pm = new _ ( “Huanhuan“ ); pm - Print (); delete pm; pm = new Mouse (“Micky“); pm - Print (); delete
8、pm; return 0; (分数:30.00)_三、B综合应用题/B(总题数:1,分数:40.00)3.请使用 VC6或使用答题菜单打开考生文件夹 proj3下的工程 pmj3,其中声明了一个单向链表类sList。sList 的成员函数 Prepend的功能是在链表头部加入一个新的元素。请编写成员函数 Prepend。在mmn函数中给出了一组测试数据,此时程序的输出应为: B-A- # A- # A- # exiting inner block exiting outer block 注意:只在函数 Prepend的“/*333*”和“/*666*”之间填入若干语句,不要改动程序中的其他内容
9、。 /SList.h struct sListItem char data; sListItem* next; ; class sList public: sList() : h(0) /0表示空链表 sList (); void Prepend (char c); /在链表前端加入元素 void Del (); /删除链表首元素 sListItem* First () const return h; void Print() const; void Release (); /销毁链表 private: sListItem* h; /链表头 ; void writeToFile (const
10、char* ); /main. cpp #include iostream #include “sList.h“ using namespace std; sList: sList () Release (); void sList:Prepend (char c) /*333* /*666* void sList:Del () sListItem* temp = h; h = h - next; delete temp; void sList:Print() const sListItem* temp = h; while (temp != 0) cout temp - data “ - “
11、; temp = temp - next; cout “/n#“ endl; void sList:Release ( while (h != 0) Del (); int main ( ) sList* ptr; sList obj; obj.Prepend (A); obj.Prepend (B); obj.Print (); obj.Del(); obj.Print (); ptr = ptr - Print(); cout “exiting inner block“ endl; cout “exiting outer block“ endl; writeToFile (“); retu
12、rn 0; (分数:40.00)_二级 C+-50答案解析(总分:100.00,做题时间:90 分钟)一、B基本操作题/B(总题数:1,分数:30.00)1.请使用 VC6或使用答题菜单打开考生文件夹 proj1下的工程 proj1,该工程中包含程序文件main.cpp,其中有类 Clock(“时钟”)的定义和主函数 main的定义。程序中位于每个“/ERROR*found*”之后的一行语句有错误,请加以改正。改正后程序的输出结果应为: Initial times are 0 d:0 h:0 m:59 s After one second times are 0 d:0 h:1 m:0 s 注
13、意:只修改每个“/ERROR*found*”下的那一行,不要改动程序中的其他内容。 #include iostream using namespace std; class Clock public: Clock (unsigned long i = 0); void set (unsigned long i = 0); void print () const; void tick(); /时间前进一秒 Clock operator + (); private: unsigned long total_sec, seconds,minutes, hours, days ; ; Clock:Cl
14、ock (unsigned long i) : total_sec(i), seconds(i % 60), minutes(i / 60) % 60), hours(i / 3600) % 24), days(i / 86400) void Clock: :set (unsigned long i) total sec = i; seconds = i % 60; minutes = (i / 60) % 60; hours = (i /3600)% 60; days = i / 86400; / ERROR *found* void Clock:print () cout days “d:
15、“ hours “h:“ minutes “m:“ seconds“s“ endl; void Clock:tick() / ERROR *found* set (total_sec+); Clock Clock:operator + () tick (); / ERROR *found* return this; int main () Clock ck(59); cout “Initial times are“ endl; ck.print(); +ck; cout “After one second times are“ endl; ck.print(); return 0; (分数:3
16、0.00)_正确答案:(1)void Clock:print()const (2)set(+total_sec); (3)return*this;)解析:考点 本题考查 Clock类,其中涉及构造函数、成员函数、const 函数和运算符重载。“时钟”类考查关于时间的基本常识,进位时要注意:印秒进 1分钟,60 分钟进 1小时,24 小时进 1天。 解析 (1)主要考查考生对成员函数的掌握,由 Clock类中对函数 print的声明 void print()const;可知,在定义 print函数时少了 const。 (2)主要考查考生对+操作的掌握,根据函数要求,时间要先前进一秒,再调用函数
17、set,因此 total_sec+应改为+total_sec。 (3)主要考查考生对 this指针的掌握,函数要求返回值 Clock,即返回一个类,而不是指针,因此使用*this。 掌握+操作符,当自增、自减运算的结果要被用来继续参与其他操作时,前置与后置的情况是不同的,例如 i的值为 1,conti+;/首先输出值 1,然后 i自增变为 2;cout+i:/首先 i自增为 2,然后输出值 2。二、B简单应用题/B(总题数:1,分数:30.00)2.请使用 VC6或使用答题菜单打开考生文件夹 pmj2下的工程 proj2,该工程中包含程序文件main.cpp,其中有类 Mammal(“哺乳动物
18、”)、类 Elephant(“大象”)、类 Mouse(“老鼠”)的定义和主函数 main的定义。请在横线处填写适当的代码并删除横线,以实现上述定义。此程序的正确输出结果应为: ELEPHANT MOUSE 注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“/*found*”。 #include iostream using namespace std; enum category EMPTY, ELEPHANT, MOUSE; char* output = “EMPTY“, “ELEPHANT“, “MOUSE“; class Mammal public: Mam
19、mal(char* str) /*found* name = new_ strcpy(name, str); virtual char* WhoAmI()=0; virtual Mammal() delete name; void Print () cout WhoAmI () endl; private: char* name; ; class Elephant : public Mammal public: /*found* Elephant(char* str): _ char* WhoAmI () return outputELEPHANT; ; class Mouse : publi
20、c Mammal public: Mouse (char* str) : Mammal(str) /*found* char* WhoAmI () _ ; int main () /*found* Mammal * pm = new _ ( “Huanhuan“ ); pm - Print (); delete pm; pm = new Mouse (“Micky“); pm - Print (); delete pm; return 0; (分数:30.00)_正确答案:(1)charstrlen(str)+1; (2)Mammal(str) (3)return outputMOUSE; (
21、4)Elephant)解析:考点 本题考查的是 Mammal类及其派生类 Elephant和 Mouse,其中涉及动态数组、纯虚函数、构造函数和析构函数。动态数组往往伴随着分配和释放空间,使用 new语句分配空间,使用 delete语句释放空间。 解析 (1)主要考查分配空间,程序要给 name分配空间,由下一条语句中 strcpyr(name, str)可知程序要把字符串 str复制给 name,因此要分配的空间大小为 strten(str)+1。 (2)主要考查考生对构造函数的掌握,因为 Elephant类是 Mammal类的派生类,所以其构造函数要使用成员列表先对Mammal类初始化。
22、(3)主要考查考生对枚举类型的掌握,先看程序:enumcategoryEMPTY,ELEPHANT,MOUSE。再参考 Elephant类中的 WhoAmI函数:char*WhoAmI()return outputELEPHANT;。可知这里要填写的返回语句为:return outputMOUSE;。 (4)主要考查考生对派生类的掌握,题目要求输出: ELEPHANT MOUSE 可知,要先调用 Elephant类的 WhoAmI函数,因此给指针 pm分配 Elephant类空间。三、B综合应用题/B(总题数:1,分数:40.00)3.请使用 VC6或使用答题菜单打开考生文件夹 proj3下的
23、工程 pmj3,其中声明了一个单向链表类sList。sList 的成员函数 Prepend的功能是在链表头部加入一个新的元素。请编写成员函数 Prepend。在mmn函数中给出了一组测试数据,此时程序的输出应为: B-A- # A- # A- # exiting inner block exiting outer block 注意:只在函数 Prepend的“/*333*”和“/*666*”之间填入若干语句,不要改动程序中的其他内容。 /SList.h struct sListItem char data; sListItem* next; ; class sList public: sLis
24、t() : h(0) /0表示空链表 sList (); void Prepend (char c); /在链表前端加入元素 void Del (); /删除链表首元素 sListItem* First () const return h; void Print() const; void Release (); /销毁链表 private: sListItem* h; /链表头 ; void writeToFile (const char* ); /main. cpp #include iostream #include “sList.h“ using namespace std; sLis
25、t: sList () Release (); void sList:Prepend (char c) /*333* /*666* void sList:Del () sListItem* temp = h; h = h - next; delete temp; void sList:Print() const sListItem* temp = h; while (temp != 0) cout temp - data “ - “; temp = temp - next; cout “/n#“ endl; void sList:Release ( while (h != 0) Del ();
26、 int main ( ) sList* ptr; sList obj; obj.Prepend (A); obj.Prepend (B); obj.Print (); obj.Del(); obj.Print (); ptr = ptr - Print(); cout “exiting inner block“ endl; cout “exiting outer block“ endl; writeToFile (“); return 0; (分数:40.00)_正确答案:(sListItem* temp=new sListItem; /动态分配空间给结构体 temp的指针 temp-dat
27、a=c; /把 c赋值于结构体 temp成员 data temp-next=h; /把 h赋值于结构 temp体成员 next h=temp; /把 temp赋值给 h,即 h指向 temp指向的空间)解析:考点 本题考查的是 sList类,其中涉及构造函数、字符指针、析构函数、成员函数和 const函数。 解析 主要考查考生对链表的掌握,成员函数 Prepend的功能是在链表头部加入一个新元素。形参e是一个 char型变量,因此要定义一个新的结构体指针 temp,并给它分配 sListItem类型空间,把形参c中的值赋给 temp的数据域,并使 temp通过指针链接到链表上。 主要考查考生对链表的掌握,单向链表是指针的一大应用,运用指针对单向链表进行操作有很多优点,如插入和删除元素很方便等。