1、计算机二级 C+上机考试 3+2015 年及答案解析(总分:30.00,做题时间:90 分钟)1.基本操作 请使用“答题“菜单或使用 VC6 打开考生文件夹 proj1 下的工程 proj1。程序中位于每个 / ERROR *found* 下的语句行有错误,请加以更正,不得修改程序的其他部分。更正后程序的输出应该是: Congratulations! 100(分数:10.00)_2.简单应用 请使用“答题“菜单或使用 VC6 打开考生文件夹 proj2 下的工程 proj2。本程序中有两个类:一是时间类(Time),用于表示一天中的时间,采用 24 小时制;另一个是街灯类(StreetLigh
2、t),用于表示街上的路灯。StreetLight 类中有 Time 类的数据成员。这里对 StreetLight 类的数据成员和成员函数做一下说明: int id; / 街灯的 id bool is_on; / 街灯的状态,true 表示街灯已经开启,false 表示街灯关闭 Time current_time; / 当前时间 void turn_on(); /打开街灯 void turn_off(); /关闭街灯 bool check(Time time_threshold); /判断是否过了可开灯的时间,并需要 /开灯 /(time_threshold) 请在程序中 /*found* 之下
3、一行的横线处填写适当的代码,并删除横线,使程序完整、正确。 输出结果为: Turn on Light2(分数:10.00)_3.综合应用 请使用“答题“菜单或使用 VC6 打开考生文件夹下的工程 proj3,其中定义了 Septinary 类(七进制类),来表示一个七进制的数及其相关操作。和十进制的数“逢十进一“类似,七进制的数定义为“逢七进一“。 这里对 Septinary 类的数据成员做一下说明: char* data; /存放七进制数的每一位数,data0为最高位。这里假设七进制的位数不超过 99 位。 createSeptinary 函数由构造函数调用,用于将作为参数传入的十进制数转化
4、为七进制数,并将七进制数的每一位存入 data 数组中。请编写createSeptinary 函数使程序可以正确运行。注意:Septinary 类中提供了 numberToChar 成员函数,将一个0,6之间的数转化为对应的 ASCII 码值。 在 main 函数中给出了一组测试数据,此情况下程序的输出应该是: 243 注意:只需在 /*333* 和 /*666* 之间填入所编写的若干语句,不要改动程序中的其他内容。(分数:10.00)_计算机二级 C+上机考试 3+2015 年答案解析(总分:30.00,做题时间:90 分钟)1.基本操作 请使用“答题“菜单或使用 VC6 打开考生文件夹 p
5、roj1 下的工程 proj1。程序中位于每个 / ERROR *found* 下的语句行有错误,请加以更正,不得修改程序的其他部分。更正后程序的输出应该是: Congratulations! 100(分数:10.00)_正确答案:(1) if (this-data = 100) (2) Score *s = new Score(); (3) s-setData(100);)解析:【解题思路】 (1)主要考查考生对赋值运算符与相等运算符的掌握,在 if 判断条件中,赋值运算符始终为真,这里需要比较是否相等,使用相等运算符。 (2)主要考查考生对动态分配的掌握,由下面语句 s 通过箭头访问运算符
6、访问成员函数可以判断,s 属于指针,new 运算符返回的是指针,所以修改为Score *s = new Score(); (3)主要考查考生对类成员访问权限的掌握,不能通过 s 指针直接访问私有变量 data,修改为通过成员函数 setData 来修改 data 值。2.简单应用 请使用“答题“菜单或使用 VC6 打开考生文件夹 proj2 下的工程 proj2。本程序中有两个类:一是时间类(Time),用于表示一天中的时间,采用 24 小时制;另一个是街灯类(StreetLight),用于表示街上的路灯。StreetLight 类中有 Time 类的数据成员。这里对 StreetLight
7、类的数据成员和成员函数做一下说明: int id; / 街灯的 id bool is_on; / 街灯的状态,true 表示街灯已经开启,false 表示街灯关闭 Time current_time; / 当前时间 void turn_on(); /打开街灯 void turn_off(); /关闭街灯 bool check(Time time_threshold); /判断是否过了可开灯的时间,并需要 /开灯 /(time_threshold) 请在程序中 /*found* 之下一行的横线处填写适当的代码,并删除横线,使程序完整、正确。 输出结果为: Turn on Light2(分数:10
8、.00)_正确答案:(1) return true; (2) current_time(hour, minute, second) (3) this-is_on = false; (4) false;)解析:【解题思路】 (1) 主要考查考生对重载操作符的掌握情况,根据需要重载操作符的含义,当前时间大于开灯时间,返回 true。 (2)主要考查考生对构造函数的掌握,StreetLight 类在构造函数的成员初始化列表中完成对成员对象 current_time 的初始化。 (3) 主要考查考生对成员函数的掌握,由该函数的功能可知,该函数功能是将灯关闭,设置 is_on 为 false。 (4)主
9、要考察考生对成员函数的掌握,由该函数的功能可知,当灯在关闭的前提下,若当前时间过了开灯时间,则返回 true,以此条件判断开灯;其他条件下灯都处于关闭状态,返回 false。3.综合应用 请使用“答题“菜单或使用 VC6 打开考生文件夹下的工程 proj3,其中定义了 Septinary 类(七进制类),来表示一个七进制的数及其相关操作。和十进制的数“逢十进一“类似,七进制的数定义为“逢七进一“。 这里对 Septinary 类的数据成员做一下说明: char* data; /存放七进制数的每一位数,data0为最高位。这里假设七进制的位数不超过 99 位。 createSeptinary 函
10、数由构造函数调用,用于将作为参数传入的十进制数转化为七进制数,并将七进制数的每一位存入 data 数组中。请编写createSeptinary 函数使程序可以正确运行。注意:Septinary 类中提供了 numberToChar 成员函数,将一个0,6之间的数转化为对应的 ASCII 码值。 在 main 函数中给出了一组测试数据,此情况下程序的输出应该是: 243 注意:只需在 /*333* 和 /*666* 之间填入所编写的若干语句,不要改动程序中的其他内容。(分数:10.00)_正确答案:(int index = 0; char temp100; while (num) tempind
11、ex+ = numberToChar(num % 7);num /= 7; dataindex = /0; int i = 0; while (index) data-index = tempi+; )解析:【解题思路】 主要考察考生对对象成员数据处理的掌握。函数 createSeptinary 的功能,是将参数十进制整数 num 转化为 7 进制数,并将 7 进制数的每一位存入 data 数组中。由于转换得到的数是逆序的,这里需要临时数组 temp,用来暂时存放逆序的 7 进制数。首先 num 对 7 求余,通过成员函数numberToChar 将余数转换为 char 类型,保存在 temp 中,num 除以 7 后重新赋值为除数,继续执行求余操作,直到 num 为 0,此时 7 进制数已经逆序保存在 temp 中,最后将 temp 翻转保存到 data 中。由于在成员函数 show 中,可以直接将数组 data 当字符串输出,所以需要在 data 末尾添加/0,来标识字符串结束。