上学吧题库

计算机二级C++操作题考试题库模拟卷八

试卷预览
请打开考生文件夹下的解决方案文件prog1,该工程中包含程序文件main.cpp,其中有Salary(“工资”)类和主函数main的定义。程序中位于每个“// ERROR **** found ****”之后的一行语句行有错误,请加以改正。改正后程序的输出结果应为:应发合计:3500 应扣合计:67.5 实发工资:3432.5注意:只修改每个“// ERROR **** found ****”下的那一行,不要改动程序中的其他内容。#include < iostream >using namespace std;class Salary{public:Salary(const char* id,double the_base, double the_bonus, double the_tax)//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 * staff_id; }double getGrossPay() const { return base + bonus; } //返回应发项合计double getNetPay() const { return 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() << “”;// ERROR ******* found *******cout << “实发工资:” << pay:: getNetPay()<< endl;return 0;}
请打开考生文件夹下的解决方案文件proj1,此工程包含一个源程序文件proj1.cpp。文件中将表示数组元素个数的常量Size定义为4,并用int类型对类模板进行了实例化。文件中位于每个注释“//ERROR **** found ****”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为:1 2 3 4注意:模板参数名用T。只修改注释“// ERR0R ******** found ********”的下一行语句,不要改动程序中的其他内容。//proj1.cpp#include < iostream >using namespace std;//将数组元素个数Size定义为4//ERROR ******* found *******const int Size;template < typename T >class MyClass{public:MyClass (T * p){for(int i=0; i < Size; i++ )array[i] =p[i];}void Print ();private:T array[Size];};template < typename T >//ERROR ******* found *******void MyClass::Print (){for (int i = 0; i < Size; i ++ )cout << array[i] << ‘\t’;}int main (){int intArray [ Size] = {1, 2, 3,4};//ERROR ******* found *******MyClass < double > obj (intArray);obj.Print ();cout << endl;return 0;}
请打开考生文件夹下的解决方案文件proj2,该工程中包含一个程序文件main.cpp,其中有“书”类 Book及其派生出的“教材”类TeachingMaterial的定义,还有主函数main的定义。请在程序中“//******** found ********”下的横线处填写适当的代码,然后删除横线,以实现上述类定义和函数定义。此程序的正确输出结果应为:教材名:C++语言程序设计页 数:299作 者:张三相关课程:面向对象的程序设计注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//**** found ****”。#include < iostream >using namespace std;classBook{ //“书”类char * title; //书名int num_pages; //页数char * writer; //作者姓名public:Book(const char *the_title, int pages, const char * the _writer): num_pages(pages){title =new char[strlen (the_title) +1];strcpy(title, the_title);//********* found *********________strcpy(writer, the_writer);}//********* found *********~Book() {________}int numOfPages()const{ return num_pages;} //返回书的页数const char * theTitle() const { return title; } //返回书名const char * theWriter() const{ return writer; } //返回作者名};class TeachingMaterial: public Book{//“教材”类char * course;public:TeachingMaterial(const char *the_title, int pages, const char * the_writer, const char *the_course) //********* found *********:________{course =new char[strlen (the_course) +1];strcpy(course,the_course);}~TeachingMaterial(){ delete [ ]course; }const char * theCourse () const { return course;} //返回相关课程的名称};int main () {TeachingMaterial a_book(“C ++语言程序设计”, 299, “张三”, “面向对象的程序设计”);cout << “教材名:”<< a_book.theTitle () << endl<< “页数:” << a_book. numOfPages () << endl<< “作者:” << a_book.theWriter() << endl//********* found *********<< “相关课程:” <<________;cout << endl;return 0;}
请打开考生文件夹下的解决方案文件proj2,此工程中包含一个程序文件main.cpp,其中有“部门”类Department和“职工”类Staff的定义,还有主函数 main的定义。在主函数中定义了两个“职工”对象, 他们属于同一部门。程序展示,当该部门改换办公室后,这两个人的办公室也同时得到改变。请在程序中的横线处填写适当的代码并删除横线,以实现 上述类定义。此程序的正确输出结果应为:改换办公室前:职工号:0789 姓名:张三 部门:人事处 办公室:521职工号:0513姓名:李四 部门:人事处 办公室:521改换办公室后:职工号:0789姓名:张三 部门:人事处 办公室:311职工号:0513姓名:李四 部门:人事处 办公室:311注意:只在横线处填写适当的代码,不要改动程序中的其他内容。#include < iostream >using namespace std;classDepartment{ //“部门”类public:Department(const char * name, const char * office) {strcpy (this -> name, name);//********** found **********________}const char* getName () const { return name; } //返回部门名称//********** found **********const char * getOffice () const { ________ } //返回办公室房号void changeOfficeTo ( const char * office) { //改换为指定房号的另一个办公室strcpy (this -> office, office) ;}private:char name[ 20]; //部门名称char office[20]; //部门所在办公室房号};class Staff { //“职工”类public://********** found **********Staff (const char * my_id, const char * my_name, Department &my_dept): _______ {strcpy(this -> staff_id,my_id);strcpy (this -> name, my_name);}const char * getID () const{ return staff_id; }constchar * getName () const { return name; }Department getDepartment () const{ return dept; }private:char staf f_id[10]; //职工号char name[20]; //姓名Department &dept; //所在部门};void showStaff (Staff &staff) {cout << “职工号:” << staff.getID() << “”;cout << “姓名:” << staff.getName() << “”;cout << “部门:” << staff.getDepartment().getName () << “”;cout<< “办公室:” < }int main () {Department dept (“人事处”, “521”);Staff Zhang (“0789”, “张三”, dept), Li(“0513”, “李四”, dept);cout << “改换办公室前:” << endl;showStaff(Zhang);showStaff(Li);//人事处办公室由521搬到311// ********** found **********________cout << “改换办公室后:” << endl;showStaff(Zhang);showStaff(Li);return 0;}
请打开考生文件夹下的解决方案文件proj3,其中定义了用于表示特定数制的数的模板类Number和表示一天中的时间的类TimeOfDay;程序应当显示:01:02:03.00406:04:06.021但程序中有缺失部分,请按照以下的提示,把缺失部分补充完整:(1)在“//** 1 ** **** found****”的下方是一个定义数据成员seconds的语句,seconds用来表示 “秒”。(2)在“//** 2 ** **** found****”的下方是函数advanceSeconds中的一个语句,它使时间前进 k秒。(3)在“// ** 3 ** **** found****”的下方是 函数advance中的一个语句,它确定增加k后n的当前值和进位,并返回进位。例如,若n的当前值是表示时间的55分,增加10分钟后当前值即变为5分,进位为1(即1小时)。注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“**** found ****”。填写的内容必须在一行中完成,否则评分将产生错误。//proj3.cpp#include < iostream >#include < iomanip >using namespace std;template < int base >//数制为base的数class Number{int n; //存放数的当前值public:Number(int i) :n (i) { } //i必须小于baseint advance(int k); //当前值增加k个单位int value() const { return n; } //返回数的当前值};class TimeOfDay{public:Number < 24 > hours; //小时(0 ~23)Number < 60 > minutes; //分(0 ~59)//** 1 ** ******* found *******_______;//秒(0 ~59)Number<1000>milliseconds; //毫秒(0~999)TimeOfDay (int h =0, int m = 0, int s =0, int milli =0):hours(h), minutes(m), seconds(s), milliseconds(milli){ }void advanceMillis(int k) { advanceSeconds(milliseconds. advance(k)); } //前进k毫秒void advanceSeconds(int k) //前进k秒{// ** 2 ** ******* found *******_______;}void advanceMinutes(int k) { advanceHour(minutes. advance(k)); }//前进k分钟void advanceHour( int k ) { hours.advance(k); }//前进 k小时void show() const {//按“小时:分:秒.毫秒”的格式显示时间int c = cout.fill(‘0’); //将填充字符设置为‘0’cout << setw (2) << hours.value() << ‘:’ //显示小时<< setw (2) << minutes.value()<< ‘:’ //显示分<< setw (2) << seconds.value()<< ‘.’ //显示秒<< setw (3) << milliseconds.value(); //显示毫秒cout. fill(c) ;//恢复原来的填充字符}};template < int base >int Number < base >:: advance(int k){n + = k; //增加k个单位int s =0; //s用来累计进位// ** 3 ** ******* found *******while (n﹥= base) ________//n到达或超过base即进位return s; //返回进位}int main (){TimeOfDay time(1,2,3,4);//初始时间:1小时2分3秒4毫秒time. show (); //显示时间time. advanceHour (5); //前进5小时time.advanceSeconds(122); //前进122秒(2分零2秒)time.advanceMillis (1017); //前进1017毫秒(1秒零17毫秒)cout << endl;time.show(); //显示时间cout << endl;return 0;}
请打开考生文件夹下的解决方案文件proj3,其中包含了类TaxCalculator( “个税计算器”)和主函数main的定义。创建“个税计算器”需要接收税率表信息和起征额信息。在main函数中,通过两个数组创建了如下的税率表:利用这个税率表创建“个税计算器”时,假定起征额为2 000元(即不超过2 000元的所得不征收个人所得税)。请补充完成计算应纳个人所得税额的成员函数getTaxPayable,其中的参数income为月收入。此程序的正确输出结果应为:月收入为800元时应缴纳个人所得税0元月收入为1 800元时应缴纳个人所得税0元月收入为2 800元时应缴纳个人所得税55元月收入为3 800元时应缴纳个人所得税155元月收入为4 800元时应缴纳个人所得税295元月收入为5 800元时应缴纳个人所得税455元注意:只能在函数getTaxPayable中的“//********333********”和“********666********”之间填入若干语句,不要改动程序中的其他内容。//TaxCalculator.h#include < iostream >#include < iomanip >using namespace std;class TaxCalculator{public:TaxCalculator (double the_limits[ ], double the_rates[ ], int the_length, double the_threshold): lower_limits (new double[the_length]), rates(new doublet the_length]),list_len(the_length), threshold(the_threshold) {for (int i = 0 ; i﹤list_len; i++){lower_limits[i] = the_ limits[i];rates[i] =the_rates[i];}}~TaxCalculator(){ delete [ ] lower_ limits; delete [ ] rates;}double getTaxPayable(double income) const; //返回指定月收入的应纳个人所得税额void showTaxPayable (double income) const; //显示指定月收入的应纳个人所得private:double * lower_limits; //适用收入段下限double * rates; //适用税率int list_len; //税率表项数double threshold; //起征额};void writeToFile (const char * path);//TaxCalcnlator.cpp#include “TaxCalculator.h”double TaxCalculator::getTaxPayable(double income) const{double taxable = income-thresh-old;//应纳税工资额double tax_payable =0.0;//应纳个人所得税额int i = list_len - 1;//从税率表的最高适用段开始计算while (i﹥= 0) {// ******** 333 ********// ******** 666 ********--i;}return tax_payable;}void TaxCalculator:: showTaxPayable (double income)const {cout << “月收入为” << setw (6) << income << “元时应缴纳个人所得税” << setw (4 ) << getTaxPayable (income) << “元” <}//main.cpp#include “TaxCalculator.h”int main () {double limits[ ] = { 0.0, 500.0, 2000.0, 5000.0, 20000.0, 40000.0,60000.0,80000.0, 100000.0 };double rates[ ] ={ 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45};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 (5800.0);writeToFile (“”);return 0;}