【计算机类职业资格】二级C++机试-131及答案解析.doc

上传人:周芸 文档编号:1324310 上传时间:2019-10-17 格式:DOC 页数:8 大小:43KB
下载 相关 举报
【计算机类职业资格】二级C++机试-131及答案解析.doc_第1页
第1页 / 共8页
【计算机类职业资格】二级C++机试-131及答案解析.doc_第2页
第2页 / 共8页
【计算机类职业资格】二级C++机试-131及答案解析.doc_第3页
第3页 / 共8页
【计算机类职业资格】二级C++机试-131及答案解析.doc_第4页
第4页 / 共8页
【计算机类职业资格】二级C++机试-131及答案解析.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

1、二级 C+机试-131 及答案解析(总分:100.00,做题时间:90 分钟)一、1基本操作题(总题数:1,分数:30.00)1.请使用“答题“菜单或使用 VC6 打开考生文件夹 proj1 下的工程 proj1。此工程包含程序文件main.cpp。程序中位于每个/ERROR*found*下的语句行有错误,请加以更正。更正后程序的输出应该是:1958 年 3 月 23 日比 2001 年 11 月 5 日更早2001 年 11 月 5 日比 1958 年 3 月 23 日更晚2001 年 11 月 5 日与 2001 年 11 月 5 日是同一日期注意:只能修改每个/ERROR*found*下

2、的那一行,不要改动程序中的其他内容。/源程序#include iostreamusing namespace std;class Dateint year;int month;int day;public:/ERROR*found*Date(int yyyy, int mm, int dd): yyyy(year),mm(month),dd(day)bool isLaterThan(Date dt) const /当前日期晚于日期 dt 时返回 trueif(year!=dt.year) return yeardt.year;if(month!=dt.month) return monthdt

