1、国家二级 C+机试(操作题)-试卷 62 及答案解析(总分:6.00,做题时间:90 分钟)一、基本操作题(总题数:1,分数:2.00)1.请使用 VC6 或使用【答题】菜单打开考生文件夹 progl 下的工程 progl,该工程中包含程序文件maincpp,其中有 Salary(“工资”)类和主函数 main 的定义。程序中位于每个“ERROR *found*”之后的一行语句行有错误,请加以改正。改正后程序的输出结果应为: 应发合计:3500应扣合计:675 实发工资34325 注意:只修改每个“ERROR*found*”下的那一行,不要改动程序中的其他内容。#includeiostream
2、using namespace std;class Salarypublic: Salary(const char*id,double thebase,double thebonus,double thetax)ERROR*found*:the base(base),the bonus(bonus),the tax(tax)staff id=new char strlen(id)+1;strcpy(staff_id,id); ERROR*found* Salary()delete*staffid;) double getGros s Pay()constreturn base+bonus;返回
3、应发项合计 double getNetPay()constreturn getGrossPay()一 tax;)返回实发工资额 private: char*staff id; 职工号 double base; 基本工资 double bonus; 奖金 double tax; 代扣个人所得税;int main() Salary pay(“888888”,30000,5000,6750);cout“应发合计:”paygetGrossPay()“”;cout“应扣合计:”paygetGrossPay()一 paygetNetPay()”;ERROR*found*cout“实发工资:”pay:get
4、NetPay()endl;return 0;(分数:2.00)_二、简单应用题(总题数:1,分数:2.00)2.请使用 VC6 或使用【答题】菜单打开考生文件夹 prog2 下的工程 prog2。此工程中包含一个程序文件maincpp,其中有“部门”类 Department 和“职工”类 Staff 的定义,还有主函数 main 的定义。在主函数中定义了两个“职工”对象,他们属于同一部门。程序展示,当该部门改换办公室后,这两个人的办公室也同时得到改变。请在程序中的横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应为:改换办公室前:职工号:0789 姓 名:张三 部 门:人
5、事处 办公室:521 职工号:0513 姓 名:李四 部 门:人事处 办公室:521 改换办公室后:职工号:0789 姓 名:张三 部 门:人事处 办公室:311 职工号:0513 姓 名:李四 部 门:人事处 办公室:311 注意:只在横线处填写适当的代码,不要改动程序中的其他内容。#includeiostreamusing namespace std;class Department “部门”类 public:Department (const char * name,const char*office)strcpy(this 一name,name);*found*const char*g
6、etName()constreturn name;) 返回部门名称*found* const char*getOffice()const_) 返回办公室房号 void changeOfficeT0(const char*office) 改换为指定房号的另一个办公室 strcpy(this一office,office);private: char name2 0; 部门名称 char office20;部门所在办公室房号;class Staff “职工”类 public:*found* Staff(const char*myid,constchar*myname,Department&mydep
7、t):_strcpy(this 一staff_id,my id);strcpy(this 一name,my_name);const char*getID()constreturnstaff id;) const char*getName()constreturn name;Department getDepartment()constreturn dept;private: char staff id10; 职工号 char name20; 姓名 Department&dept; 所柱部门;void showStaff(Staffstaff)cout“职工号:”staffgetID()“”;c
8、out“姓名:”staffgetName()“”;cout“部门:”staffgetDepartment()getName()“”; cout“办公室:”staffgetDepartment()getOffice()endl;int main() Department dept(“人事处”,521”); Staff Zhang(”07 89”,”张三”,dept),Li(”0513”,”李四”,dept); cout”改换办公室前:tendl; showStaff(Zhang); showStaff(Li); 人事处办公室由 521 搬到 311 * found* cout“改换办公室后:”e
9、ndl; showStaff(Zhang); showStaff(Li); return 0; (分数:2.00)_三、综合应用题(总题数:1,分数:2.00)3.请使用 VC6 或使用【答题】菜单打开考生文件夹 prog3 下的工程 prog3,其中包含了类TaxCalculator(“个税计算器”)和主函数 main 的定义。创建“个税计算器”需要接收税率表信息和起征额信息。在 main 函数中,通过两个数组创建了如下的税率表: (分数:2.00)_国家二级 C+机试(操作题)-试卷 62 答案解析(总分:6.00,做题时间:90 分钟)一、基本操作题(总题数:1,分数:2.00)1.请使
10、用 VC6 或使用【答题】菜单打开考生文件夹 progl 下的工程 progl,该工程中包含程序文件maincpp,其中有 Salary(“工资”)类和主函数 main 的定义。程序中位于每个“ERROR *found*”之后的一行语句行有错误,请加以改正。改正后程序的输出结果应为: 应发合计:3500应扣合计:675 实发工资34325 注意:只修改每个“ERROR*found*”下的那一行,不要改动程序中的其他内容。#includeiostreamusing namespace std;class Salarypublic: Salary(const char*id,double theb
11、ase,double thebonus,double thetax)ERROR*found*:the base(base),the bonus(bonus),the tax(tax)staff id=new char strlen(id)+1;strcpy(staff_id,id); ERROR*found* Salary()delete*staffid;) double getGros s Pay()constreturn base+bonus;返回应发项合计 double getNetPay()constreturn getGrossPay()一 tax;)返回实发工资额 private:
12、 char*staff id; 职工号 double base; 基本工资 double bonus; 奖金 double tax; 代扣个人所得税;int main() Salary pay(“888888”,30000,5000,6750);cout“应发合计:”paygetGrossPay()“”;cout“应扣合计:”paygetGrossPay()一 paygetNetPay()”;ERROR*found*cout“实发工资:”pay:getNetPay()endl;return 0;(分数:2.00)_正确答案:(正确答案:(1):base(thebase),bonus(thebo
13、nus),tax(thetax) (2)Salary()deletestaff_id; (3)coutoffice,office); (2)return office; (3)dept(mydept) (4)deptchangeOfficeTo(”311”);)解析:解析:本题考查的是 Department 类和 Staff 类,其中涉及构造函数、strcpy()函数和 const 函数。复制字符串使用函数 strcpy,构造函数的成员列表初始化时不能初始化指针。 【解题思路】 (1)主要考查考生对 strcpy 函数的掌握情况,根据上一条语句:strcpy(this 一name,name);
14、可知,这条语句复制的是 office,即 strcpy(this 一office,office);。 (2)主要考查考生对成员函数的掌握情况,根据语句的注释:返回办公室房号可知,要填写的是一条 return 语句。在私有成员里:char office20;部门所在办公室房号,表明 office 即为办公室房号。因此直接返回 office 即可。 (3)主要考查考生对构造函数的掌握情况,根据函数体: strepy(this 一staff_id,my_id); strepy(this 一name,my_name); 可知,只有 dept 没有初始化,而空格前有字符“:”,这是成员列表初始化的标识符
15、,因此填写 dept(mydept)即可。 (4)主要考查考生对成员函数的调用的掌握情况,根据题目要求:人事处办公室由 521 搬到 311。在 Department 类中有函数 void changeOfficeTo(const char*office)可以修改办公室的房间号,直接调用即可。 【解题宝典】 主要考查考生对 strcpy()函数及构造函数的掌握情况,strepy(参数一,参数二)函数的功能是复制参数二的字符串给参数一。三、综合应用题(总题数:1,分数:2.00)3.请使用 VC6 或使用【答题】菜单打开考生文件夹 prog3 下的工程 prog3,其中包含了类TaxCalcul
16、ator(“个税计算器”)和主函数 main 的定义。创建“个税计算器”需要接收税率表信息和起征额信息。在 main 函数中,通过两个数组创建了如下的税率表: (分数:2.00)_正确答案:(正确答案:if(1ncome=2 000) 如果收入小于 2000 return taxpayable ; 直接 texpayable(初始代为零) if (taxable lower limits i) 如果 taxable(收入超出起征额的部分)大于 lower limitsi阶段最低限额 taxpayable += (taxable lower limitsi)*ratesi;把起过阶段最低限额的部
17、分乘以该阶段的税率后,加到 taxpayable(个人所得税) taxable : lowerlimitsi; 把 fower limitsi赋值于 taxable )解析:解析:本题考查的是 TaxCalculator 类,其中涉及构造函数、析构函数和动态数组。TaxCalculator 类是个税计算器,首先要明白如何计算税率,然后结合类中的成员完成函数。 【解题思路】 主要考查考生对成员函数的掌握情况,根据题目要求可知,完成计算应纳个人所得税额的成员函数getTaxPayable,其中参数 income 为月收入。同时题目还表明:不超过 2000 元的所得不征收个人所得税。因此先用 if 语句判断是否要征收个人所得税。然后根据题目所给表格,来判断收入多少及应该收多少个人所得税。 【解题宝典】 主要考查考生对成员函数的掌握,程序和生活息息相关,关于这类程序考生仔细琢磨题目。