1、计算机二级 C+上机考试 1+2015 年及答案解析(总分:30.00,做题时间:90 分钟)1.基本操作 请使用“答题“菜单或使用 VC6 打开考生文件夹 proj1 下的工程 proj1。此工程包含程序文件main.cpp。 程序中位于每个/ ERROR *found*下的语句行有错误,请加以改正。更正后程序的输出应该是:1.41421 注意:只能修改每个/ ERROR *found*下的那一行,不要改动程序中的其他内容。(分数:10.00)_2.简单应用 请使用“答题“菜单或使用 VC6 打开考生文件夹 proj2 下的工程 proj2。此工程包含一个程序文件 main.cpp,其中有表
2、示具有开、关两种状态的设备的类 Switchable、表示“灯“的类 Lamp 和表示“按钮“的类 Button 等三个类的定义,还有主函数 main 的定义。在主函数中定义了一个“灯“对象和一个用于控制“灯“的“按钮“对象。程序展示,每当按一次按钮,灯和按钮的状态同时被改变。请在程序中/*found*下的横线处填写适当的代码,然后删除横线,以实现上述类定义。此程序的正确输出结果应为: 灯的状态:关 按钮的状态:关 灯的状态:开 按钮的状态:开 注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不能删除或移动“/*found*“。(分数:10.00)_3.综合应用 请使用 VC6
3、或使用【答题】菜单打开考生文件夹 proj3 下的工程 proj3,工程中的 IntQueue是以链表方式实现的整数队列,队列中的每个元素是一个整数,保存在一个结点中,并通过结点的链接形成一个链,head 和 tail 分别是指向该链的队首结点和队尾结点的指针。既然是队列,入队元素总是添加在队列尾部,出队元素总是队列的首元素。请补充完成成员函数 show。此程序的正确输出结果应为: 刚建立时: 添加 8,3 后:8 3 添加 5 后:8 3 5 删除首元素 8 后:3 5 添加-7 后:3 5 -7 删除首元素 3后:5 -7 注意:只需在函数 purchase 的“/*333*“和“/*66
4、6*“之间填入若干语句,不要改动程序中的其他内容。 /IntQueue.h #include using namespace std; class Node /“结点“类 public: int data; /元素值:一个整数 Node* next; /指向下一个结点的指针 Node(int intdata):data(intdata),next(NULL) ; class IntQueue /“整数队列“类 Node *head; /队首指针 Node *tail; /队尾指针 public: IntQueue():head(NULL),tail(NULL) bool isEmpty()co
5、nst return head=NULL; /空队列时返回 true,否则返回 false void enqueue(int intdata); /入队:将元素添加到队列的尾部 bool dequeue(int /出队:删除队首元素,该元素的值通过参数带回 /若出队成功,返回 true,否则返回 false void show(ostream /输出队列内容 ;void writeToFile(const char *path); /IntQueue.cpp #include “IntQueue.h“ /入队:将元素添加到队列的尾部 void IntQueue:enqueue(int intd
6、ata) if(isEmpty() head=tail=new Node(intdata); else tail=tail-next=new Node(intdata); /出队:删除队首结点,若成功,返回 true,否则返回false bool IntQueue:dequeue(int intdata=head-data; Node *p=head; head=head-next; delete p; return true; /输出队列内容 void IntQueue:show(ostream)解析:【解题思路】 (1) 主要考查考生对 bool 变量赋值的掌握情况,根据题目要求:置为“关
7、“状态,可知应该给 is_on 赋值 false。 (2)主要考查考生对纯虚函数定义的掌握,纯虚函数末尾要加 =0。 (3)主要考查考生对构造函数的掌握,使用成员列表初始化。 (4)主要考查考生对指针的掌握情况,由于 device 为指针类型,因此调用成员函数时要使用标识符-。3.综合应用 请使用 VC6 或使用【答题】菜单打开考生文件夹 proj3 下的工程 proj3,工程中的 IntQueue是以链表方式实现的整数队列,队列中的每个元素是一个整数,保存在一个结点中,并通过结点的链接形成一个链,head 和 tail 分别是指向该链的队首结点和队尾结点的指针。既然是队列,入队元素总是添加在
8、队列尾部,出队元素总是队列的首元素。请补充完成成员函数 show。此程序的正确输出结果应为: 刚建立时: 添加 8,3 后:8 3 添加 5 后:8 3 5 删除首元素 8 后:3 5 添加-7 后:3 5 -7 删除首元素 3后:5 -7 注意:只需在函数 purchase 的“/*333*“和“/*666*“之间填入若干语句,不要改动程序中的其他内容。 /IntQueue.h #include using namespace std; class Node /“结点“类 public: int data; /元素值:一个整数 Node* next; /指向下一个结点的指针 Node(int
9、 intdata):data(intdata),next(NULL) ; class IntQueue /“整数队列“类 Node *head; /队首指针 Node *tail; /队尾指针 public: IntQueue():head(NULL),tail(NULL) bool isEmpty()const return head=NULL; /空队列时返回 true,否则返回 false void enqueue(int intdata); /入队:将元素添加到队列的尾部 bool dequeue(int /出队:删除队首元素,该元素的值通过参数带回 /若出队成功,返回 true,否则
10、返回 false void show(ostream /输出队列内容 ;void writeToFile(const char *path); /IntQueue.cpp #include “IntQueue.h“ /入队:将元素添加到队列的尾部 void IntQueue:enqueue(int intdata) if(isEmpty() head=tail=new Node(intdata); else tail=tail-next=new Node(intdata); /出队:删除队首结点,若成功,返回 true,否则返回false bool IntQueue:dequeue(int intdata=head-data; Node *p=head; head=head-next; delete p; return true; /输出队列内容 void IntQueue:show(ostream )解析:【解题思路】 题目中要求打印出队列中数据,那么需要依次遍历队列中的结点,需要一个临时指针移动位置,使用 while 循环可以实现依次遍历,遍历完一个元素后将指针指向下个元素,继续打印。