1、计算机二级 C+上机考试 2+2015 年及答案解析(总分:30.00,做题时间:90 分钟)1.基本操作 请使用“答题“菜单或使用 VC6 打开考生文件夹 proj1 下的工程 proj1。其中在编辑窗口内显示的主程序文件中定义有 Xabc 类和主函数 main。在程序文本中位于每行“/ ERROR *found*“下面的一行有错误,请加以更正。更正后程序的运行结果为:s=20 注意:只允许修改每个“/ ERROR *found*“下面的一行语句,不允许改动程序中的其他任何内容。(分数:10.00)_2.简单应用 请使用“答题“菜单或使用 VC6 打开考生文件夹 proj2 下的工程 pro
2、j2。此工程包含一个程序文件 main.cpp,其中有日期类 Date、人员类 Person 以及排序函数 sortByName 和主函数 main 的定义。请在程序中的横线处填写适当的代码,然后删除横线,以实现上述类定义和函数定义。此程序的正确输出结果应为: 按姓名排序 排序前: 张三 男 出生日期:1978 年 4 月 20 日 王五 女 出生日期:1965 年 8月 3 日 杨六 女 出生日期:1965 年 9 月 5 日 李四 男 出生日期:1973 年 5 月 30 日 排序后: 李四 男 出生日期:1973 年 5 月 30 日 王五 女 出生日期:1965 年 8 月 3 日 杨
3、六 女 出生日期:1965 年 9 月 5日 张三 男 出生日期:1978 年 4 月 20 日 注意:只能在横线处填写适当的代码,不要改动程序中的其他内容, 也不能删除或移动“/*found*“。(分数:10.00)_3.综合应用 请使用“答题“菜单或使用 VC6 打开考生文件夹 proj3 下的工程 proj3,其中包含了类IntegerSet 和主函数 main 的定义。一个 IntegerSet 对象就是一个整数的集合,其中包含 0 个或多个无重复的整数;为了便于集合操作,这些整数按升序存放在成员数组 elem 的前若干单元中。成员函数 add将一个元素添加到集合中(如果集合中不存在该
4、元素),成员函数 remove 从集合中删除指定的元素(如果集合中存在该元素)。请编写成员函数 remove。在 main 函数中给出了一组测试数据,此时程序的正确输出结果应为: 2 3 4 5 27 28 31 66 75 2 3 4 5 6 27 28 31 66 75 2 3 4 5 6 19 27 28 31 66 75 3 4 5 6 19 27 28 31 66 75 3 4 5 6 19 27 28 31 66 75 要求: 补充编制的内容写在/*333*与/*666*两行之间。不得修改程序的其他部分。 注意: 程序最后已经将结果输出到文件 out.dat 中。输出函数 Writ
5、eToFile 已经编译为 obj 文件,并且在本程序中调用。(分数:10.00)_计算机二级 C+上机考试 2+2015 年答案解析(总分:30.00,做题时间:90 分钟)1.基本操作 请使用“答题“菜单或使用 VC6 打开考生文件夹 proj1 下的工程 proj1。其中在编辑窗口内显示的主程序文件中定义有 Xabc 类和主函数 main。在程序文本中位于每行“/ ERROR *found*“下面的一行有错误,请加以更正。更正后程序的运行结果为:s=20 注意:只允许修改每个“/ ERROR *found*“下面的一行语句,不允许改动程序中的其他任何内容。(分数:10.00)_正确答案:
6、(1)n = nn; (2) a = new intn; (3) for(i=0; i解析:(1)主要考查考生对构造函数的掌握,构造函数应该是使用参数 nn 对数据成员 n 赋值。 (2)主要考查考生对动态分配的掌握,在析构函数中,对 a 使用 delete 释放,所以在构造函数中,需要使用 new 动态分配内存。 (3)主要考查考生对类成员访问权限的掌握,首先 for 循环中重复定义了变量 i;另外数组下标从 0 开始,i 应该小于 5;最后对象 x 不能直接访问私有变量 a,应该转化为 x 通过公有成员函数 GetA 来访问 a。2.简单应用 请使用“答题“菜单或使用 VC6 打开考生文件
7、夹 proj2 下的工程 proj2。此工程包含一个程序文件 main.cpp,其中有日期类 Date、人员类 Person 以及排序函数 sortByName 和主函数 main 的定义。请在程序中的横线处填写适当的代码,然后删除横线,以实现上述类定义和函数定义。此程序的正确输出结果应为: 按姓名排序 排序前: 张三 男 出生日期:1978 年 4 月 20 日 王五 女 出生日期:1965 年 8月 3 日 杨六 女 出生日期:1965 年 9 月 5 日 李四 男 出生日期:1973 年 5 月 30 日 排序后: 李四 男 出生日期:1973 年 5 月 30 日 王五 女 出生日期:
8、1965 年 8 月 3 日 杨六 女 出生日期:1965 年 9 月 5日 张三 男 出生日期:1978 年 4 月 20 日 注意:只能在横线处填写适当的代码,不要改动程序中的其他内容, 也不能删除或移动“/*found*“。(分数:10.00)_正确答案:(1) is_male(is_male), birth_date(birth_date) (2) return strcmp(name, p.name); (3) = counter | element != elemj) return; for (k = j; k counter-1; k+)elemk = elemk+1; coun
9、ter-;)解析:【解题思路】 主要考查考生对对象处理的掌握,函数 remove 的功能是将 IntegerSet 类中数组成员 elem 包含的值等于 element 的元素删除。由 add 函数可知,数组 elem 的元素添加进来时是有序的,所以首先从前往后遍历数组,查找第一个不小于 element 的元素,如果元素下标不小于 counter 或者找到的元素不等于 element,说明该数组中没有值等于 element 的元素,返回即可;否则说明元素下标合法且元素值等于 element,设该元素下标为 j,将该元素后面的所有元素依次前移一位,相当于删除了 elemj,最后需要更新 counter 值。