欢迎来到麦多课文档分享! | 帮助中心 海量文档,免费浏览,给你所需,享你所想!
麦多课文档分享
全部分类
  • 标准规范>
  • 教学课件>
  • 考试资料>
  • 办公文档>
  • 学术论文>
  • 行业资料>
  • 易语言源码>
  • ImageVerifierCode 换一换
    首页 麦多课文档分享 > 资源分类 > DOC文档下载
    分享到微信 分享到微博 分享到QQ空间

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

    • 资源ID:1324204       资源大小:56KB        全文页数:13页
    • 资源格式: DOC        下载积分:5000积分
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    二维码
    微信扫一扫登录
    下载资源需要5000积分(如需开发票,请勿充值!)
    邮箱/手机:
    温馨提示:
    如需开发票,请勿充值!快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如需开发票,请勿充值!如填写123,账号就是123,密码也是123。
    支付方式: 支付宝扫码支付    微信扫码支付   
    验证码:   换一换

    加入VIP,交流精品资源
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

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

    2、了。 注意:只修改每个“/ERROR *found*”下的那一行,不要改动程序中的其他内容。 #include iostream using namespace std; class Door int 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,否则返回 false

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

    4、“门是锁着的,打不开。“; else closed = false; cout “门打开了“; void close() /关门 cout endl “关上“ num “号门.“; if(closed) cout “门是关着的,无须再关门。“; else closed = true; cout “门关上了。“; / ERROR *found* void lock() const /锁门 cout endl “锁上“ num “号门.“; if(locked) cout “门是锁着的,无须再锁门。“; else if(! closed) cout “先关门.“; closed = true; l

    5、ocked = true; cout “门锁上了。“; void unlock() /开锁 cout endl “开“ num “号门的锁.“; if(! locked) cout “门没有上锁,无须再开锁。“; else locked = false; cout “锁开了。“; ; int main() Door door(503); door.open(); door.unlock(); door.open() door.open(); door.lock(); return 0; (分数:30.00)_二、简单应用题(总题数:1,分数:30.00)2.请使用 VC6 或使用【答题】菜单打

    6、开 proj2 下的工程 proj2,该工程中包含一个程序文件 main.cpp,其中有日期类 Date、人员类 Person 及排序函数 sortByName 和主函数 main 的定义。请在程序中的横线处填写适当的代码并删除横线,以实现上述类定义和函数定义。此程序的正确输出结果应为: 按姓名排序 排序前 张三 男 出生日期:1978 年 4 月 20 日 王五 女 出生日期:1965 年 8 月 3 日 杨六 女 出生日期:1965 年 9 月 5 日 李四 男 出生日期:1973 年 5 月 30 日 排序后: 李四 男 出生日期:1973 年 5 月 30 日 王五 女 出生日期:19

    7、65 年 8 月 3 日 杨六 女 出生日期:1965 年 9 月 5 日 张三 男 出生日期:1978 年 4 月 20 日 注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“/ *found*”。 #include iostream 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 re

    8、turn year; int getMonth() const return month; int getDay() const return day; ; class Person /人员 char name14; /姓名 bool is_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

    9、name; bool isMale() const return is_male; Date getBirthdate() const return birth_date; /利用 strcmp()函数比较姓名,返回一个正数、0 或负数,分别表示大于、等于、小于 int compareName (const Person cout name “ (is_male? “男“:“女“) “ “出生日期:“ birth_date.getYear() “年“ /显示出生年 / *found* _/显示出生月 birth_date.getDay() “日“; /显示出生日 ; void sortByNa

    10、me (Person ps, int size) /将人员数组按姓名排列为升序 for (int i = 0; i size -1; i+) /采用选择排序算法 int m = i; for (int j = i+1; j size; j+) if (pareName (psm) 0) m = j; if(m i) Person p = psm; psm = psi; psi = p; int main() Person staff = Person(“张三“, true, Date (1978, 4, 20), Person(“王五“, false, Date (1965, 8, 3), P

    11、erson(“杨六“, false, Date (1965, 9, 5), Person(“李四“, true, Date (1973, 5, 30) ; const int size = sizeof(staff)/sizeof(staff0); 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

    12、endl; return 0; (分数:30.00)_三、综合应用题(总题数:1,分数:40.00)3.请使用 VC6 或使用【答题】菜单打开 proj3 下的工程 proj3,其中包含了类 IntegerSet 和主函数 main的定义。一个 IntegerSet 对象就是一个整数的集合,其中包含 0 个或多个无重复的整数;为了便于进行集合操作,这些整数按升序存放在成员数组 elem 的前若干单元中。成员函数 add 的作用是将一个元素添加到集合中(如果集合中不存在该元素),成员函数 remove 从集合中删除指定的元素(如果集合中存在该元素)。请编写成员函数 remove。在 main 函

    13、数中给出了一组测试数据,此时程序的正确输出结果应为: 2 3 4 5 27 28 31 66 75 2 3 4 5 6 27 28 3l 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 中。输出函数 writeToFile 已经编译为 obj 文件,并且在本程序中调用。 /IntegorSet.h #ifndef INTEGERS

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

    15、 remove(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 iomanip IntegerSet: IntegerSet (int data, int size): counter(0) f

    16、or(int i = 0; i size; i+) add (datai); void IntegerSet:add (int element) int j; /从后往前寻找第一个小于等于 element 的元素 for(j = counter; j 0; j-) if (element = elemj - 1) break; /如果找到的是等于 element 的元素,说明要添加的元素已经存在,直接返回 if(j 0) if (element = elemj - 1) return; /如果找到的是小于 element 的元素,j 就是要添加的位置 /该元素及其后面的元素依次后移,腾出插入位

    17、置 for (int k = counter; k j; k-) elem k = elemk - 1; elemj = element; /将 element 插入到该位置 counter +; /计数器加 1 void IntegerSet:remove (int element) / *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,2

    18、7,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)_二级 C+分类模拟 127 答案解析(总分:100.00,做题时间:90 分钟)一、基本操作题(总题数:1,分数:30.00)1.请使用 VC6 或使用【答题】菜单打开 proj1 下的工程 proj1,该工程中包含程序文件 main.cpp,其中有类 Door(“门”)和

    19、主函数 main 的定义。程序中位于每个“/ ERROR *found*”之后的一行语句有错误,请加以改正。改正后程序的输出结果应为: 打开 503 号门.门是锁着的,打不开。 打开 503 号门的锁.锁开了。 打开 503 号门.门打开了。 打开 503 号门.门是开着的,无须再开门。 锁上 503 号门.先关门.门锁上了。 注意:只修改每个“/ERROR *found*”下的那一行,不要改动程序中的其他内容。 #include iostream using namespace std; class Door int num; /门号 bool closed; /true 表示门关着 boo

    20、l locked; /true 表示门锁着 public: Door(int num) / ERROR *found* num = this - num; closed = locked = true; bool isClosed() const return closed; /门关着时返回 true,否则返回 false bool isOpened() const return! closed; /门开着时返回 true,否则返回 false bool isLocked() const return locked; /门锁着时返回 true,否则返回 false bool isUnlocke

    21、d() const return! locked; /门未锁时返回 true,否则返回 false void open() /开门 cout endl “打开“ num “号门.“; / ERROR *found* if (closed) cout “门是开着的,无须再开门。“; else if(locked) cout “门是锁着的,打不开。“; else closed = false; cout “门打开了“; void close() /关门 cout endl “关上“ num “号门.“; if(closed) cout “门是关着的,无须再关门。“; else closed = t

    22、rue; cout “门关上了。“; / ERROR *found* void lock() const /锁门 cout endl “锁上“ num “号门.“; if(locked) cout “门是锁着的,无须再锁门。“; else if(! closed) cout “先关门.“; closed = true; locked = true; cout “门锁上了。“; void unlock() /开锁 cout endl “开“ num “号门的锁.“; if(! locked) cout “门没有上锁,无须再开锁。“; else locked = false; cout “锁开了。

    23、“; ; int main() Door door(503); door.open(); door.unlock(); door.open() door.open(); door.lock(); return 0; (分数:30.00)_正确答案:()解析:(1)this-num=num; (2)if(!closed) (3)void lock() 答案考生文件夹 考点 本题考查 Door 类,其中涉及 bool 型私有成员及成员函数、构造函数和其他成员函数。在构造函数中 this 指针指向的是当前类,因此当参数名与要赋值的成员名称一样时,使用 this 指针来区别。 解析 (1)主要考查考生

    24、对 this 指针的掌握,在构造函数中 this 指针指向的是当前类,因此要给 num 赋值使用语句 this-num=num;完成。 (2)主要考查考生对 if 语句的掌握,先看类的私有成员中关于 closed 的定义:bool closed;/true 表示门关着。再看下一条语句:cout“门是开着的,无须再开门。“;。即满足条件时就会输出:门是开着的,无须再开门。因此 if 括号内应该是!closed。 (3)主要考查考生对 const 函数的掌握,lock 函数体中存在语句 locked=true,即有参数发生改变,因此不能用 const。二、简单应用题(总题数:1,分数:30.00)

    25、2.请使用 VC6 或使用【答题】菜单打开 proj2 下的工程 proj2,该工程中包含一个程序文件 main.cpp,其中有日期类 Date、人员类 Person 及排序函数 sortByName 和主函数 main 的定义。请在程序中的横线处填写适当的代码并删除横线,以实现上述类定义和函数定义。此程序的正确输出结果应为: 按姓名排序 排序前 张三 男 出生日期:1978 年 4 月 20 日 王五 女 出生日期:1965 年 8 月 3 日 杨六 女 出生日期:1965 年 9 月 5 日 李四 男 出生日期:1973 年 5 月 30 日 排序后: 李四 男 出生日期:1973 年 5

    26、 月 30 日 王五 女 出生日期:1965 年 8 月 3 日 杨六 女 出生日期:1965 年 9 月 5 日 张三 男 出生日期:1978 年 4 月 20 日 注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“/ *found*”。 #include iostream using namespace std; class Date /日期类 int year, month, day; /年、月、日 public: Date(int year, int month, int day): year(year), month(month), day(day) in

    27、t getYear() const return year; int getMonth() const return month; int getDay() const return day; ; class Person /人员 char name14; /姓名 bool is_male; /性别,true 时表示男性 Date birth_date; /出生日期 public: Person(char * name, bool is_male, Date birth_date) / *found* :_ strcpy(this - name, name); const char * get

    28、Name() const return name; bool isMale() const return is_male; Date getBirthdate() const return birth_date; /利用 strcmp()函数比较姓名,返回一个正数、0 或负数,分别表示大于、等于、小于 int compareName (const Person cout name “ (is_male? “男“:“女“) “ “出生日期:“ birth_date.getYear() “年“ /显示出生年 / *found* _/显示出生月 birth_date.getDay() “日“; /显

    29、示出生日 ; void sortByName (Person ps, int size) /将人员数组按姓名排列为升序 for (int i = 0; i size -1; i+) /采用选择排序算法 int m = i; for (int j = i+1; j size; j+) if (pareName (psm) 0) m = j; if(m i) Person p = psm; psm = psi; psi = p; int main() Person staff = Person(“张三“, true, Date (1978, 4, 20), Person(“王五“, false,

    30、Date (1965, 8, 3), Person(“杨六“, false, Date (1965, 9, 5), Person(“李四“, true, Date (1973, 5, 30) ; const int size = sizeof(staff)/sizeof(staff0); 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+)

    31、staffi.show(); cout endl; return 0; (分数:30.00)_正确答案:()解析:(1)is_male(is_male),birth_date(birth_date) (2)return strcmp(name,p.getName(); (3)birth_date.getMonth()“月“ 答案考生文件夹 考点 本题考查 Date 类和 Person 类,其中涉及构造函数、const 函数、bool 型私有成员及成员函数,以及 strcmp()函数。 解析 (1)主要考查考生对构造函数的掌握,由函数体内 strcpy(this-name,name);可知,要使

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

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

    34、元素(如果集合中存在该元素)。请编写成员函数 remove。在 main 函数中给出了一组测试数据,此时程序的正确输出结果应为: 2 3 4 5 27 28 31 66 75 2 3 4 5 6 27 28 3l 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 中。输出函数 writeToFile 已经编译为 obj 文件,并且在

    35、本程序中调用。 /IntegorSet.h #ifndef INTEGERSET #define INTEGERSET #include iostream using namespace std; const int MAXELEMENTS = 100; /集合做多可拥有的元素个数 class IntegerSet int elemMAXELEMENTS; /用于存放集合元素的数组 int counter; public: IntegerSet(): counter(0) /创建一个空集合 IntegerSet (int data, int size); /利用数组提的数据创建一个整数集合 v

    36、oid add(int element); /添加一个元素到集合中 void remove(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 iomanip IntegerSet: Integer

    37、Set (int data, int size): counter(0) for(int i = 0; i size; i+) add (datai); void IntegerSet:add (int element) int j; /从后往前寻找第一个小于等于 element 的元素 for(j = counter; j 0; j-) if (element = elemj - 1) break; /如果找到的是等于 element 的元素,说明要添加的元素已经存在,直接返回 if(j 0) if (element = elemj - 1) return; /如果找到的是小于 elemen

    38、t 的元素,j 就是要添加的位置 /该元素及其后面的元素依次后移,腾出插入位置 for (int k = counter; k j; k-) elem k = elemk - 1; elemj = element; /将 element 插入到该位置 counter +; /计数器加 1 void IntegerSet:remove (int element) / *333* / *666* void IntegerSet:show() const for(int i = 0; i getCount (); i+) cout setw(4) getElement(i); cout endl;

    39、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 等于 elemi

    40、 for (int j =i; j counter-1; j +) /从 i 开始遍历集合 elem elemj = elemj+i; /把 elemj+1赋值给 elemj counter-; /elem 长度自减 1 return; /返回 答案考生文件夹 考点 本题考查 IntegerSet 类,其中涉及数组、构造函数、成员函数、const 函数和插入排序。类中的数组 elem 是一个按升序存放的数组,要填写的程序段是完成 remove 函数的功能,即删除指定元素。 解析 主要考查考生对有序数组的掌握,题目要求成员函数 remove 从集合中删除指定的元素(如果集合中存在该元素)。遍历数组 elem 中的元素,找出与形参 element 相等的元素,并将其删除,每删除一个元素,即将该元素之后的每个元素前移一位,如果不存在与形参 element 相等的元素则没有操作。使用下标i 遍历数组,if 语句判断是否与 element 相等。


    注意事项

    本文(【计算机类职业资格】二级C++分类模拟127及答案解析.doc)为本站会员(terrorscript155)主动上传,麦多课文档分享仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知麦多课文档分享(点击联系客服),我们立即给予删除!




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

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

    收起
    展开