1、国家二级 C+机试(操作题)模拟试卷 298及答案与解析 一、基本操作题 1 请使用 VC6或使用【答题】菜单打开考生文件夹 prog1下的工程 prog1,该工程中包含程序文件 main epp,其中有 Salary(“工资 ”)类和主函数 main的定义。程序中位于每个 “ ERROR *found*”之后的一行语句行有错误,请加以改正。改正后程序的输出结果应为: 应发合计: 3500应扣合计: 67 5 实发工资: 3432 5 注意:只修改每个 “ ERROR *found”下的 那一行,不要改动程序中的其他内容。 #include iostream using namespace s
2、td; class Salary public: Salary(const char * id, doub_le the_base, double the_bonus, double the_tax) ERROR *found* : the_base(base), the bo_nus(bonus), the_tax(tax) staff_id new charstrlen(id) 1; strcpy(staff_id, id); ERROR *found* Salary()delete * staff_id; double getGrossPay()constreturn base bonu
3、s; 返回应发项合计 double getNetPay()constreturn getGrossPay() tax; )返回实发工资额 private: char * staff_id; 职工号 double base; 基本工资 double bonus; 奖金 double tax; 代扣个人所得税 ; int main() Salary pay(“888888“, 3000 0, 500 0, 67 50); cout ”应发合计: “ pay getGrossPay() “; cout “应扣合计: “ pay getGrossPay() pay getNetPay() “; ERR
4、OR *found* cout “实发工资: “ pay getNetPay() end1; return 0; 二、简单应用题 2 请使用 VC6或使用【答题】菜单打开考生文件夹 prog2下的工程 prog2。此工程中包含一个程序文件 main cpp,其中有 “部门 ”类 Department和 “职工 ”类 Staff的定义,还有主函数 main的定义。在主函数中定义了两个 “职工 ”对象,他们属于同一部门。程序展示,当该部门改换办公室后,这两个人的办公室也同时得到改变。请在程序中的横线处填写适当的代码并删除 横线,以实现上述类定义。此程序的正确输出结果应为: 改换办公室前: 职工号:
5、 0789姓 名:张三 部 门:人事处办公室: 521 职工号: 0513姓 名:李四 部 门:人事处办公室: 521 改换办公室后: 职工号: 0789姓 名:张三 部 门:人事处办公室: 311 职工号: 0513姓 名:李四 部 门:人事处办公室: 311 注意:只在横线处填写适当的代码,不要改动程序中的其他内容。 #include iostream using namespace std; class Department “部门 ”类 public: Department f const char * name, const char木 office) strcpy(this nam
6、e, name); *found* const char * getName()constreturn name; 返回部门名称 *found* const char * getOffice()const_ 返回办公室房号 void changeOfficeTO (const char * office)改换为指定房号的另一个办公室 strcpy(this office, office); private: char name20; 部门名称 char office20; 部门所在办公室房号 ; class Staff “职工 ”类 public: *found* Staff(const ch
7、ar * my id, const charI=myname, Department&my_dept): _ strcpy(this staff_id, my_id); strcpy(this name, my_name; const char * getID()constreturn staff id; ) const char * getName()constreturn name; Department getDepartment() constreturn dept; private: char staff_id10;职工号 char name20;姓名 Department&dept
8、;所在 部门 ; void showStaff(Staff staff) cout “职工号: “ staff getID() “; cout “姓名: “ staff getName() “; cout “部 门: “ staff getDepartment() getName() “; cout “办公室: “ staff getDepartment() getOffice() end1; int main() Department dept(“人事处 “, “521“); Staff Zhang(“0789“, “张三 “, dept), Li(“0513“, “李四 “, dept);
9、 cout “改换办公室前: “ end1; showStaff(Zhang); showStaff(Li); 人事处办公室由 521搬到 311 *found* cout “改换办公室后: “ end1; showStaff(Zhang); showStaff(Li); return 0; 三、综合应用题 3 请使用 VC6或使用【答题】菜单打开考生文件夹 prog3下的工程 prog3,其中包含了类 TaxCalculator(“个税计算器 ”)和主函数 main的定义。创建 “个税计算器 ”需要接收税率表信息和起征额信息。在 main函数中, 通过两个数组创建了如下的税率表: 利用这个税
10、率表创建 “个税计算器 ”时,假定起征额为 2000元 (即不超过 2000元的所得不征收个人所得税 )。请补充完成计算应纳个人所得税额的成员函数 getTaxPayable,其中的参数 income为月收入。此程序的正确输出结果应为: 月收入为 800元时应缴纳个人所得税 0元 月收入为 1800元时应缴纳个人所得税 0元 月收入为 2800元时应缴纳个人所得税 55元 月收入为 3800元时应缴纳个人所得税 155元 月收人为 4800元时应缴纳个人所得税 295元 月收人为 5800元时应缴纳个人所得税 455元 注意:只能在函数 getTaxPayable中的 “ *333*”和“*6
11、66*”之间填入若干语句,不要改动程序中的其他内容。 TaxCalCUlator h#include iostream #include iomanip using namespace std; class TaxCalculatorpublic: TaxCal culator(double the_limits, double the_rates,int the_length, double the_ threshold) : lower_limits(new doublethe_length),rates(new doublethe_length), list_len(the_length
12、), threshold(the_threshold) for(int i 0; i list_len; i ) lower_limitsi the_ limitsi; ratesi the ratesi; TaxCalculator()deletelower limits; delete rates; double getTaxPayable(double income)const; 返回指定月收入的应纳个人所得税额 void showTaxPayable(double income)const;显示指定月收入的应纳个人所得税额Prirate: double * lower limits;适
13、用收入段下限 double * rates; 适用税率 int list_len;税率表项数 double threshold; 起征额 ; void writeToFile(const char * path); TaxCalcnlator cpp#include“TaxCal culator h“double TaxCalculatOr getTax-Payable(double income)const double taxable income thresh old;应纳税工资额 double tax_payable 0 0;应纳个人所得税额 int i list_len 1;从税率表
14、的最高适用段开始计算 while(i 0) *333* *666* i; return tax_payable; void TaxCalculator showTax Payable(double income)const cout “月收入为 “ setw(6) income “元时应缴纳个人所得税 “ setw(4)getTaxPayable(income) “元 “ end1; main cpp#include“TaxCalculator h“int main() double limits 0 0, 500 0,2000 0, 5000 0, 20000 0, 40000 0, 600
15、00 0, 80000 0, 100000 0;double rates 0 05, 0 1, 0 15, 0 2, 0 25, 0 3, 0 35, 0 4, 0 4 5); TaxCalculator calc(limits, rates, 9, 2000 0); calc showTaxPayable(800 0); calc showTaxPayable(1800 0); calc showTaxPayable(2800 0); calc showTaxPayable(3800 0); calc showTaxPayable(4800 0); calc showTaxPayable(5
16、800 0); writeToFile(“); return 0; 国家二级 C+机试(操作题)模拟试卷 298答案与解析 一、基本操作题 1 【正确答案】 (1): base(the_base), bonus(the_bonus), tax(the_tax) (2) Salary()deletestaff_id; (3)cout “实发工资: “ pay getNetPay() end1; 【试题解析】 (1)主要考查考生对构造函数的掌握情况,构造函数的成员初始列表要把形参放在括号内。 (2)主要考查考生对析构函数的掌握情况,析构函数使用 delete释放指针, delete后要跟标识符 “
17、”。 (3)主要考查考生对成员函数调用的掌握情况,调用类的成员函数使用标识符“ ”,而不是作用域符 “ ”。 二、简单应用题 2 【正确答案】 (1)strcpy(this office, office); (2)return office; (3)dept(my_dept) (4)dept changeOfficeTo(“311“); 【试题解析】 (1)主要考查考生对 strcpy函数的掌握情况,根据上一条语句:strcpy(this name, name);可知,这条语句复制的是 office,即 strcpy(this office, office);。 (2)主要考查考生对成员函数的
18、掌握情况,根据语句的注释:返回办公室房号可知,要填写的是一条: return语句。在私有成员里: char office20;部门所在办公室房号,表明 office即为办公室房号。因此直接返回 office即可。 (3)主要考查考生对构造函数的掌握情况,根据函数体: strcpy(this staff_id, my_id); strcpy(this name, my_name); 可知,只有 dept没有初始化,而空格前有字符 “: ”,这是成员列表初始化的标识符,因此填写 dept(my_dept)即可。 (4)主 要考查考生对成员函数的调用的掌握情况,根据题目要求:人事处办公室由 521搬
19、到 311。在 Department类中有函数 void changeOfficeTo(constchar * office)可以修改办公室的房间号,直接调用即可。 三、综合应用题 3 【正确答案】 if(income 2000) 如果收入小于 2000 return tax_payable; 直接 tex_payable(初始代为零 ) if(taxable lower_limitsi) 如果 taxable(收入超出起征额的部分 )大于 lower_limitsi阶段最低限额 tax_payable (taxable lower_limitsi) * ratesi; 把起过阶段最低限额的部分乘以该阶段的税率后,加到 tax_payable(个 人所得税 ) taxable lower_limitsi; 把 fower_limitsi赋值于 taxable 【试题解析】 主要考查考生对成员函数的掌握情况,根据题目要求可知,完成计算应纳个人所得税额的成员函数 getTaxPayable,其中参数 income为月收入。同时题目还表明:不超过 2000元的所得不征收个人所得税。因此先用 if语句判断是否要征收个人所得税。然后根据题目所给表格,来判断收入多少及应该收多少个人所得税。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1