【计算机类职业资格】程序员-C++程序设计(二)及答案解析.doc
《【计算机类职业资格】程序员-C++程序设计(二)及答案解析.doc》由会员分享,可在线阅读,更多相关《【计算机类职业资格】程序员-C++程序设计(二)及答案解析.doc(15页珍藏版)》请在麦多课文档分享上搜索。
1、程序员-C+程序设计(二)及答案解析(总分:100.00,做题时间:90 分钟)一、试题一(总题数:1,分数:15.00)阅读以下说明和 C+代码,填补 C+代码中的空缺,将解答写在对应栏内。说明已知某公司按周给员工发放工资,其工资系统需记录每名员工的员工号、姓名、工资等信息。其中一些员工是正式的,按年薪分周发放(每年按 52 周计算);另一些员工是计时工,以小时工资为基准,按每周工作小时数核算发放。下面是实现该工资系统的 C+代码,其中定义了 4 个类:工资系统类 PayRoll、员工类 Emplovee、正式工类 Salaried 和计时工类 Hourly,Salaried 和 Hourl
2、y 是 Employee 的子类。C+代码/头文件和域名空间略const int EMPLOYEE_NUM=5;class Employeeprotected:int emDCode; /员工号string name; /员工姓名double salary; /周发放工资public:Employee(const int empCode,const string name)this-empCode=empCode; this-name=name;virtualEmployee()virtual void pay()=0;double getSalary()return this-salary;
3、class Salaried _private: double payRate; /年薪public:Salaried(const int empCode,const string void pay()this-salary=_;/计算正式员工的周发放工资数coutthis-name“:“this-salaryendl;class Hourly _ private:double payRate; /小时工资数int hours; /周工作小时数public:Hourly(const int empCode, const string this-hours=hours,void pay()thi
4、s-saiary=_;/计算计时工的周发放工资数coutthis-name“:this-salaryendl;class PayRollpublic:void pay(Employee* e)for (int i=0; iEMPLOYEE_ NUM; i+)ei-pay();int main()PayRoll* payRoll=new PayRoll;_ employeesEMPLOYEE_ NUM=new Salaried(1001,“Zhang San“,58000.00),/此处省略对其他职工对象的生成new Hourly(1005,“L1“,12,50.00),;payRoll-pay
5、(_);double total=0.0;for(int i=0;iEMPLOYEE_ NUM;i+)(total+=employeesi-getSalary(); /统计周发放工资总额cout“总发放额=“totalendl;delete payRoll; retum 0;(分数:15.00)填空项 1:_填空项 1:_填空项 1:_填空项 1:_填空项 1:_填空项 1:_二、试题二(总题数:1,分数:15.00)阅读以下说明和 C+代码,填充代码中的空缺。说明下面的程序用来计算并寻找平面坐标系中给定点中最近的点对(若存在多对,则输出其中的一对即可)。程序运行时,先输入点的个数和一组互异的
6、点的坐标,通过计算每对点之间的距离,从而确定出距离最近的点对。例如,在图所示的 8 个点中,点(1,1)与(2,0.5)是间距最近的点对。(分数:15.00)填空项 1:_填空项 1:_填空项 1:_填空项 1:_填空项 1:_三、试题三(总题数:1,分数:15.00)阅读下列说明和 C+代码,填充代码中的空缺。说明某学校在学生毕业时要求对其成绩进行综合评定,学生的综合成绩(GPA)由其课程加权平均成绩(Wg)与附加分(Ag)构成,即 GPA=Wg+Ag。设一个学生共修了 n 门课程,则其加权平均成绩(Wg)定义如下:其中,gradei、Ci 分别表示该学生笫 i 门课程的百分制成绩及学分。学
7、生可以通过参加社会活动或学科竞赛获得附加分(Ag)。学生参加社会活动所得的活动分(Apoints)是直接给出的,而竞赛分(Awards)则由下式计算(一个学生最多可参加 m 项学科竞赛):(分数:15.00)填空项 1:_填空项 1:_填空项 1:_填空项 1:_填空项 1:_填空项 1:_四、试题四(总题数:1,分数:15.00)阅读以下说明和 C+代码,将应填入_处的语句或语句成分写在对应栏内。说明某数据文件 students.txt 的内容为 100 名学生的学号和成绩,下面的程序将文件中的数据全部读入对象数组,按分数从高到低进行排序后选出排名前 30%的学生。C+代码#include
8、iostream#include fstream#include stringusing namespace std;class Studentprivate:string sNO; /学号int credit;/分数public:Student(string a,int b)sNO=a;credit=b;Student()int getCredit();void out();_:getCredit()return credit;_:out()Cout“SNO:“sNO“,Credit=“creditendl;class SortStudentpublic:void sort(Student
9、*s,int n);SortStudent();void SortStudent:sort(Student *s,int n)for(int i=0;in-1;i+)for(int j=i+1;jn;j+)if(si._sj._Student temp=si;si=sj;sj=temp;int main(int argc,char* argv)const int number=100; /学生总数ifstream students;students.open(“students.txt“);if(!students.is open()throw 0;Student *testStudent=_
10、number;int k=0;string s;while(getline(students,s,/n)/每次读取一个学生的学号和成绩Student student(s.substr(0,s.find(,),atoi(s.substr(s.find(,)+1).c_str();testStudentk+=student;Students.closeo;_;ss.sort(testStudent,k);cout“top 30%:“+endl;for(k=0;knumber*0.3;k+)testStudentk.out();deletetestStudent;return 0;(分数:15.00
11、)填空项 1:_填空项 1:_填空项 1:_填空项 1:_填空项 1:_填空项 1:_五、试题五(总题数:1,分数:20.00)阅读以下说明和 C+代码,将应填入_处的字句写在对应栏内。说明现需要统计某企业员工的月平均工资,即该企业本月发给员工的工资总和除以员工数。假设企业本月发给员工的工资总和为 sumSalary,该企业的员工总数为 employeeNumber,下面的程序代码计算该企业员工本月的平均工资,其中需要处理 employNumber 为 0 的情况。C+代码#include iostreamusing namespace std;class Departmentprotecte
12、d:float average(float x,int y)if(y=0)throw _;return x/y;public:void caculate(void)float sumSalary;int employeeNumber;trycout“请输入当月工资总和与员工数:“endl;cinsumSalaryemployeeNumber;float k=average(sumSalary,employeeNumber);cout“平均工资:“kendl;_(int e)if(e=0)cout“请重新输入当月工资总和与员工数:“endl;cinsumSalaryemployeeNumber;
13、float k=average(sumSalary,employeeNumber);cout“平均工资:“kendl;void main()try _;d.caculate();_(int e)if(e=0)cout“程序未正确计算平均工资!“endl;程序运行时,若输入的员工工资总和为 6000,员工数为 5,则屏幕输出为:请输入当月工资总和与员工数:6000 5_若程序运行时,第一次输入的员工工资总和为 6000,员工数为 0,第二次输入的员工工资总和为 0,员工数为 0,则屏幕输出为:请输入当月工资总和与员工数:6000 0_0 0_(分数:20.00)填空项 1:_填空项 1:_填空项
14、 1:_填空项 1:_填空项 1:_六、试题六(总题数:1,分数:20.00)阅读以下说明和 C+代码,将应填入_处的字句写在对应栏内。说明已知类 LinkedList 表示列表类,该类具有 4 个方法:addElement()、lastElement()、numberOfElement()以及 removeLastElement()。4 个方法的含义分别如下。 void addElement(Obect):在列表尾部添加一个对象。 Object lastElement():返回列表尾部对象。 int numberOfElement():返回列表中对象的个数。 void removeLastE
15、lement():删除列表尾部的对象。现需要借助 LinkedList 来实现一个 Stack 栈类,C+代码 1 和 C+代码 2 分别采用继承和组合的方式来实现。C+代码 1Class Stack:public LinkedListpublic:void push(Object o)(addElement(o); /压栈Object peek()return _; /获取栈顶元素bool isEmpty() /判断栈是否为空return numberOfElement()=0;Object pop /弹栈Object o=lastElement();_;Return 0;C+代码 2cla
16、ss stackprivate:_;public:void push(Object o) /压栈list.addElement(o);object peek /获取栈顶元素return list _;bool isEmpty() /判断栈是否为空retum list.numberOfElement()=0;Object pop() /弹栈Objecto=list.lastElement();list.removeLastElement();return o;问题若类 LinkedList 新增加了一个公有的方法 removeElement(int index),用于删除列表中第 index个元
17、素,则在用继承和组合两种实现栈类 Stack 的方式中,哪种方式下 Stack 对象可访问方法removeElement(int index)?_(A继承 B组合)(分数:20.00)填空项 1:_填空项 1:_填空项 1:_填空项 1:_填空项 1:_程序员-C+程序设计(二)答案解析(总分:100.00,做题时间:90 分钟)一、试题一(总题数:1,分数:15.00)阅读以下说明和 C+代码,填补 C+代码中的空缺,将解答写在对应栏内。说明已知某公司按周给员工发放工资,其工资系统需记录每名员工的员工号、姓名、工资等信息。其中一些员工是正式的,按年薪分周发放(每年按 52 周计算);另一些员
18、工是计时工,以小时工资为基准,按每周工作小时数核算发放。下面是实现该工资系统的 C+代码,其中定义了 4 个类:工资系统类 PayRoll、员工类 Emplovee、正式工类 Salaried 和计时工类 Hourly,Salaried 和 Hourly 是 Employee 的子类。C+代码/头文件和域名空间略const int EMPLOYEE_NUM=5;class Employeeprotected:int emDCode; /员工号string name; /员工姓名double salary; /周发放工资public:Employee(const int empCode,cons
19、t string name)this-empCode=empCode; this-name=name;virtualEmployee()virtual void pay()=0;double getSalary()return this-salary;class Salaried _private: double payRate; /年薪public:Salaried(const int empCode,const string void pay()this-salary=_;/计算正式员工的周发放工资数coutthis-name“:“this-salaryendl;class Hourly
20、_ private:double payRate; /小时工资数int hours; /周工作小时数public:Hourly(const int empCode, const string this-hours=hours,void pay()this-saiary=_;/计算计时工的周发放工资数coutthis-name“:this-salaryendl;class PayRollpublic:void pay(Employee* e)for (int i=0; iEMPLOYEE_ NUM; i+)ei-pay();int main()PayRoll* payRoll=new PayRo
21、ll;_ employeesEMPLOYEE_ NUM=new Salaried(1001,“Zhang San“,58000.00),/此处省略对其他职工对象的生成new Hourly(1005,“L1“,12,50.00),;payRoll-pay(_);double total=0.0;for(int i=0;iEMPLOYEE_ NUM;i+)(total+=employeesi-getSalary(); /统计周发放工资总额cout“总发放额=“totalendl;delete payRoll; retum 0;(分数:15.00)填空项 1:_ (正确答案::public Empl
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
5000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 职业资格 程序员 程序设计 答案 解析 DOC
