【计算机类职业资格】二级C++分类模拟136及答案解析.doc

上传人:figureissue185 文档编号:1324213 上传时间:2019-10-17 格式:DOC 页数:11 大小:48KB
下载 相关 举报
【计算机类职业资格】二级C++分类模拟136及答案解析.doc_第1页
第1页 / 共11页
【计算机类职业资格】二级C++分类模拟136及答案解析.doc_第2页
第2页 / 共11页
【计算机类职业资格】二级C++分类模拟136及答案解析.doc_第3页
第3页 / 共11页
【计算机类职业资格】二级C++分类模拟136及答案解析.doc_第4页
第4页 / 共11页
【计算机类职业资格】二级C++分类模拟136及答案解析.doc_第5页
第5页 / 共11页
点击查看更多>>
资源描述

1、二级 C+分类模拟 136 及答案解析(总分:100.00,做题时间:90 分钟)一、基本操作题(总题数: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 注意:只修改每个“/

2、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:Clock(unsigned

3、 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:“ hours “h:“ minutes “m:“

4、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)_二、简单应用题(总题数:1,分数:30

5、.00)2.请使用 VC6 或使用【答题】菜单打开 proj2 下的工程 proj2,该工程中包含程序文件 main.cpp,其中有类 Mammal(“哺乳动物”)、类 Elephant(“大象”)、类 Mouse(“老鼠”)的定义和主函数 main 的定义。请在横线处填写适当的代码并删除横线,以实现上述定义。此程序的正确输出结果应为: ELEPHANT MOUSE 注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“/ *found*”。 #include iostream using namespace std; enum category EMPTY, ELEP

6、HANT, 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: / *foun

7、d* Elephant(char * str):_ chars * 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 pm; return

8、 0; (分数:30.00)_三、综合应用题(总题数:1,分数:40.00)3.请使用 VC6 或使用【答题】菜单打开 proj3 下的工程 proj3,其中声明了一个单向链表类sList。sList 的成员函数 Prepend 的功能是在链表头部加入一个新的元素。请编写成员函数 Prepend。在main 函数中给出了一组测试数据,此时程序的输出应为: B-A- # A- # A- # exiting inner block exiting outer block 注意:只在函数 Prepend 的“/ *333*”和“/ *666*”之间填入若干语句,不要改动程序中的其他内容。 /SLis

9、t.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 writeToFil

10、e (const 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) /判断是否到达链表尾部 c

11、out temp - data “-“; 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; writ

12、eToFile(“ “); return 0; (分数:40.00)_二级 C+分类模拟 136 答案解析(总分:100.00,做题时间:90 分钟)一、基本操作题(总题数: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 tim

13、es are 0 d:0 h:1 m:0 S 注意:只修改每个“/ 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, h

14、ours, days; ; Clock:Clock(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

15、days “d:“ 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

16、 0; (分数:30.00)_正确答案:()解析:(1)void Clock:print() const (2)set(+total_sec); (3)return*this; 答案考生文件夹 考点 本题考查 Clock 类,其中涉及构造函数、成员函数、const 函数和运算符重载。“时钟”类考查关于时间的基本常识,进位时要注意:60 秒进 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。二、简单应用题(总题数:1,分数:30.00)2.请使用 VC6 或使用【答题】菜单打开 proj2 下的工程 proj2,该工程中包含程

18、序文件 main.cpp,其中有类 Mammal(“哺乳动物”)、类 Elephant(“大象”)、类 Mouse(“老鼠”)的定义和主函数 main 的定义。请在横线处填写适当的代码并删除横线,以实现上述定义。此程序的正确输出结果应为: ELEPHANT MOUSE 注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“/ *found*”。 #include iostream using namespace std; enum category EMPTY, ELEPHANT, MOUSE; char * output = “EMPTY“, “ELEPHANT“,

19、“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: / *found* Elephant(char * str):_ chars * WhoAmI() return

20、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 pm; return 0; (分数:30.00)_正确答案:()解析:(1)charstrlen(str)+1; (2)

21、Mammal(str) (3)return outputMOUSE; (4)Elephant 答案考生文件夹 考点 本题考查的是 Mammal 类及其派生类 Elephant 和 Mouse,其中涉及动态数组、纯虚函数、构造函数和析构函数。动态数组往往伴随着分配和释放空间,使用 new 语句分配空间,使用delete 语句释放空间。 解析 (1)主要考查分配空间,程序要给 name 分配空间,由下一条语句中 strcpy(name,str)可知程序要把字符串 str 复制给 name,因此要分配的空间大小为 strlen(str)+1。 (2)主要考查考生对构造函数的掌握,因为 Elephan

22、t 类是 Mammal 类的派生类,所以其构造函数要使用成员列表先对 Mammal 类初始化。 (3)主要考查考生对枚举类型的掌握,先看程序:enum categoryEMPTY,ELEPHANT,MOUSE。再参考Elephant 类中的 WhoAmI 函数:char*WhoAmI()return outputELEPHANT;。可知这里要填写的返回语句为:return outputMOUSE;。 (4)主要考查考生对派生类的掌握,题目要求输出: ELEPHANT MOUSE 可知,要先调用 Elephant 类的 WhoAmI 函数,因此给指针 pm 分配 Elephant 类空间。三、综

23、合应用题(总题数:1,分数:40.00)3.请使用 VC6 或使用【答题】菜单打开 proj3 下的工程 proj3,其中声明了一个单向链表类sList。sList 的成员函数 Prepend 的功能是在链表头部加入一个新的元素。请编写成员函数 Prepend。在main 函数中给出了一组测试数据,此时程序的输出应为: B-A- # A- # A- # exiting inner block exiting outer block 注意:只在函数 Prepend 的“/ *333*”和“/ *666*”之间填入若干语句,不要改动程序中的其他内容。 /SList.h struct sListIt

24、em 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 char *);

25、/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 “-

26、“; 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

27、rn 0; (分数:40.00)_正确答案:()解析:sListItem * temp = new sListItem; /动态分配空间给结构体 temp 的指针 temp-data = c; /把 c 赋值于结构体 temp 成员 data temp-next = h; /把 h 赋值于结构 temp 体成员 next h = temp; /把 temp 赋值给 h,即 h 指向 temp 指向的空间 答案考生文件夹 考点 本题考查的是 sList 类,其中涉及构造函数、字符指针、析构函数、成员函数和const 函数。 解析 主要考查考生对链表的掌握,成员函数 Prepend 的功能是在链表头部加入一个新元素。形参 c 是一个 char 型变量,因此要定义一个新的结构体指针 temp,并给它分配 sListItem 类型空间,把形参 c 中的值赋给 temp 的数据域,并使 temp 通过指针链接到链表上。 主要考查考生对链表的掌握,单向链表是指针的一大应用,运用指针对单向链表进行操作有很多优点,如插入和删除元素很方便等。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1