【#文档大全网# 导语】以下是®文档大全网的小编为您整理的《C、C++编程题目和代码4》,欢迎阅读!
目 录
手机服务(构造+拷贝构造+堆) ............................ 2 Point&Circle(类与对象) ................................. 9 任意鸡任意钱问题(构造与析构) ........................... 15 距离计算(友元函数) .................................. 19 样例输出 .............................................. 21 复数运算(友元函数) .................................. 22 旅馆顾客统计(静态成员)............................... 27 三维空间的点(继承) .................................. 31 圆和圆柱体计算(继承) ................................ 34 时钟模拟(继承) ....................................... 38 在职研究生(多重继承) ................................ 43 交通工具(多重继承) .................................. 49 商旅信用卡(多重继承) .................................. 55 电视机与遥控器1 ....................................... 61 图形面积(虚函数与多态)............................... 68 动物园(虚函数与多态) ................................ 73 员工工资(虚函数与多态)............................... 78 在职研究生(多重继承) ................................ 84 复数运算(运算符重载) ................................ 91 分数的加减乘除(运算符重载) ........................... 95 时钟调整(运算符前后增量) ............................. 99 字符串的加减(运算符重载) ............................ 104 食品管理系统 ......................................... 110
=============================================================================
==========================================
1 / 117下载文档可编辑
二级指针指向二维数组:
=============================================================================
==========================================
手机服务(构造+拷贝构造+堆) 时间限制: 1 Sec 内存限制: 128 MB
提交: 234 解决: 95 [提交][状态][讨论版]
题目描述
设计一个类来实现手机的功能。它包含私有属性:号码类型、号码、号码状态、停机日期;包含方法:构造、拷贝构造、打印、停机。
1、号码类型表示用户类别,只用单个字母,A表示政府,B表示企业、C表示个人
2、号码是11位整数,用一个字符串表示
3、号码状态用一个数字表示,1、2、3分别表示在用、未用、停用 4、停机日期是一个日期对象指针,在初始化时该成员指向空,该日期类包含私有属性年月日,以及构造函数和打印函数等 ----------------------------------------
5、构造函数的作用就是接受外来参数,并设置各个属性值,并输出
2 / 117下载文档可编辑
提示信息,看示例输出
6、拷贝构造的作用是复制已有对象的信息,并输出提示信息,看示例输出。
想一下停机日期该如何复制,没有停机如何复制??已经停机又如何复制??
7、打印功能是把对象的所有属性都输出,输出格式看示例
8、停机功能是停用当前号码,参数是停机日期,无返回值,操作是把状态改成停用,并停机日期指针创建为动态对象,并根据参数来设置停机日期,最后输出提示信息,看示例输出 -------------------------------------------
要求:在主函数中实现号码备份的功能,对已有的虚拟手机号的所有信息进行复制,并将号码类型改成D表示备份;将手机号码末尾加字母X
-----------------------------------------------
主函数的参考代码如下:假设号码类名为PNO(为避免代码重复,自己的代码请不要用这个类名)
PNO p1(.......) ; //创建号码并初始化 p1.Print(); //输出原号码信息 PNO p2(p1); //实现号码备份 p2.Print(); //输出备份号码信息
p1.Stop(td); //原号码停机,td是日期对象 p1.Print(); //输出停机后号码信息 输入
第一行输入t表示有t个号码
第二行输入6个参数,包括号码类型、号码、状态、停机的年、
3 / 117下载文档可编辑
月、日,用空格隔开 依次输入t行 输出
每个示例输出三行,依次输出原号码信息、备份号码信息和原号码停机后的信息
每个示例之间用短划线(四个)分割开,看示例输出 样例输入 2
A 1 2015 1 1 B 2 2012 12 12 样例输出
Construct a new phone 类型=机构||号码=||State=在用 Construct a copy of phone 类型=备份||号码=X||State=在用 Stop the phone
类型=机构||号码=||State=停用 ||停机日期=2015.1.1 ----
Construct a new phone 类型=企业||号码=||State=未用 Construct a copy of phone 类型=备份||号码=X||State=未用
4 / 117下载文档可编辑
Stop the phone
类型=企业||号码=||State=停用 ||停机日期=2012.12.12 ----
#include #include using namespace std;
class Date {
private:
int year,month,day; public:
Date(int y,int m,int d):year(y),month(m),day(d) {}
int gety() {return year;} int getm() {return month;} int getd() {return day;} void print() {} };
class phone {
private:
char type; string number;
5 / 117下载文档可编辑
int status; Date *date; public:
phone(char t,string n,int s):type(t),number(n),status(s) {
cout<<"Construct a new phone "<
if(type=='A')
cout<<"类型=机构||"; else if(type=='B')
cout<<"类型=企业||";
cout<<"号码="<
if(status==1)
cout<<"||State=在用"< else if(status==2)
cout<<"||State=未用"< else if(status==3)
cout<<"||State=停用"< }
phone(phone &s) {
6 / 117下载文档可编辑
type=s.type; status=s.status; number=s.number;
cout<<"Construct a copy of phone "<
cout<<"类型=备份||号码="< if(status==1)
cout<<"||State=在用"< else if(status==2)
cout<<"||State=未用"< else if(status==3)
cout<<"||State=停用"< }
void stop(Date &s) {
cout<<"Stop the phone "< if(type=='A')
cout<<"类型=机构||"; else if(type=='B')
cout<<"类型=企业||";
cout<<"号码="<
cout<<"||State=停用 ||停机日期="
7 / 117下载文档可编辑
< < < cout<<"----"< } };
int main() {
int year,month,day,status,t; char type; string number; cin>>t; while(t--) {
cin>>type>>number>>status>>year>>month>>day; phone sb1(type,number,status); Date sb2(year,month,day); phone sb3(sb1); sb1.stop(sb2); } }
=============================================================================
==========================================
8 / 117下载文档可编辑
Point&Circle(类与对象)
时间限制: 1 Sec 内存限制: 128 MB
提交: 161 解决: 103 [提交][状态][讨论版]
题目描述
类Point是我们写过的一个类,类Circle是一个新的类,Point作为其成员对象,请完成类Circle的成员函数的实现。
在主函数中生成一个圆和若干个点,判断这些点与圆的位置关系,如果点在圆内(包括在圆的边上),输出“inside”,否则输出"outside";然后移动圆心的位置,再次判断这些点与圆的位置关系。 输入
9 / 117下载文档可编辑
圆的x坐标 y坐标 半径 点的个数n
第一个点的x坐标 y坐标 第二个点的x坐标 y坐标 ......
第n个点的x坐标 y坐标 圆心移动到的新的x坐标 y坐标 输出
第一个点与圆的关系 第二个点与圆的关系 .......
第n个点与圆的关系
after move the centre of circle 圆心移动后第一个点与圆的关系 圆心移动后第二个点与圆的关系 .....
圆心移动后第n个点与圆的关系 样例输入 0 0 5 4
10 / 117下载文档可编辑
1 1 2 2 5 0 -6 0 -1 0 样例输出 inside inside inside outside
after move the centre of circle: inside inside outside inside
#include #include using namespace std; class point {
private:
double x,y; public:
11 / 117下载文档可编辑
point() {}
point (double x_value,double y_value) {} double getx() {return x;} double gety() {return y;}
void setxy(double x1,double y1) {x=x1,y=y1;} void set(double x_value) {x=x_value;} void sety(double y_value) {y=y_value;} double getdisto(point &p); ~point() {} };
double point::getdisto(point &p) {
double x1,y1,dis,n; x1=p.getx(); y1=p.gety();
n=(x-x1)*(x-x1)+(y-y1)*(y-y1); dis=sqrt(n); return dis; }
class circle {
private:
point center; double radius; public:
12 / 117下载文档可编辑
circle() {}
circle(double x1,double y1,double r):radius(r) { center.setxy(x1,y1); } double getarea() {}
void movecenterto(double x1,double y1) { center.setxy(x1,y1);}
int contain(point &p); ~circle() {} };
int circle::contain(point &p) {
double dis;
dis=p.getdisto(center); if(dis<=radius) return 1; return 0; }
int main() {
double a,b,r,x,y,xx,yy; int i,n,k; cin>>a>>b>>r>>n; circle fuck(a,b,r); point *sb;
13 / 117下载文档可编辑
sb=new point[n]; for(i=0;i {
cin>>x>>y;
sb[i].setxy(x,y); k=fuck.contain(sb[i]); if(k==1)
cout<<"inside"< else
cout<<"outside"< }
cin>>xx>>yy;
fuck.movecenterto(xx,yy);
cout<<"after move the centre of circle:"< for(i=0;i {
k=fuck.contain(sb[i]); if(k==1)
cout<<"inside"< else
cout<<"outside"< } }
=============================================================================
==========================================
14 / 117下载文档可编辑
任意鸡任意钱问题(构造与析构) 时间限制: 1 Sec 内存限制: 128 MB
提交: 179 解决: 130 [提交][状态][讨论版]
题目描述
百鸡百钱问题描述为:用100元钱买100只鸡,已知每只公鸡5元,每只母鸡3元,3只小鸡1元,问能买多少只公鸡、母鸡和小鸡?试将该类问题用一个类来表示,百鸡百钱问题只是这个类如CChickProblem的一个实例,假设各种鸡的价格不变,类中数据成员有总钱数、要买的总的鸡数、能买到的母鸡、小鸡和公鸡的数量。成员函数有构造和析构函数,求问题解的函数findSolution,打印问题解的函数printSolution。(要求用动态数组保存问题的所有解) 编写程序求解该类问题。 输入
测试数据的组数 t 第一组 鸡数 钱数 第二组 鸡数 钱数 ....... 输出 第一组解个数
第一组第一个解公鸡数 母鸡数 小鸡数 第一组第二个解公鸡数 母鸡数 小鸡数 .........
15 / 117下载文档可编辑
第二组解个数
第二组第一个解公鸡数 母鸡数 小鸡数 第二组第二个解公鸡数 母鸡数 小鸡数 ......... 样例输入 2 100 100 200 200 样例输出 3 4 18 78 8 11 81 12 4 84 7 4 43 153 8 36 156 12 29 159 16 22 162 20 15 165 24 8 168 28 1 171
16 / 117下载文档可编辑
#include using namespace std; class fuck {
private:
int qian,ji,x,y,z; public:
fuck(int q,int j):qian(q),ji(j) {} ~fuck() { } int *find();
void print(int *sb); };
int *fuck::find() {
int i,j,k,o,p,q,n=1,m=0; o=qian/5; p=qian/3; q=qian*3; int *sb;
sb=new int[100]; for(i=1;i
for(j=1;j
for(k=0;k
17 / 117下载文档可编辑
if(i+j+k==ji && 5*i+3*j+k/3==qian)
{
m+=3; sb[n]=i; n++; sb[n]=j; n++; sb[n]=k; n++; } sb[0]=m; return sb; }
void fuck::print(int *sb) {
int i,n; n=sb[0];
cout< for(i=1;i<=n;i++) { if(i%3==0)
cout< else
18 / 117下载文档可编辑
cout<
} }
int main() {
int qian,ji,t; cin>>t; while(t--) {
cin>>qian>>ji; fuck sb(qian,ji); int *a=sb.find(); sb.print(a); } }
=============================================================================
==========================================
距离计算(友元函数)
时间限制: 1 Sec 内存限制: 128 MB
提交: 536 解决: 444 [提交][状态][讨论版]
题目描述
19 / 117下载文档可编辑
Point类的基本形式如下:
请完成如下要求: 1.实现Point类;
2.为Point类增加一个友元函数double Distance(Point &a, Point &b),用于计算两点之间的距离。直接访问Point对象的私有数据进行计算。 3.编写main函数,输入两点坐标值,计算两点之间的距离。 输入
第1行:输入需计算距离的点对的数目
第2行开始,每行依次输入两个点的x和y坐标 输出
每行依次输出一组点对之间的距离(结果直接取整数部分,不四舍五入 ) 样例输入 2 1 0 2 1 2 3 2 4
20 / 117下载文档可编辑
样例输出 1 1
#include #include using namespace std; class point {
private:
double x,y; public:
point(double xx,double yy):x(xx),y(yy) {} friend double distence(point &a,point &b); };
double distence(point &a,point &b) {
double m,n;
m=(a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y); n=sqrt(m); return n; }
int main() {
int t;
21 / 117下载文档可编辑
double x1,y1,x2,y2; cin>>t; while(t--) {
cin>>x1>>y1>>x2>>y2; point aa(x1,y1),bb(x2,y2);
cout< } }
=============================================================================
==========================================
复数运算(友元函数)
时间限制: 1 Sec 内存限制: 128 MB
提交: 512 解决: 397 [提交][状态][讨论版]
题目描述 复数类的声明如下:
22 / 117下载文档可编辑
要求如下:
1. 实现复数类和友元函数addCom和outCom。
2. 参考addCom函数为复数类增加一个友元函数minusCom,用于实现两个复数的减法 3. 在main函数中,通过友元函数,实现复数的加减法和复数的输出。 输入
第1行:第1个复数的实部和虚部
第2行:需进行运算的次数,注意:是连续运算。具体结果可参考样例
23 / 117下载文档可编辑
第3行开始,每行输入运算类型,以及参与运算的复数的实部与虚部。“+”表示复数相加,“-”表示复数相减。 输出
每行输出复数运算后的结果,复数输出格式为“(实部,虚部)”。 样例输入 10 10 3 + 20 10 - 15 5 + 5 25 样例输出 (30,20) (15,15) (20,40)
#include using namespace std; class Complex {
private:
double real; double imag; public:
Complex() {}
24 / 117下载文档可编辑
Complex(double r,double i):real(r),imag(i) {} void set(double r,double i) {real=r;imag=i;} friend Complex add(Complex c1,Complex c2); friend Complex minuscom(Complex c1,Complex c2); friend void out(Complex c); };
Complex add(Complex c1,Complex c2) {
Complex c3;
c3.real=c1.real+c2.real; c3.imag=c1.imag+c2.imag; return c3; }
Complex minuscom(Complex c1,Complex c2) {
Complex c3;
c3.real=c1.real-c2.real; c3.imag=c1.imag-c2.imag; return c3; }
void out(Complex c) {
cout<<"("< }
int main()
25 / 117下载文档可编辑
{
int n,i=0; char ch;
double r1,i1,r2,i2; cin>>r1>>i1; Complex a(r1,i1); cin>>n;
Complex *sb=new Complex[n]; while(n--) {
cin>>ch>>r2>>i2; sb[i].set(r2,i2); if(ch=='+')
a=add(a,sb[i]); else if(ch=='-')
a=minuscom(a,sb[i]); out(a); } }
=============================================================================
========================================== =============================================================================
==========================================
26 / 117下载文档可编辑
旅馆顾客统计(静态成员) 时间限制: 1 Sec 内存限制: 128 MB
提交: 429 解决: 214 [提交][状态][讨论版]
题目描述
编写程序,统计某旅馆住宿客人的总数和收入总额。要求输入客人的姓名,输出客人编号(2015+顺序号,顺序号4位,如第1位为0001,第2位为0002,依此类推)、姓名、总人数以及收入总额。总人数和收入总额用静态成员,其他属性采用普通的数据成员。旅馆类声明如下:
输入
27 / 117下载文档可编辑
第1行:输入旅馆单个顾客房租
第2行开始,依次输入顾客姓名,0表示输入结束。 输出
每行依次输出顾客信息和当前旅馆信息。包括顾客姓名,顾客编号,旅馆当前总人数,旅馆当前总收入。 样例输入 150
张三 李四 王五 0 样例输出
张三 20150001 1 150 李四 20150002 2 300 王五 20150003 3 450 #include #include using namespace std; class hotel {
private:
static int custnum; static float earning; static float rent; char *name; int id;
28 / 117下载文档可编辑
public:
hotel(char *a); ~hotel() {}
void set_num() {custnum=1;} void set_id() {id=20150001;}
void increase_custnum() {custnum++;} void set_earning() {earning=rent;} void set_rent(float r1) {rent=r1;} void increase_id() {id++;}
void increase_earning() {earning=earning+rent;} void display(); }; ///
int hotel::custnum=0; float hotel::earning=0; float hotel::rent=0; ///
hotel::hotel(char *a) {
name=new char[50]; strcpy(name,a); }
void hotel::display() {
29 / 117下载文档可编辑
cout<"< }
int main() {
float r,e;
int num,id1,i=0,k=0; char n[50]; cin>>r; while(1) {
cin>>n; if(n[0]=='0') break; hotel sb(n); if(k==0) {
sb.set_num(); sb.set_rent(r); sb.set_earning(); sb.set_id(); } else {
30 / 117下载文档可编辑
sb.increase_custnum(); sb.increase_id(); sb.increase_earning(); }
sb.display(); i++; k++;
} }
=============================================================================
==========================================
三维空间的点(继承)
时间限制: 1 Sec 内存限制: 128 MB
提交: 562 解决: 509 [提交][状态][讨论版]
题目描述
定义一个平面上的点C2D类,它含有一个getDistance()的成员函数,计算该点到原点的距离;从C2D类派生出三维空间的点C3D类,它的getDistance()成员函数计算该点到原点的距离。试分别生成一个C2D和C3D的对象,计算它们到原点的距离。
三维空间的两点(x, y, z)和(x1, y1, z1)的距离公式如下: [(x-x1)^2+(y-y1)^2+(z-z1)^2]^(1/2) 输入
31 / 117下载文档可编辑
第一行二维坐标点位置 第二行三维坐标点位置1 第三行三维坐标点位置2 输出
第一行二维坐标点位置到原点的距离 第二行三维坐标点位置1到原点的距离 第三行三维坐标点位置2到原点的距离
第四行三维坐标点位置2赋值给二维坐标点变量后,二维坐标点到原点的距离 样例输入 3 4 3 4 5 6 8 8 样例输出 5 7.07107 12.8062 10
#include #include using namespace std; class C2D {
32 / 117下载文档可编辑
protected:
double x,y; public:
C2D() {}
C2D(double _x,double _y):x(_x),y(_y) {} ~C2D() {}
double getDistance() {
double m,n;
m=pow(x,2)+pow(y,2); n=sqrt(m); return n; } };
////////////////////////////// class C3D:public C2D {
protected:
double z; public:
C3D() {}
C3D(double _x,double _y,double _z):C2D(_x,_y),z(_z) {}
~C3D() {}
double getDistance()
33 / 117下载文档可编辑
{
double m,n;
m=pow(x,2)+pow(y,2)+pow(z,2); n=sqrt(m); return n; } };
int main() {
double x,y,x1,y1,z1,x2,y2,z2; cin>>x>>y>>x1>>y1>>z1>>x2>>y2>>z2; C2D sb1(x,y);
C3D sb2(x1,y1,z1),sb3(x2,y2,z2); cout< cout< cout< C2D sb4(sb3);
cout< }
=============================================================================
==========================================
圆和圆柱体计算(继承)
时间限制: 1 Sec 内存限制: 128 MB
提交: 721 解决: 502 [提交][状态][讨论版]
34 / 117下载文档可编辑
题目描述
定义一个CPoint点类,包含数据成员x,y(坐标点)。
以CPoint为基类,派生出一个圆形类CCircle,增加数据成员r(半径)和一个计算圆面积的成员函数。
再以CCircle做为直接基类,派生出一个圆柱体类CCylinder,增加数据成员h(高)和一个计算体积的成员函数。
生成圆和圆柱体对象,调用成员函数计算面积或体积并输出结果。 输入
输入圆的圆心位置、半径 输入圆柱体圆心位置、半径、高 输出
输出圆的圆心位置 半径 输出圆面积
输出圆柱体的圆心位置 半径 高 输出圆柱体体积 样例输入 0 0 1 1 1 2 3 样例输出 Circle:(0,0),1 Area:3.14
35 / 117下载文档可编辑
Cylinder:(1,1),2,3 Volume:37.68
#include using namespace std; class CPoint {
protected:
double x,y; public:
CPoint() {}
CPoint(double _x,double _y):x(_x),y(_y) {} ~CPoint() {} };
class CCircle:public CPoint {
protected:
double r; public:
CCircle(double xx,double yy,double _r):CPoint(xx,yy),r(_r) {} ~CCircle() {} double Area() {
return 3.14*r*r; }
36 / 117下载文档可编辑
void printf() {
cout<<"Circle:("< cout<<"Area:"< } };
class CCylinder:public CCircle {
protected:
double h; public:
CCylinder(double x2,double y2,double r1,double _h):CCircle(x2,y2,r1),h(_h) {} ~CCylinder() {} double Volume() {
return 3.14*r*r*h; }
void printf() {
cout<<"Cylinder:("<<
cout<<"Volume:"< } };
37 / 117下载文档可编辑
int main() {
double x,y,r,x1,y1,r1,h; cin>>x>>y>>r>>x1>>y1>>r1>>h; CCircle sb1(x,y,r);
CCylinder sb2(x1,y1,r1,h); sb1.printf(); sb2.printf(); }
=============================================================================
==========================================
时钟模拟(继承)
时间限制: 1 Sec 内存限制: 128 MB
提交: 755 解决: 365 [提交][状态][讨论版]
题目描述
定义计数器类,包含保护数据成员value,公有函数increment计数加1。
定义循环计算器继承计数器类,增加私有数据成员:最小值min_value,max_value,
重写公有函数increment,使得value在min_value~max_value区间内循环+1。
定义时钟类,数据成员是私有循环计数器对象小时hour、分钟minute、秒second,公有函数time(int s)计算当前时间经过s秒之后的时间,即hour,minute,second的新value值。
38 / 117下载文档可编辑
定义时钟类对象,输入当前时间和经过的秒数,调用time函数计算新时间。
根据题目要求,增加必要的构造函数、析构函数和其他所需函数。 输入
第一行测试次数n
2行一组,第一行为当前时间(小时 分钟 秒),第二行为经过的秒数。 输出 输出n行
每行对应每组当前时间和经过秒数后计算得到的新时间(小时:分钟:秒)。 样例输入 2 8 19 20 20 23 30 0 1801 样例输出 8:19:40 0:0:1
#include using namespace std; class Counter
39 / 117下载文档可编辑
{
protected:
int value; public:
Counter(int va):value(va) {} int increment() {
value++; if(value==60) value=0; return value; } };
class Calculater:public Counter {
private:
int min_value; int max_value; public:
Calculater(int v,int minv,int
maxv):Counter(v),min_value(minv),max_value(maxv) {} int increment() {
value++;
if(value==max_value)
40 / 117下载文档可编辑
value=0; return value; }
int GetValue() { return value; } };
class Clock {
private:
Calculater hour,minute,second; public:
Clock(int _h,int _m,int
_s):hour(_h,0,24),minute(_m,0,60),second(_s,0,60) {} void time(int n) {
int h,m,s,i; h=hour.GetValue(); m=minute.GetValue(); s=second.GetValue(); for(i=0;i {
s=second.increment(); if(s==0) {
41 / 117下载文档可编辑
m=minute.increment();
if(m==0)
h=hour.increment();
} }
cout< } };
int main() {
int hh,mm,ss,nn,t;
// freopen("c:\\123.txt","r",stdin); cin>>t; while(t--) {
cin>>hh>>mm>>ss>>nn; Clock sb(hh,mm,ss); sb.time(nn); } }
=============================================================================
==========================================
42 / 117下载文档可编辑
在职研究生(多重继承)
时间限制: 1 Sec 内存限制: 128 MB
提交: 1332 解决: 470 [提交][状态][讨论版]
题目描述
1、建立如下的类继承结构:
1) 定义一个人员类CPeople,其属性(保护类型)有:姓名、性别、年龄; 2) 从CPeople类派生出学生类CStudent,添加属性:学号和入学成绩; 3) 从CPeople类再派生出教师类CTeacher,添加属性:职务、部门; 4) 从CStudent和CTeacher类共同派生出在职研究生类CGradOnWork,添加属性:研究方向、导师; 2、分别定义以上类的构造函数、输出函数print及其他函数(如需要)。 3、在主函数中定义各种类的对象,并测试之。 输入
第一行:姓名性别年龄 第二行:学号成绩 第三行:职务部门 第四行:研究方向导师 输出
第一行:People:
43 / 117下载文档可编辑
第二行及以后各行:格式见Sample 样例输入 wang-li m 23 2012100365 92.5 assistant computer robot zhao-jun 样例输出 People: Name: wang-li Sex: m Age: 23 Student: Name: wang-li Sex: m Age: 23
No.: 2012100365 Score: 92.5 Teacher: Name: wang-li Sex: m Age: 23
Position: assistant Department: computer
44 / 117下载文档可编辑
GradOnWork: Name: wang-li Sex: m Age: 23
No.: 2012100365 Score: 92.5
Position: assistant Department: computer Direction: robot Tutor: zhao-jun #include #include using namespace std; class CPeople {
protected:
string name,sex; int sui; public:
CPeople() {}
CPeople(string n,string se,int su):name(n),sex(se),sui(su) {}
void print()
45 / 117下载文档可编辑
{
cout<<"People:"< cout<<"Name: "< cout<<"Sex: "< cout<<"Age: "< cout< } };
////////////////////
class CStudent:virtual public CPeople {
protected:
string no; float gpa; public:
CStudent(string n,float g,string na,string se,int su):CPeople(na,se,su),no(n),gpa(g) {} void print() {
cout<<"Student:"< cout<<"Name: "< cout<<"Sex: "< cout<<"Age: "< cout<<"No.: "< cout<<"Score: "<
46 / 117下载文档可编辑
cout< } };
//////////////////
class CTeacher:virtual public CPeople {
protected:
string zhiwei,bumen; public:
CTeacher(string zhi,string bu,string na,string se,int su):CPeople(na,se,su),zhiwei(zhi),bumen(bu) {}
void print() {
cout<<"Teacher:"< cout<<"Name: "< cout<<"Sex: "< cout<<"Age: "<
cout<<"Position: "< cout<<"Department: "< cout< } };
///////////////////
47 / 117下载文档可编辑
class CGradOnWork:public CStudent,public CTeacher {
protected:
string fangxiang,daoshi; public:
CGradOnWork(string n,string se,int su,string na,float g,string zhi,string bu,string fang,string
dao):CStudent(n,g,na,se,su),CTeacher(zhi,bu,na,se,su),CPeople(na,se,su),fangxiang(fang),daoshi(dao) {}
void print() {
cout<<"GradOnWork:"< cout<<"Name: "< cout<<"Sex: "< cout<<"Age: "< cout<<"No.: "< cout<<"Score: "< cout<<"Position: "< cout<<"Department: "< cout<<"Direction: "< cout<<"Tutor: "< } };
//////////////////// int main()
48 / 117下载文档可编辑
{
string
cname,csex,cno,czhiwei,cbumen,cfangxiang,cdaoshi; int csui; float cgpa;
cin>>cname>>csex>>csui>>cno>>cgpa>>czhiwei>>cbumen>>cfangxiang>>cdaoshi;
CGradOnWork
sb(cno,csex,csui,cname,cgpa,czhiwei,cbumen,cfangxiang,cdaoshi);
sb.CPeople::print(); sb.CStudent::print(); sb.CTeacher::print(); sb.CGradOnWork::print(); return 0; }
=============================================================================
==========================================
交通工具(多重继承)
时间限制: 1 Sec 内存限制: 128 MB
提交: 734 解决: 443 [提交][状态][讨论版]
题目描述
1、建立如下的类继承结构:
49 / 117下载文档可编辑
1)一个车类CVehicle作为基类,具有max_speed、speed、weight等数据成员,display()等成员函数
2)从CVehicle类派生出自行车类CBicycle,添加属性:高度height
3)从CVehicle类派生出汽车类CMotocar,添加属性:座位数seat_num
4)从CBicycle和CMotocar派生出摩托车类CMotocycle
2、分别定义以上类的构造函数、输出函数display及其他函数(如需要)。 3、在主函数中定义各种类的对象,并测试之,通过对象调用display函数产生输出。 输入
第一行:最高速度 速度 重量 第二行:高度 第三行:座位数 输出
第一行:Vehicle: 第二行及以后各行:格式见Sample 样例输入 100 60 20 28 2
样例输出 Vehicle: max_speed:100 speed:60
50 / 117下载文档可编辑
weight:20 Bicycle: max_speed:100 speed:60 weight:20 height:28 Motocar: max_speed:100 speed:60 weight:20 seat_num:2 Motocycle: max_speed:100 speed:60 weight:20 height:28 seat_num:2
#include #include using namespace std; class CVehicle {
protected:
51 / 117下载文档可编辑
int max_speed,speed,weight; public:
CVehicle(int ms,int s,int w):max_speed(ms),speed(s),weight(w) {}
~CVehicle() {} void display() {
cout<<"Vehicle:"<
cout<<"max_speed:"< cout<<"speed:"< cout<<"weight:"< cout< } };
/////////////////////////
class CBicycle:virtual public CVehicle {
protected:
int height; public:
CBicycle(int h,int ms,int s,int w):height(h),CVehicle(ms,s,w) {}
~CBicycle() {}
52 / 117下载文档可编辑
void display() {
cout<<"Bicycle:"<
cout<<"max_speed:"< cout<<"speed:"< cout<<"weight:"< cout<<"height:"< cout< } };
////////////////////////////
class CMotocar:virtual public CVehicle {
protected:
int seat_num; public:
CMotocar(int sn,int ms,int s,int w):seat_num(sn),CVehicle(ms,s,w) {}
~CMotocar() {} void display() {
cout<<"Motocar:"<
cout<<"max_speed:"< cout<<"speed:"<
53 / 117下载文档可编辑
cout<<"weight:"< cout<<"seat_num:"< cout< } };
////////////////////////////
class CMotocycle:public CBicycle,public CMotocar {
protected: public:
CMotocycle(int h,int sn,int ms,int s,int
w):CVehicle(ms,s,w),CBicycle(h,ms,s,w),CMotocar(sn,ms,s,w) {}
~CMotocycle() {} void display() {
cout<<"Motocycle:"<
cout<<"max_speed:"< cout<<"speed:"< cout<<"weight:"< cout<<"height:"< cout<<"seat_num:"< } };
54 / 117下载文档可编辑
/////////////////// int main() {
int max_speed,speed,weight,height,seat_num; cin>>max_speed>>speed>>weight>>height>>seat_num; CMotocycle
sb(height,seat_num,max_speed,speed,weight); sb.CVehicle::display(); sb.CBicycle::display(); sb.CMotocar::display(); sb.CMotocycle::display(); return 0; }
=============================================================================
==========================================
商旅信用卡(多重继承)
时间限制: 1 Sec 内存限制: 128 MB
提交: 1299 解决: 348 [提交][状态][讨论版]
题目描述
某旅游网站(假设旅程网)和某银行推出旅游综合服务联名卡—旅程信用卡,兼具旅程会员卡和银行信用卡功能。
旅程会员卡,有会员卡号(int)、旅程积分(int),通过会员卡下订单,按订单金额累计旅程积分。
信用卡,有卡号(int)、姓名(char [10])、额度(int)、账单金
55 / 117下载文档可编辑
额(float)、信用卡积分(int)。------请注意数据类型
信用卡消费金额m,若超额度,则不做操作;否则,账单金额+m,信用卡积分按消费金额累加。
信用卡退款m,账单金额-m,信用卡积分减去退款金额。
通过旅程信用卡在旅程网下单,旅程积分和信用卡积分双重积分(即旅程积分和信用卡积分同时增加)。 旅程信用卡可以按 旅程积分:信用卡积分= 1:2 的比例将信用卡积分兑换为旅程积分。
初始假设信用卡积分、旅程积分、账单金额为0。
根据上述内容,定义旅程会员卡类、信用卡类,从两者派生出旅程信用卡类并定义三个类的构造函数和其它所需函数。
生成旅程信用卡对象,输入卡信息,调用对象成员函数完成旅程网下单、信用卡刷卡、信用卡退款、信用卡积分兑换为旅程积分等操作。 输入
第一行:输入旅程会员卡号 信用卡号 姓名 额度 第二行:测试次数n
第三行到第n+2行,每行:操作 金额或积分 o m(旅程网下订单,订单金额m) c m(信用卡消费,消费金额m) q m (信用卡退款,退款金额m)
t m(积分兑换,m信用卡积分兑换为旅程积分) 输出
输出所有操作后旅程信用卡的信息:
56 / 117下载文档可编辑
旅程号 旅程积分
信用卡号 姓名 账单金额 信用卡积分 样例输入
1000 2002 lili 3000 4 o 212.5 c 300 q 117.4 t 200 样例输出 1000 312
2002 lili 395.1 195 #include #include using namespace std; ////////////////////////// class huiyuan {
protected:
int no1,jifen1; public:
huiyuan(int n):no1(n) { jifen1=0; }
57 / 117下载文档可编辑
~huiyuan() {} };
//////////////////////////// class xin {
protected:
int no2,edu,jifen2; float zhangdan; string name; public:
xin(int n,int e,string na):no2(n),edu(e),name(na) { jifen2=0; zhangdan=0; } ~xin() {}
void tuikuan(float m) {
if(m>edu || m<0); else {
zhangdan-=m; jifen2-=int(m); edu+=int(m); } }
void xiaofei(float m) {
58 / 117下载文档可编辑
if(m>edu || m<0); else {
zhangdan+=m; jifen2+=int(m); edu-=int(m); } } };
////////////////////////////////
class lvcheng:virtual public huiyuan,virtual public xin { public:
lvcheng(int n1,int n2,int e,string na):huiyuan(n1),xin(n2,e,na)
{jifen1=0; jifen2=0; zhangdan=0; } ~lvcheng() {}
void xiadan(float m) {
if(m>edu || m<0); else {
jifen1+=int(m); jifen2+=int(m);
59 / 117下载文档可编辑
zhangdan+=m; edu-=int(m); } }
void duihuan(float m)
{ jifen2=jifen2-int(m); jifen1=jifen1+0.5*int(m); } void print() {
cout<
cout<"< } };
int main() {
char ch;
int no1,no2,jifen1,edu,jifen2,n; float zhandgan,m1; string name;
cin>>no1>>no2>>name>>edu; lvcheng sb(no1,no2,edu,name); // sb.print(); cin>>n;
60 / 117下载文档可编辑
while(n--) {
cin>>ch>>m1; /* if(m1>edu || m1<0) continue;*/ if(ch=='o')
sb.lvcheng::xiadan(m1); if(ch=='c')
sb.xin::xiaofei(m1); if(ch=='q')
sb.xin::tuikuan(m1); if(ch=='t')
sb.lvcheng::duihuan(m1); // sb.print(); }
sb.print(); }
=============================================================================
==========================================
电视机与遥控器1
时间限制: 1 Sec 内存限制: 128 MB
提交: 130 解决: 88 [提交][状态][讨论版]
题目描述
61 / 117下载文档可编辑
62 / 117下载文档可编辑
以上是电视机类与遥控器类的定义与部分实现以及主函数,请完善电视机类,并将遥控器类设为电视机类的友元类,注意,不能改变主函数。 输入
测试数据的组数 t
第一组数据的 state volume channel 第二组数据的 state volume channel ...... 输出
使用遥控器调整后的状态 样例输入
63 / 117下载文档可编辑
4 0 1 1 1 20 145 1 0 1 1 10 16 样例输出 off 1 1 off 1 1 on 20 1 on 18 144 on 1 2 on 0 145 on 11 17 on 9 15
#include using namespace std; class TV {
int state; int volumn; int channel;
friend class Remote; public:
64 / 117下载文档可编辑
TV() { state=0; volumn=0; channel=1; }
TV(int s,int v,int c):state(s),volumn(v),channel(c) {}
void onoff() { state=state==0?1:0; } int is_on() const {return state;} int vol_up() {
if(state==1 && volumn<20) {
volumn++; return 1; }
return 0; }
int vol_down() {
if(state==1 && volumn>0) {
volumn--; return 1; }
return 0; }
void chan_up() {
65 / 117下载文档可编辑
if(state)
channel++; if(channel==146) channel=1; }
void chan_down() {
if(state)
channel--; if(channel==0) channel=145; }
void display()const {
if(state)
cout<<"on "; else
cout<<"off ";
cout< } };
class Remote {
int mode;
66 / 117下载文档可编辑
public:
Remote(int m):mode(m) {}
int vol_up(TV &t) {return t.vol_up();} int vol_down(TV &t) {return t.vol_down();} void onoff(TV &t) {t.onoff();} void chan_up(TV &t) {t.chan_up();} void chan_down(TV &t) {t.chan_down();} void setchan(TV &t,int c) {t.channel=c;} void disp(TV &t) {t.display();} };
int main() {
int t,state,vol,channel; // freopen("c:\\123.txt","r",stdin); cin>>t; while(t--) {
cin>>state>>vol>>channel;
TV *tv=new TV(state,vol,channel); Remote *r=new Remote(1); r->vol_up(*tv); r->chan_up(*tv); r->disp(*tv); r->vol_down(*tv);
67 / 117下载文档可编辑
r->vol_down(*tv); r->chan_down(*tv); r->chan_down(*tv); r->disp(*tv); delete tv,r; } }
=============================================================================
==========================================
图形面积(虚函数与多态) 时间限制: 1 Sec 内存限制: 128 MB
提交: 491 解决: 431 [提交][状态][讨论版]
题目描述
编写一个程序,定义抽象基类Shape,在Shape类中定义虚函数Area();由它派生出3个派生类:Circle(圆形)、Square(正方形)、Rectangle(矩形)。用虚函数分别计算几种图形面积。 1、要求输出结果保留两位小数。
2、要求用基类指针数组,使它每一个元素指向一个派生类对象。 输入
测试数据的组数 t
第一组测试数据中圆的半径 第一组测测试数据中正方形的边长
68 / 117下载文档可编辑
第一组测试数据中矩形的长、宽 .......
第 t 组测试数据中圆的半径 第 t 组测测试数据中正方形的边长 第 t 组测试数据中矩形的长、宽 输出
第一组数据中圆的面积 第一组数据中正方形的面积 第一组数据中矩形的面积 ......
第 t 组数据中圆的面积 第 t 组数据中正方形的面积 第 t 组数据中矩形的面积 样例输入 2 1.2 2.3 1.2 2.3 2.1 3.2 1.23 2.12
69 / 117下载文档可编辑
样例输出 4.52 5.29 2.76 13.85 10.24 2.61
#include #include using namespace std; class Shape { public:
virtual double Area()=0; };
class Circle:public Shape {
protected:
double r; public:
Circle() {}
Circle(double _r):r(_r) {} ~Circle() {}
virtual double Area()
70 / 117下载文档可编辑
{
return 3.14*r*r; } };
class Square:public Shape {
protected:
double l; public:
Square() {}
Square(double _l):l(_l) {} ~Square() {}
virtual double Area() {
return l*l; } };
class Rectangle:public Shape {
protected:
double length,width; public:
Rectangle() {}
Rectangle(double l,double w):length(l),width(w) {} ~Rectangle() {}
71 / 117下载文档可编辑
virtual double Area() {
return length*width; } };
int main() {
int t;
double r,l,length,width; Shape *a[3]; // a=new Shape[3]; // Circle sb1; // Square sb2; // Rectangle sb3; /* a[0]=&sb1; a[1]=&sb2; a[2]=&sb3;*/ cin>>t; while(t--) {
cin>>r>>l>>length>>width; Circle sb1(r); Square sb2(l);
Rectangle sb3(length,width); a[0]=&sb1;
72 / 117下载文档可编辑
a[1]=&sb2; a[2]=&sb3; // cout.ios::fixed;
cout<(2)<Area()<
cout<Area()< cout<Area()< } }
=============================================================================
==========================================
动物园(虚函数与多态)
时间限制: 1 Sec 内存限制: 128 MB
提交: 788 解决: 328 [提交][状态][讨论版]
题目描述
某个动物园内,有老虎、狗、鸭子和猪等动物,动物园的管理员为每个动物都起了一个名字,并且每个动物都有年龄、体重等信息。每到喂食的时候,不同的动物都会叫唤(speak)。每种动物的叫唤声均不同,老虎的叫唤声是“AOOO”,狗的叫唤声是“WangWang”,鸭子的叫唤声是“GAGA”,猪的叫唤声是“HENGHENG”。 定义一个Animal的基类,Animal类有函数Speak(),并派生老虎、狗、鸭子和猪类,其能发出不同的叫唤声(用文本信息输出叫声)。 编写程序,输入动物名称、名字、年龄,让动物园内的各种动物叫唤。
73 / 117下载文档可编辑
要求:只使用一个基类指针,指向生成的对象并调用方法。 输入 测试案例的个数
第一种动物的名称 名字 年龄 第二种动物的名称 名字 年龄 ...... 输出
输出相应动物的信息
如果不存在该种动物,输出There is no 动物名称 in our Zoo. ,具体输出参考样例输出 样例输入 4
Tiger Jumpjump 10 Pig Piglet 4 Rabbit labi 3 Duck tanglaoya 8 样例输出
Hello,I am Jumpjump,AOOO. Hello,I am Piglet,HENGHENG. There is no Rabbit in our Zoo. Hello,I am tanglaoya,GAGA. #include
74 / 117下载文档可编辑
#include using namespace std;
class
animal //typeimal {
protected:
string name; int age; int weight; public:
animal(string n,int a):name(n),age(a) {}
~animal() {}
virtual void speak()=0; };
class tiger:public animal //tiger { public:
tiger(string n,int a):animal(n,a) {} void virtual speak() {
cout<<"Hello,I am "< } };
class dog:public animal //dog
75 / 117下载文档可编辑
{ public:
dog(string n,int a):animal(n,a) {} ~dog() {}
virtual void speak() {
cout<<"Hello,I am "< } };
class duck:public animal //duck { public:
duck(string n,int a):animal(n,a) {} ~duck() {}
virtual void speak() {
cout<<"Hello,I am "< } };
class pig:public animal //pig { public:
pig(string n,int a):animal(n,a ) {} ~pig() {}
76 / 117下载文档可编辑
virtual void speak() {
cout<<"Hello,I am "< } };
int main() {
int t,age; animal *a;
string type,name; cin>>t; while(t--) {
cin>>type>>name>>age; if(type=="Tiger") {
tiger sb(name,age); a=&sb; a->speak(); }
else if(type=="Pig") {
pig sb(name,age); a=&sb;
77 / 117下载文档可编辑
a->speak(); }
else if(type=="Duck") {
duck sb(name,age); a=&sb; a->speak(); }
else if(type=="Dog") {
dog sb(name,age); a=&sb; a->speak(); } else
cout<<"There is no "<our Zoo."< } }
=============================================================================
==========================================
员工工资(虚函数与多态) 时间限制: 2 Sec 内存限制: 128 MB
提交: 756 解决: 382 [提交][状态][讨论版]
78 / 117下载文档可编辑
题目描述
某公司员工的属性有:姓名、职位、级别、工作年限,级别和年限都是非负整数,否则显示错误。包含方法有:构造函数,计算工资的方法(salary())。 员工职位分为三种:Employee、Teamleader、Manager,其他职位类型显示错误。
三种职位员工的区别在于计算工资的方法不同:
1. Employee的每月工资 = 1000 + 500*级别 + 50*工作年限 2. Teamleader的每月工资 = 3000 + 800*级别 + 100*工作年限 3. Manager的每月工资 = 5000 + 1000 * (级别+工作年限) 计算工资的方法返回每个员工的工资数。
要求:以普通员工为基类,组长和经理继承基类,程序中只能使用基类指针指向对象与调用对象的方法。 输入
测试案例的个数 t
每行输入一个员工的信息:包括姓名、职位、级别、工作年限 输出
输出相应员工的信息
如有错误信息,则输出错误信息,若职位信息与级别和年限信息同时出错,仅输出职位错误信息 样例输入 5
79 / 117下载文档可编辑
zhangsan Employee 4 5 lisi Teamleader 4 5 Wangwu Manager 4 5 chenliu Precident 4 5 xiaoxiao Manager -1 5 样例输出
zhangsan:Employee,Salary:3250 lisi:Teamleader,Salary:6700 Wangwu:Manager,Salary:14000 error position. error grade or year. #include #include using namespace std; class Employee {
protected:
string name; string pos; double gra,xian; public:
Employee(string n,string p,double g,double x):name(n),pos(p),gra(g),xian(x) {}
80 / 117下载文档可编辑
~Employee() {} virtual int salary() {
return 1000+500*gra+50*xian; }
virtual void print() {
cout< } };
class Teamleader:public Employee { public:
Teamleader(string n,string p,double g,double x):Employee(n,p,g,x) {}
~Teamleader() {} virtual int salary() {
return 3000+800*gra+100*xian; }
virtual void print() {
cout<
81 / 117下载文档可编辑
} };
class Manager:public Employee { public:
Manager(string n,string p,double g,double x):Employee(n,p,g,x) {}
~Manager() {}
virtual int salary() {
return 5000+1000*(gra+xian); }
virtual void print() {
cout< } };
int main() {
int t; Employee *a; string name,pos; double gra,xian;
82 / 117下载文档可编辑
cin>>t; while(t--) {
cin>>name>>pos>>gra>>xian;
if(gra-(int)gra!=0 || xian-(int)xian!=0 || gra<0 || xian<0)
cout<<"error grade or year."< else if(pos!="Employee" && pos!="Teamleader" && pos!="Manager")
cout<<"error position."< else if(pos=="Employee") {
Employee sb(name,pos,gra,xian); a=&sb; a->print(); }
else if(pos=="Teamleader") {
Teamleader sb(name,pos,gra,xian); a=&sb; a->print(); }
else if(pos=="Manager") {
Manager sb(name,pos,gra,xian);
83 / 117下载文档可编辑
a=&sb; a->print(); } } }
=============================================================================
========================================== =============================================================================
==========================================
在职研究生(多重继承)
时间限制: 1 Sec 内存限制: 128 MB
提交: 1332 解决: 470 [提交][状态][讨论版]
题目描述
1、建立如下的类继承结构:
1) 定义一个人员类CPeople,其属性(保护类型)有:姓名、性别、年龄; 2) 从CPeople类派生出学生类CStudent,添加属性:学号和入学成绩; 3) 从CPeople类再派生出教师类CTeacher,添加属性:职务、部门; 4) 从CStudent和CTeacher类共同派生出在职研究生类CGradOnWork,添加属性:研究方向、导师; 2、分别定义以上类的构造函数、输出函数print及其他函数(如需
84 / 117下载文档可编辑
要)。
3、在主函数中定义各种类的对象,并测试之。 输入
第一行:姓名性别年龄 第二行:学号成绩 第三行:职务部门 第四行:研究方向导师 输出
第一行:People:
第二行及以后各行:格式见Sample 样例输入 wang-li m 23 2012100365 92.5 assistant computer robot zhao-jun 样例输出 People: Name: wang-li Sex: m Age: 23 Student: Name: wang-li Sex: m
85 / 117下载文档可编辑
Age: 23
No.: 2012100365 Score: 92.5 Teacher: Name: wang-li Sex: m Age: 23
Position: assistant Department: computer GradOnWork: Name: wang-li Sex: m Age: 23
No.: 2012100365 Score: 92.5
Position: assistant Department: computer Direction: robot Tutor: zhao-jun #include #include using namespace std; class CPeople
86 / 117下载文档可编辑
{
protected:
string name,sex; int sui; public:
CPeople() {}
CPeople(string n,string se,int su):name(n),sex(se),sui(su) {}
void print() {
cout<<"People:"< cout<<"Name: "< cout<<"Sex: "< cout<<"Age: "< cout< } };
////////////////////
class CStudent:virtual public CPeople {
protected:
string no; float gpa; public:
87 / 117下载文档可编辑
CStudent(string n,float g,string na,string se,int su):CPeople(na,se,su),no(n),gpa(g) {} void print() {
cout<<"Student:"< cout<<"Name: "< cout<<"Sex: "< cout<<"Age: "< cout<<"No.: "< cout<<"Score: "< cout< } };
//////////////////
class CTeacher:virtual public CPeople {
protected:
string zhiwei,bumen; public:
CTeacher(string zhi,string bu,string na,string se,int su):CPeople(na,se,su),zhiwei(zhi),bumen(bu) {}
void print() {
88 / 117下载文档可编辑
cout<<"Teacher:"< cout<<"Name: "< cout<<"Sex: "< cout<<"Age: "<
cout<<"Position: "< cout<<"Department: "< cout< } };
///////////////////
class CGradOnWork:public CStudent,public CTeacher {
protected:
string fangxiang,daoshi; public:
CGradOnWork(string n,string se,int su,string na,float g,string zhi,string bu,string fang,string
dao):CStudent(n,g,na,se,su),CTeacher(zhi,bu,na,se,su),CPeople(na,se,su),fangxiang(fang),daoshi(dao) {}
void print() {
cout<<"GradOnWork:"< cout<<"Name: "< cout<<"Sex: "< cout<<"Age: "<