二级C++分类模拟127_第1页
二级C++分类模拟127_第2页
二级C++分类模拟127_第3页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、二级C+分类模拟127( 总分: 100.00 ,做题时间: 90 分钟 )一、 基本操作题 ( 总题数: 1,分数: 30.00)1. 请使用VC6或使用【答题】菜单打开 projl下的工程projl,该工程中包含程序文件main.cpp,其中有类Door( “门”)和主函数 main的定义。程序中位于每个“ / ERROR *found* ”之后的一行语句有 错误,请加以改正。改正后程序的输出结果应为:打开 503 号门 . 门是锁着的,打不开。打开 503 号门的锁 . 锁开了。打开 503 号门 . 门打开了。打开 503 号门 . 门是开着的,无须再开门。锁上 503 号门 . 先关

2、门 . 门锁上了。注意:只修改每个“ /ERROR *found* ”下的那一行,不要改动程序中的其他内容。#include using namespace std;class Doorint num; / 门号bool closed; /true表示门关着bool locked; /true表示门锁着public:Door(int num)/ ERROR *found*num = this - num;closed = locked = true;bool isClosed() const return closed;/ 门关着时返回 true ,否则返回 falsebool isOpene

3、d() const return! closed;/ 门开着时返回 true ,否则返回 falsebool isLocked() const return locked;/ 门锁着时返回 true ,否则返回 falsebool isUnlocked() const return! locked;/ 门未锁时返回 true ,否则返回 falsevoid open() / 开门cout endl 打开 num 号门 .;/ ERROR *found*if (closed)cout 门是开着的,无须再开门。 ;else if(locked)cout 门是锁着的,打不开。 ;elseclosed

4、 = false;cout 门打开了 ;void close() / 关门cout endl 关上 num num=num(2) if(!closed)(3) void lock() 答案考生文件夹考点本题考查Door类,其中涉及bool型私有成员及成员函数、构造函数和其他成员 函数。在构造函数中this指针指向的是当前类,因此当参数名与要赋值的成员名称一样时,使用this指针来区别。 解析 (1) 主要考查考生对 this 指针的掌握,在构造函数中 this 指针指向的是当前类,因此要给num 赋值使用语句this- num=num完成。(2) 主要考查考生对 if 语句的掌握,先看类的私有

5、成员中关于 closed 的定义: bool closed ; /true 表示 门关着。再看下一条语句:cout 门是开着的,无须再开门。”;。即满足条件时就会输出:门是开着 的,无须再开门。因此 if 括号内应该是 !closed 。(3) 主要考查考生对 const 函数的掌握, lock 函数体中存在语句 locked=true ,即有参数发生改变, 因此不 能用 const 。、 简单应用题 ( 总题数: 1,分数: 30.00)2. 请使用VC6或使用【答题】菜单打开proj2下的工程proj2,该工程中包含一个程序文件main.cpp,其中有日期类Date、人员类Person及排

6、序函数sortByName和主函数main的定义。请在程序中的横线处填 写适当的代码并删除横线,以实现上述类定义和函数定义。此程序的正确输出结果应为:按姓名排序排序前张三男出生日期:1978 年 4 月20 日王五女出生日期:1965 年 8 月3日杨六女出生日期:1965 年 9 月5日李四男出生日期:1973 年 5 月30 日排序后:李四男出生日期:1973 年 5 月30 日王五女出生日期:1965 年 8 月3日杨六女出生日期:1965 年 9 月5日张三男出生日期:1978 年 4 月20 日注意:*found*只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动