3、.month;return daydt.day;bool isEarlyThan(Date dt) const /当前日期早于日期 dt 时返回 trueif(year!=dt.year) return yeardt.year;if(month !=dt.month) return monthdt.month;/ERROR*found*return daydt.day;void showDate() const coutyear“年“month“月“day“日“;;/ERROR*found*void compareDate(Date dt1 Date dt2) constif(dt1.isLa

4、terThan(dt2)dt1.showDate();cout“比“;dt2.showDate();cout“更晚“endl;else if(dt1.isEarlyThan(dt2)dt1.showDate();cout“比“;dt2.showDate();cout“更早“endl;elsedt1.showDate();cout“与“;dt2.showDate();cout“是同一日期“endl;int main()Date dt1(1958,3,23),dt2(2001,11,5);compareDate(dt1,dt2);compareDate(dt2,dt1);compareDate(d

5、t2,dt2);return 0:(分数:30.00)_二、2简单应用题(总题数:1,分数:40.00)2.请使用“答题”菜单或使用 VC6 打开考生文件夹 proj2 下的工程 proj2。此工程包含一个程序文件main.cpp,其中的 Array 是一个表示数组的模板类。Array 的成员 a 用于指向存放数据的数组,size 表示该数组的大小。此程序的输出结果应为:829,20,33,12,18,66,25,1466,33注意:只能在画线处填写适当的代码,不要改动程序中的其他内容,也不能删除或移动/*found*。/源程序#include iostream#include cstdlib

6、using namespace std;templateclass Typeclass Array/数组类Type *a;int size;public:Array(Type b,int mm):size(mm)/构造函数if(size2) cout“数组长度太小,退出运行!/n“;exit(1);/*found*a=_;/a 指向申请的数组空间for(int i=0; isize; i+) ai=bi;/*found*Array()_; /析构函数void MaxTwo(Type x1,Type x2) const;/由 x1 和 x2 带回数组 a 中的两个最大值/*found*int L

7、ength() const_;/返回数组长度Type operator(int i) const /下标运算符重载成员函数if(i0 | i=size)cout“下标越界!“endl;exit(1);return ai;/由 x1 和 x2 带回数组 a 中的两个最大值templateclass Typevoid ArrayType:MaxTwo(Type x1,Type x2) const /补充完整函数体的内容/将数组 a 中头两个数据赋值给 x1 和 x2,使得 x1=x2/*found*_?(x1=a0,x2=a1):(x1=a1,x2=a0);for(int i=2;isize; i

8、+)if(aix1)x2=x1; x1=ai;else if(aix2) x2=ai;void main()int s18=29,20,33,12,18,66,25,14;Arrayint d1(s1,8);int i,a,b;d1.M axTwo(a,b);coutd1.Length()endl;for(i=0;icoutd17endl;couta“,“bendl;(分数:40.00)_三、3综合应用题(总题数:1,分数:30.00)3.请使用“答题”菜单或使用 VC6 打开考生文件夹 proj3 下的工程 proj3,其中包含了类 Polyno-mial(“多项式”)的定义。形如 5x4+

9、3.4x2-7x+2 代数式称为多项式,其中的 5 为 4 次项系数,3.4 为 2 次项系数,-7 为 1 次项系数,2 为 0 次项(常数项)系数。此例缺 3 次项,意味着 3 次项系数为 0,即省略了0x3。在 Polynomial 中,多项式的各个系数存储在一个名为 coef 的数组中。例如对于上面的多项式,保存在 coef0、coef1、coef4中的系数依次为:2.0、-7.0、3.4、0.0、5.0,也即对于 i 次项,其系数就保存在 coefi中。作为成员函数重载的运算符“+”用于计算两个多项式的和,并返回作为计算结果的那个多项式。请补充完成文件 Polynomial.cpp

10、中重载运算符函数 operator+的定义。此程序的正确输出结果应为:p1+p2 的结果:7.3X4+20.6X3-41.2X2-2.4X+5p2+p3 的结果:-2.3X5+14.6X4+12.8X3+2.8X2+0.2X+1注意:只需要在 operator+的/*333*和/*666*之间填入若干语句,不要改动程序中的其他内容。/源程序/主函数#include“Polynomial.h“int main()double p1=5.0,3.5,-41.2,7.8,p2=0.0,-5.9,0.0,12.8,7.3,p3=1.0,6.1,2.8,0.0,7.3,-2.3;Polynomial p

11、oly1(p1, sizeof(p1)/sizeof(double),poly2(p2, sizeof(p2) /sizeof(double),poly3(p3, sizeof(p3) /sizeof(double);cout“p1+p2 的结果:“(polyl+poly2).tostring()endl;cout“p2+p3 的结果:“(poly2+poly3).tostring()endl;/ writeToFile(“K:/b10/61000102/“);return 0:/Polynomial.cpp 函数#include“Polynomial.h“#include strstream

12、#include cmathconst char*Polynomial::tostring() const/将多项式转换成用于输出的字符串static char s1000;s0=0;strstream buf(s,1000);for(int i=num_of_terms-1;i=0;i-)if(coefi=0.0) continue, /0 系数项不输出if(coefi0.0) buf“-“; /负系数先输出“-“else if(strlen(s)=0) buf“ “;else buf“+“:buffabs(coefi);if(i0)buf“X“:if(i1)buf“i;bufends:re

13、turn buf.str();Polynomial Polynomial: operator+(const Polynomial x) constdouble c100=0.0;/存放结果系数的数组,所有元素初始化为零。假定项数不会超过 100/下面的 n 为两个操作数中项数的较大者int n=(num_of_terms=x.num_of_terms? num_of_terms:x.num_of_terms);/将两个多项式的对应系数之和存放到数组 c 的对应单元中/*333*/*333*while(n1cn-1=0.0)n-;/去除无效的(系数为 0 的)最高次项return Polynom

14、ial(c,n);(分数:30.00)_二级 C+机试-131 答案解析(总分:100.00,做题时间:90 分钟)一、1基本操作题(总题数:1,分数:30.00)1.请使用“答题“菜单或使用 VC6 打开考生文件夹 proj1 下的工程 proj1。此工程包含程序文件main.cpp。程序中位于每个/ERROR*found*下的语句行有错误,请加以更正。更正后程序的输出应该是:1958 年 3 月 23 日比 2001 年 11 月 5 日更早2001 年 11 月 5 日比 1958 年 3 月 23 日更晚2001 年 11 月 5 日与 2001 年 11 月 5 日是同一日期注意:只

15、能修改每个/ERROR*found*下的那一行,不要改动程序中的其他内容。/源程序#include iostreamusing namespace std;class Dateint year;int month;int day;public:/ERROR*found*Date(int yyyy, int mm, int dd): yyyy(year),mm(month),dd(day)bool isLaterThan(Date dt) const /当前日期晚于日期 dt 时返回 trueif(year!=dt.year) return yeardt.year;if(month!=dt.mo

16、nth) return monthdt.month;return daydt.day;bool isEarlyThan(Date dt) const /当前日期早于日期 dt 时返回 trueif(year!=dt.year) return yeardt.year;if(month !=dt.month) return monthdt.month;/ERROR*found*return daydt.day;void showDate() const coutyear“年“month“月“day“日“;;/ERROR*found*void compareDate(Date dt1 Date dt

17、2) constif(dt1.isLaterThan(dt2)dt1.showDate();cout“比“;dt2.showDate();cout“更晚“endl;else if(dt1.isEarlyThan(dt2)dt1.showDate();cout“比“;dt2.showDate();cout“更早“endl;elsedt1.showDate();cout“与“;dt2.showDate();cout“是同一日期“endl;int main()Date dt1(1958,3,23),dt2(2001,11,5);compareDate(dt1,dt2);compareDate(dt2

18、,dt1);compareDate(dt2,dt2);return 0:(分数:30.00)_正确答案:(1)Date(int yyyy, int mm, int dd): year(yyyy),month(mm),day(dd)2)return daydt.day;3)void compareDate(Date dtl,Date dt2)解析:1)构造函数为数据成员初始化赋值时,数据成员在前,初始值应该在随后的括号中。2) isEarlyThan(Date dt)是当前日期早于日期 dt 时返回 true,所以应该是“而不是“。3) compareDate 不能定义为 const 函数,因为

