面向对象程序设计C++试验题目(共59页).doc
精选优质文档-倾情为你奉上标题:1. 函数重载 实习二 C+函数时 限:3000 ms内存限制:10000 K总时限:3000 ms描述: 设计一菜单程序,利用函数重载实现员工月工资的计算,计算方法如下: (1)管理人员的月工资 月薪 缺勤天数 × 月薪 ÷ 22; (2)销售人员的月工资 底薪 + 销售金额 × 提成比例; (3)计件工人的月工资 产品件数 × 每件报酬; (4)计时工人的月工资 工作小时 × 小时报酬;输入:职工类别及相关信息。职工类别:1表示管理人员;2表示销售人员;3表示计件工人;4表示计时工人;其余字符表示退出。相关信息:若为管理人员,则输入月薪和缺勤天数;若为销售人员,则输入底薪、销售金额和提成比例;若为计件工人,则输入产品件数和每件报酬;若为计时工人,则输入工作小时和小时报酬。输出:员工月工资。输入样例:1 职工类别5000.0 1月薪和缺勤天数输出样例:4772.73提示:1. 计算管理人员、销售人员、计件工人、计时工人的月工资的函数原型可以分别设计如下: double getEarning(double salary, int absenceDays); double getEarning(double baseSalary, double salesSum, double rate); double getEarning(int workPieces, double wagePerPiece); double getEarning(double hours, double wagePerHour);2. 菜单程序设计如下: int main() . cout << "Please select." << endl; cout << "1: Manager." << endl; cout << "2: Sales Man." << endl; cout << "3: Pieces Worker." << endl; cout << "4: Hour-Worker." << endl; cout << "Others: Quit" << endl; cin >> sel; switch(sel) case 1: cin >> .; cout << getEarning(.); break; case 2: cin >> .; cout << getEarning(.); break; case 3: cin >> .; cout << getEarning(.); break; case 4: cin >> .; cout << getEarning(.); break; default: break; return 0;来源:#include<iostream>using namespace std;double getEarning(double salary ,int absenceDays) return (salary -salary*absenceDays/22);/ admindouble getEarning(double baseSalary ,double salesSum,double rate) return (baseSalary + salesSum*rate);double getEarning(int workPieces,double wagePerPiece) return (workPieces*wagePerPiece);double getEarning(double hours ,double wagePerHour) return (hours*wagePerHour);int main() int kind = 0 ; cout << "Please select." << endl; cout << "1: Manager." << endl; cout << "2: Sales Man." << endl; cout << "3: Pieces Worker." << endl; cout << "4: Hour-Worker." << endl; cout << "Others: Quit" << endl; cin >> kind ; switch(kind) case 1: double salary ; int abDays; cin>>salary>>abDays; cout<<getEarning(salary,abDays); break; case 2: double base ; double salesSum; double rate; cin>>base>>salesSum>>rate; cout<<getEarning(base,salesSum,rate); break; case 3: int workPieces; double wagePerPiece; cin>>workPieces>>wagePerPiece; cout<<getEarning(workPieces,wagePerPiece); break; case 4: double hours; double wagePerHour; cin>>hours>>wagePerHour; cout<<getEarning(hours,wagePerHour); break; default: break; / cout<<getEarning(100.0,11);/ cout<<getEarning(100.0,10.0,0.1);/ cout<<getEarning(100,0.2);/ cout<<getEarning(200,0.3); return 0 ;标题:2. 引用传递时 限:3000 ms内存限制:10000 K总时限:3000 ms描述:设计一个函数,将两个浮点数传入,然后通过引用把其和、差、积传出。函数原型如下:void Math(float a,float b,float &sum,float &sub,float &pro);输入:输入两个浮点数输出:输出两个浮点数的和、差、积。输入样例:6.5 2.3输出样例:8.8 4.2 14.95#include<iostream>using namespace std;void Math(float a , float b ,float& sum,float &sub,float&pro) sum = a+ b ; sub = a-b ; pro = a*b ;int main() float sum = 0 ; float sub = 0 ; float pro = 0 ; float a = 0 ; float b = 0 ; cin>>a>>b; Math(a,b,sum,sub,pro); cout<<sum<<" "<<sub<<" "<<pro<<endl; return 0 ;标题:3. 函数模板时 限:3000 ms内存限制:10000 K总时限:3000 ms描述: 设计一个函数模板,实现两个同类型数据的交换。 将设计好的函数模板分别实例化为两个整型数交换、两个字符交换的模板函数,调用这些函数并输出运行结果。输入:分别输入两个整型数和两个字符输出:分别输出两个整型数和两个字符交换的结果输入样例:5 9输出样例:9 5#include<iostream>using namespace std;template<class T>T cg(T &a ,T& b) T c ; c = a ; a = b ; b = c ;int main() int a = 0 ; int b = 0 ; char c = 0 ; char d = 0 ; cin>>a>>b>>c>>d; cg(a,b); cg(c,d); cout<<a<<" "<<b<<endl<<c<<" "<<d<<endl; return 0 ;标题:4. 默认形参值时 限:3000 ms内存限制:10000 K总时限:3000 ms描述:设计一个求空间两点距离的函数,要求第2个点的默认值为坐标原点。输入:两个点的坐标。输出:输出第一个点与原点之间的距离及输入的两个点之间的距离。输入样例:1 1 15 5 5输出样例:1.732056.9282提示:函数原型可设计如下:float distance(float x1,float y1,float z1, float x2=0,float y2=0,float z2=0);#include<iostream>#include<cmath>using namespace std;float distance(float x1,float y1,float z1,float x2=0,float y2=0,float z2=0) return sqrt(pow(x1-x2,2)+pow(y1-y2,2)+pow(z1-z2,2);int main() float x1 = 0 ; float x2 = 0 ; float y1 = 0 ; float y2 = 0 ; float z1 = 0 ; float z2 = 0 ; cin>>x1>>y1>>z1>>x2>>y2>>z2; cout<<distance(x1,y1,z1)<<endl; cout<<distance(x1,y1,z1,x2,y2,z2)<<endl; return 0 ;实习 三标题:类的定义_静态常量时 限:3000 ms内存限制:10000 K总时限:3000 ms描述:设计并实现一个圆柱类Cylinder,要求:(1)设计两个double型的私有数据成员:高度height和底圆半径radius。(2)设计一个double型的公有静态常量数据成员pi(其值初始化为3.),以及一个获取该常量的公有静态成员函数GetPI。(3)在构造函数的初始化列表中初始化高度height和底圆半径radius。(4)设计用于获取半径的成员函数GetRadius、获取高度的成员函数GetHeight、设置半径的成员函数SetRadius、设置高度的成员函数SetHeight。(5)设计用于计算圆柱体积的成员函数Volume()、计算圆柱表面积的成员函数Area。 在main函数中:根据输入的高度和半径构造圆柱对象,并输出圆柱的基本信息、体积和表面积。输入:圆柱的高度和底圆半径输出:圆周率pi、圆柱高度、底圆半径、圆柱的体积和表面积输入样例:2.0 1.0输出样例:pi=3.14159, height=2, radius=1:volume=6.28319, area=18.8496#include <iostream>using namespace std;class Cylinderprivate: double height,radius;public: static const double Pi=3.; Cylinder(double a=0,double b=0) height=a; radius=b; double GetPI() return Pi; void GetRadius() cin >> radius; void GetHeight() cin >> height; double SetRadius() return radius; double SetHeight() return height; double Volume() return Pi*radius*radius*height; double Area() return 2*Pi*radius*height+2*Pi*radius*radius; ;int main() Cylinder y; y.GetHeight(); y.GetRadius(); cout << "pi=" << y.GetPI() << "," << " " cout << "height=" << y.SetHeight() << "," << " " cout << "radius=" << y.SetRadius() << ":" ; cout << "volume=" << y.Volume() << "," <<" " cout << "area=" << y.Area() <<endl; return 0;标题:类的定义_深拷贝时 限:3000 ms内存限制:10000 K总时限:3000 ms描述:设计并实现一个动态整型数组类Vect,要求:(1)实现构造函数重载,可以根据指定的元素个数动态创建初始值为0的整型数组,或根据指定的内置整型数组动态创建整型数组。(2)设计拷贝构造函数和析构函数,注意使用深拷贝。(3)设计存取指定位置的数组元素的公有成员函数,并进行下标越界,若越界则输出“out of boundary”。(4)设计获取数组元素个数的公有成员函数。(5)设计用于输出数组元素的公有成员函数,元素之间以空格分隔,最后以换行符结束。 在main函数中按以下顺序操作:(1)根据内置的静态整型数组1,2,3,4,5构造数组对象v1,根据输入的整型数构造数组对象v2。(2)调用Vect的成员函数依次输出v1和v2的所有元素。(3)输入指定的下标及对应的整型数,设置数组对象v1的指定元素。(4)根据数组对象v1拷贝构造数组对象v3。(5)调用Vect的成员函数依次输出v1和v3的所有元素。输入:用于构建数组对象v2的元素个数用于设置数组对象v1的指定下标及元素值 输出:数组对象v1和v2的所有元素数组对象v1和v3的所有元素输入样例:106 6 输出样例:1 2 3 4 50 0 0 0 0 0 0 0 0 0out of boundary1 2 3 4 51 2 3 4 5提示:#include <iostream>using namespace std;class Vectpublic: Vect(int n=0); Vect(int arr, int n); Vect(const Vect& v); Vect(); int Size() return arrSize; int GetData(int i) if(i<0 | i>=arrSize) cout << "out of boundary" << endl; else return arrDatai; void SetData(int i, int val) if(i<0 | i>=arrSize) cout << "out of boundary" << endl; else arrDatai = val; void PrintData() if(arrSize>0) cout << arrData0; for(int i=1; i<arrSize; i+) cout << " " << arrDatai; cout << endl; private: int arrSize; int *arrData;Vect:Vect(int n):arrSize(n) arrData = new intarrSize; for(int i=0; i<arrSize; i+) arrDatai = 0; Vect:Vect(int arr, int n):arrSize(n) arrData = new intarrSize; for(int i=0; i<arrSize; i+) arrDatai = arri; Vect:Vect(const Vect& v):arrSize(v.arrSize) arrData = new intarrSize; for(int i=0; i<arrSize; i+) arrDatai = v.arrDatai; Vect:Vect() if(arrData) delete arrData; arrSize = 0; int main() int arr = 1,2,3,4,5; int n; cin >> n; Vect v1(arr,5),v2(n); v1.PrintData(); v2.PrintData(); int i, data; cin >> i >> data; v1.SetData(i, data); Vect v3(v1); v1.PrintData(); v3.PrintData(); return 0;实验四 继承和派生标题:虚基类时 限:3000 ms内存限制:10000 K总时限:3000 ms描述:(1)定义人员类Person:公有成员:姓名(Name);保护成员:性别(Gender),年龄(Age);构造函数和析构函数(2) 从人员类Person派生学生记录类StudentRecord:添加公有成员:学号(Number),班级(ClassName),添加静态公有成员:学生总人数(TotalCount);添加保护成员:平均成绩(Score);实现构造函数和析构函数。(3) 从人员类Person派生教师记录类TeacherRecord:添加公有成员:学院(CollegeName),系(DepartmentName);添加保护成员:教龄(Year);实现构造函数和析构函数。(4)从学生记录类StudentRecord和教师记录类TeacherRecord派生学生助教类TeachingAssistant:添加公有成员:辅导课程(LectureName);实现公有函数:显示人员信息(Show),屏幕打印 姓名,性别,年龄,学号,班级,学生总人数,平均成绩,学院,系,教龄,辅导课程。实现构造函数和析构函数。为检验类间结构设计是否正确,设计函数void SetName(String name)实现更改一名助教的姓名的功能。创建一个助教类的对象助教姓名 性别 年龄 学号 班级 平均成绩 学院 系 教龄 辅导课程郑七 男 22 软20101 89 信息 软件 1 数据结构显示其信息。调用更改姓名的函数,更改其姓名为“郑八”,并再次显示其信息。输入:无输出:显示构造的信息和更改前和更改后的助教信息输入样例:无输出样例:Person郑七constructedStudent郑七constructedteacher郑七constructedteachingassistant郑七constructedName:郑七 Gender:男 Age:22 Number: ClassName:软20101 TotalCount:1 Score:89 CollegeName:信息 DepartmentName:软件 Year:1 LectureName:数据结构Name:郑八 Gender:男 Age:22 Number: ClassName:软20101 TotalCount:1 Score:89 CollegeName:信息 DepartmentName:软件 Year:1 LectureName:数据结构teachingassistant郑八destructedteacher郑八destructedStudent郑八destructedPerson郑八destructed提示:各类的构造函数和析构函数都有输出。调用公有函数Show,以分别显示各个记录的人员信息。在派生助教类时,使用虚基类。#include <iostream>#include <cstring>using namespace std;class Person protected: string Gender; int Age; public: string Name; Person(string gender, int age, string name) Gender = gender; Age = age; /Name = new charstrlen(name)+1; /strcpy(Name,name); Name = name; cout<<"Person"<<Name<<"constructed"<<endl; Person() cout<<"Person"<<Name<<"destructed"<<endl; / delete Name; / delete Gender; /* void Show() cout<<"Name:"<<Name<<" "<<"Gender:"<<Gender<<" "<<"Age:"<<Age<<endl; */;class StudentRecord : virtual public Person protected: int Score; public: string Number; string ClassName; static int TotalCount; StudentRecord(string number, string classname, int score, string gender, int age, string name):Person(gender, age, name) /Number = new charstrlen(number)+1; /strcpy(Number,number); Number = number; /ClassName = new charstrlen(classname)+1; /strcpy(ClassName,classname); ClassName = classname; Score = score; +TotalCount; cout<<"Student"<<Name<<"constructed"<<endl; StudentRecord() /delete ClassName; /delete Number; -TotalCount; cout<<"Student"<<Name<<"destructed"<<endl; /* void Show() cout<<"Name:"<<Name<<" "<<"Gender:"<<Gender<<" "<<"Age:"<<Age<<" "<<"Number:"<<Number<<" "<<"ClassName:"<<ClassName<<" "<<"TotalCount:"<<TotalCount<<" "<<"Score:"<<Score<<endl; */;int StudentRecord:TotalCount = 0;class TeacherRecord : virtual public Person protected: int Year; public: string CollegeName; string DepartmentName; TeacherRecord(string collegename, string departmentname, int year, string gender, int age,string name):Person(gender, age, name) /CollegeName = new charstrlen(collegename)+1; /strcpy(CollegeName,collegename); CollegeName = collegename; /DepartmentName = new charstrlen(departmentname)+1; /strcpy(DepartmentName,departmentname); DepartmentName = departmentname; Year = year; cout<<"Teacher"<<Name<<"constructed"<<endl; TeacherRecord() /delete DepartmentName; /delete CollegeName; cout<<"Teacher"<<Name<<"destructed"<<endl; /* void Show() cout<<"Name:"<<Name<<" "<<"Gender:"<<Gender<<" "<<"Age:"<<Age<<" "<<"CollegeName:"<<CollegeName<<" "<<"DepartmentName:"<<DepartmentName<<" "<<"Year:"<<Year<<endl; */;class TeachingAssistant : public StudentRecord, public TeacherRecord public: string LectureName; TeachingAssistant(string lecturename, string number, string classname, int score, string collegename, string departmentname, int year, string gender, int age, string name):Person(gender,age,name),StudentRecord(number,classname,score,gender,age,name),TeacherRecord(collegename,departmentname,year,gender,age,name) /LectureName = new charstrlen(lecturename)+1; /strcpy(LectureName,lecturename); LectureName = lecturename; cout<<"TeachingAssistant"<<Name<<"constructed"<<endl; TeachingAssistant() /delete LectureName; cout<<"TeachingAssistant"<<Name<<"destructed"<<endl; void Show() cout<<"Name:"<<Name<<" "<<"Gender:"<<Gender<<" "<<"Age:"<<Age<<" "<<"Number:"<<Number<<" "<<"ClassName:"<<ClassName<<" "<<"TotalCount:"<<TotalCount<<" "<<"Score:"<<Score<<" "<<"CollegeName:"<<CollegeName<<" "<<"DepartmentName:"<<DepartmentName<<" "<<"Year:"<<Year<<" "<<"LectureName:"<<LectureName<<endl; void SetName(string name) Name = name; ;int main() TeachingAssistant ta("数据结构","","软20101",89,"信息","软件"