7、“ /* ” #include using namespace std;class Date / 日期类int year, month, day; / 年、月、日public:Date(int year, int month, int day): year(year), month(month), day(day) int getYear() const return year;int getMonth() const return month; int getDay() const return day; ;class Person / 人员char name14; / 姓名bool is_

8、male; / 性别, true 时表示男性Date birth_date; / 出生日期public:Person(char * name, bool is_male, Date birth_date)/*found*strcpy(this - name, name);const char * getName() const return name; bool isMale() const return is_male;0 或负数,分别表示大于、等于、小于Date getBirthdate() const return birth_date; / 利用 strcmp() 函数比较姓名,返回一

9、个正数、int compareName (const Person &p) const /*found*void show() cout endl;cout name (is_male?男:女) 出生日期: birth_date.getYear() 年 / 显示出生年/*found*/ 显示出生月 birth_date.getDay() 日 ; / 显示出生日 ;void sortByName (Person ps, int size) / 将人员数组按姓名排列为升序for (int i = 0; i size -1; i+) / 采用选择排序算法int m = i;for (int j =

10、i+1; j size; j+)if (pareName (psm) i) Person p = psm; psm = psi;psi = p;int main() Person staff = Person( 张三, true, Date (1978, 4, 20), Person( 王五, false, Date (1965, 8, 3), Person( 杨六, false, Date (1965, 9, 5), Person( 李四, true, Date (1973, 5, 30) ;const int size = sizeof(staff)/sizeof(staff

11、0); int i;cout endl 按姓名排序 ;cout endl 排序前 :;for (i = 0; i size; i+) staffi.show(); sortByName (staff, size);cout endl endl 排序后 :; for(i = 0; i size; i+)staffi.show();cout endl;return 0;分数: 30.00 )正确答案:()解析:(1)is_male(is_male) , birth_date(birth_date)(2) return strcmp(name, p.getName(); birth_date.get

12、Month() name name);可知,要使用成员列表初始化的成员为is_male和birth_date 。 主要考查考生对strcmp()函数的掌握,先看程序对该函数的功能要求:利用strcmp()函数比较姓名,返回一个正数、0或负数,分别表示大于、等于、小于。因为strcmp()函数的功能是比较字符串大小,因此可以直接被 return 语句调用:return strcmp(name , p.getName();。(3) 主要考查考生对成员函数的掌握,程序的注释为:显示岀生月,由此可以知道这里要输岀岀生月份,直接调用函数getMonth()即可。strcmp()函数、strepy()函数

13、、strlen()函数等是经常会用到的系统函数,要了解各个函数的功能: stralt( 连接)、strcly( 复制)、strump(比较)、strlen( 求长度)。三、综合应用题(总题数:1,分数:40.00)3. 请使用VC6或使用【答题】菜单打开proj3下的工程proj3,其中包含了类IntegerSet和主函数main的定义。一个IntegerSet对象就是一个整数的集合,其中包含0个或多个无重复的整数;为了便于进行集合操作,这些整数按升序存放在成员数组elem的前若干单元中。成员函数add的作用是将一个元素添加到集合中(如果集合中不存在该元素),成员函数remove从集合中删除指

14、定的元素(如果集合中存在该元素) 请编写成员函数remove。在main函数中给岀了一组测试数据,此时程序的正确输岀结果应为:2 3 4 5 27 28 31 66 752 3 4 5 6 27 28 3l 66 752 3 4 5 6 19 27 28 31 66 753 4 5 6 19 27 28 31 66 753 4 5 6 19 27 28 31 66 75要求:补充编制的内容写在/*333*”与/*666*”之间,不得修改程序的其他部分。注意:程序最后将结果输出到文件out.dat中。输出函数 writeToFile 已经编译为obj文件,并且在本程序中调用。/IntegorSe

15、t.h#ifndef INTEGERSET#define INTEGERSET#include using namespace std;const int MAXELEMENTS = 100;/集合做多可拥有的元素个数class lntegerSetint elemMAXELEMENTS;/用于存放集合元素的数组int counter;public:IntegerSet(): counter(0)/创建一个空集合IntegerSet (int data, int size);/利用数组提的数据创建一个整数集合void add(int element);/ 添加一个元素到集合中 void rem

16、ove(int element);/ 删除集合中指定的元算int getCount() const return counter;/ 返回集合中元素的个数int getElement (int i) const return elemi; / 返回集合中指定的元素 void show() const;void WriteToFile(char *);#endif/main.cpp#include IntegerSet.h#include IntegerSet: IntegerSet (int data, int size): counter(0) for(int i = 0; i 0; j-)

17、if (element = elemj - 1)break;/ 如果找到的是等于 element 的元素,说明要添加的元素已经存在,直接返回 if(j 0)if (element = elemj - 1)return;/ 如果找到的是小于 element 的元素, j 就是要添加的位置/ 该元素及其后面的元素依次后移,腾出插入位置for (int k = counter; k j; k-)elem k = elemk - 1;elemj = element;/ 将 element 插入到该位置counter +; / 计数器加 1void IntegerSet:remove (int elem

18、ent) / *333*/ *666*void IntegerSet:show() const for(int i = 0; i getCount (); i+)cout setw(4) getElement(i);cout endl;int main() int d = 5,28,2,4,5,3,2,75,27,66,31;IntegerSet s(d, 11); s.show();s.add(6); s.show();s.add(19); s.show(); s.remove(2); s.show(); s.add(4); s.show(); WriteToFile(” ); return 0;(分数:40.00 ) 正确答案:()解析:for (int i = 0; i counter; i+) /遍历整个集合(数组 elem)if (element = elemi) /如果 element 等于 elemifor (int j =i; j counter-1; j +) / 从 i 开始遍历集合 elemelemj = elemj+i; /把 elemj+1赋值给 elemjcounter-; /elem长度自

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论