19、有参数。二、2简单应用题(总题数:1,分数:40.00)2.请使用“答题”菜单或使用 VC6 打开考生文件夹 proj2 下的工程 proj2。此工程包含一个程序文件main.cpp,其中的 Array 是一个表示数组的模板类。Array 的成员 a 用于指向存放数据的数组,size 表示该数组的大小。此程序的输出结果应为:829,20,33,12,18,66,25,1466,33注意:只能在画线处填写适当的代码,不要改动程序中的其他内容,也不能删除或移动/*found*。/源程序#include iostream#include cstdlibusing namespace std;temp

20、lateclass Typeclass Array/数组类Type *a;int size;public:Array(Type b,int mm):size(mm)/构造函数if(size2) cout“数组长度太小,退出运行!/n“;exit(1);/*found*a=_;/a 指向申请的数组空间for(int i=0; isize; i+) ai=bi;/*found*Array()_; /析构函数void MaxTwo(Type x1,Type x2) const;/由 x1 和 x2 带回数组 a 中的两个最大值/*found*int Length() const_;/返回数组长度Ty

21、pe operator(int i) const /下标运算符重载成员函数if(i0 | i=size)cout“下标越界!“endl;exit(1);return ai;/由 x1 和 x2 带回数组 a 中的两个最大值templateclass Typevoid ArrayType:MaxTwo(Type x1,Type x2) const /补充完整函数体的内容/将数组 a 中头两个数据赋值给 x1 和 x2,使得 x1=x2/*found*_?(x1=a0,x2=a1):(x1=a1,x2=a0);for(int i=2;isize; i+)if(aix1)x2=x1; x1=ai;e

22、lse if(aix2) x2=ai;void main()int s18=29,20,33,12,18,66,25,14;Arrayint d1(s1,8);int i,a,b;d1.M axTwo(a,b);coutd1.Length()endl;for(i=0;icoutd17endl;couta“,“bendl;(分数:40.00)_正确答案:(1)a=new Typesize+1;2)Array()delete a;3)int Length()const return size;4)(a0a1)?(x1=a0,x2=a1):(x1=a1,x2=a0);)解析:1)为指针数组 a 分配

23、内存空间,注意类型为 Type,大小为 size+1。2)析构函数,释放内存空间,主要是释放类分配的空间数组 a。3) Length 函数返回数组的长度,即 size。4)判断 a0、a1大小,将大的赋值给 x1,小的赋值给 x2。三、3综合应用题(总题数:1,分数:30.00)3.请使用“答题”菜单或使用 VC6 打开考生文件夹 proj3 下的工程 proj3,其中包含了类 Polyno-mial(“多项式”)的定义。形如 5x4+3.4x2-7x+2 代数式称为多项式,其中的 5 为 4 次项系数,3.4 为 2 次项系数,-7 为 1 次项系数,2 为 0 次项(常数项)系数。此例缺

24、3 次项,意味着 3 次项系数为 0,即省略了0x3。在 Polynomial 中,多项式的各个系数存储在一个名为 coef 的数组中。例如对于上面的多项式,保存在 coef0、coef1、coef4中的系数依次为:2.0、-7.0、3.4、0.0、5.0,也即对于 i 次项,其系数就保存在 coefi中。作为成员函数重载的运算符“+”用于计算两个多项式的和,并返回作为计算结果的那个多项式。请补充完成文件 Polynomial.cpp 中重载运算符函数 operator+的定义。此程序的正确输出结果应为:p1+p2 的结果:7.3X4+20.6X3-41.2X2-2.4X+5p2+p3 的结果

25、:-2.3X5+14.6X4+12.8X3+2.8X2+0.2X+1注意:只需要在 operator+的/*333*和/*666*之间填入若干语句,不要改动程序中的其他内容。/源程序/主函数#include“Polynomial.h“int main()double p1=5.0,3.5,-41.2,7.8,p2=0.0,-5.9,0.0,12.8,7.3,p3=1.0,6.1,2.8,0.0,7.3,-2.3;Polynomial poly1(p1, sizeof(p1)/sizeof(double),poly2(p2, sizeof(p2) /sizeof(double),poly3(p3

26、, sizeof(p3) /sizeof(double);cout“p1+p2 的结果:“(polyl+poly2).tostring()endl;cout“p2+p3 的结果:“(poly2+poly3).tostring()endl;/ writeToFile(“K:/b10/61000102/“);return 0:/Polynomial.cpp 函数#include“Polynomial.h“#include strstream#include cmathconst char*Polynomial::tostring() const/将多项式转换成用于输出的字符串static char

27、 s1000;s0=0;strstream buf(s,1000);for(int i=num_of_terms-1;i=0;i-)if(coefi=0.0) continue, /0 系数项不输出if(coefi0.0) buf“-“; /负系数先输出“-“else if(strlen(s)=0) buf“ “;else buf“+“:buffabs(coefi);if(i0)buf“X“:if(i1)buf“i;bufends:return buf.str();Polynomial Polynomial: operator+(const Polynomial x) constdouble

28、c100=0.0;/存放结果系数的数组,所有元素初始化为零。假定项数不会超过 100/下面的 n 为两个操作数中项数的较大者int n=(num_of_terms=x.num_of_terms? num_of_terms:x.num_of_terms);/将两个多项式的对应系数之和存放到数组 c 的对应单元中/*333*/*333*while(n1cn-1=0.0)n-;/去除无效的(系数为 0 的)最高次项return Polynomial(c,n);(分数:30.00)_正确答案:(/*333*for(int i=0;in;i+)ci=this-coefi+x.coefi;/*666*)解析:解析 最后返回的是 Polynomial(c,n),因为知道 c 中存的是多项式系数,而多项式相加的系数应该是各项对应系数之和,所以 ci=this-coefi+x.coefi;。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

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