C、C++编程题目和代码4

2022-09-04 21:29:02   第一文档网     [ 字体: ] [ 阅读: ] [ 文档下载 ]
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。下载word有问题请添加QQ:admin处理,感谢您的支持与谅解。点击这里给我发消息

#第一文档网# 导语】以下是®第一文档网的小编为您整理的《C、C++编程题目和代码4》,欢迎阅读!
C++,题目,编程,代码



手机服务(构造+拷贝构造+堆) ............................ 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、号码状态用一个数字表示,123分别表示在用、未用、停用 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行开始,每行依次输入两个点的xy坐标 输出

每行依次输出一组点对之间的距离(结果直接取整数部分,不四舍五 样例输入 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. 实现复数类和友元函数addComoutCom

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()成员函数计算该点到原点的距离。试分别生成一个C2DC3D的对象,计算它们到原点的距离。

三维空间的两点(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_valuemax_value,

重写公有函数increment,使得valuemin_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) CStudentCTeacher类共同派生出在职研究生类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_speedspeedweight等数据成员,display()等成员函数

2)CVehicle类派生出自行车类CBicycle,添加属性:高度height

3)CVehicle类派生出汽车类CMotocar,添加属性:座位数seat_num

4)CBicycleCMotocar派生出摩托车类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,信用卡积分减去退款金额。

通过旅程信用卡在旅程网下单,旅程积分和信用卡积分双重积分(即旅程积分和信用卡积分同时增加) 旅程信用卡可以按 旅程积分:信用卡积分= 12 比例将信用卡积分兑换为旅程积分。

初始假设信用卡积分、旅程积分、账单金额为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() 员工职位分为三种:EmployeeTeamleaderManager,其他职位类型显示错误。

三种职位员工的区别在于计算工资的方法不同:

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) CStudentCTeacher类共同派生出在职研究生类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: "<

89 / 117下载文档可编辑


cout<<"No.: "< cout<<"Score: "< cout<<"Position: "< cout<<"Department: "< cout<<"Direction: "< cout<<"Tutor: "< } };

//////////////////// int main() {

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;

90 / 117下载文档可编辑


}

=============================================================================

==========================================

复数运算(运算符重载)

时间限制: 1 Sec 内存限制: 128 MB

提交: 424 解决: 308 [提交][状态][讨论版]

题目描述

已知一个复数包含实数部和虚数部,操作包括初始化、输出、加、减,具体实现要求如下:

1.用成员函数的方式实现运算符“+”和运算符"-"的重载,实现两个复数对象的相加或相减。

2.用构造函数的方法实现对象的初始化,用输出函数来完成对象的输出 输入

第一行输入t表示有t个示例

第二行输入第一个复数的实数部和虚数部 第三行输入第二个复数的实数部和虚数部 依次类推,每两行输入下一个示例的两个复数 输出

对于每个示例,第一行输出两个复数相加的结果,第二行输出两个复数相减的结果,是第一个复数减去第二个复数 样例输入

91 / 117下载文档可编辑


3 4 4 2 2 3 -5 4 5 6 7 6 8 样例输出 6+6i 2+2i 7 -1-10i 12+15i -i

#include using namespace std; class CComplex {

private:

double real,image; public:

CComplex() {}

CComplex(double r,double i):real(r),image(i) {}

92 / 117下载文档可编辑


void print() {

if(real) {

if(image>0) <

l;

{

if(image!=1)

cout< else

cout<}

if(image<0) {

if(image!=-1)

cout< else

cout< }

if(image==0)

cout< }

if(real==0) {

93 / 117下载文档可编辑




if(image==1)

cout<<"i"< if(image==-1)

cout<<"-i"< else

cout< } }

CComplex operator+(CComplex &r) {

CComplex c;

c.real=real+r.real; c.image=image+r.image; return c; }

CComplex operator-(CComplex &r) {

CComplex c;

c.real=real-r.real; c.image=image-r.image; return c; } };

int main()

94 / 117下载文档可编辑


{

int t;

double a1,b1,a2,b2;

// freopen("c:\\123.txt","r",stdin); cin>>t; while(t--) {

cin>>a1>>b1>>a2>>b2;

CComplex sb1(a1,b1),sb2(a2,b2); CComplex sb3; sb3=sb1+sb2; sb3.print(); sb3=sb1-sb2; sb3.print(); } }

=============================================================================

==========================================

分数的加减乘除(运算符重载) 时间限制: 1 Sec 内存限制: 128 MB

提交: 737 解决: 401 [提交][状态][讨论版]

题目描述

Fraction类的基本形式如下:

95 / 117下载文档可编辑




要求如下:

1.实现Fraction类;common_divisor()contracted()函数体可为空,不实现具体功能。

2.编写main函数,初始化两个Fraction对象的,计算它们之间的加减乘除。 输入

1行:依次输入第1个和第2Fraction对象的分子和分母值。 输出

每行依次分别输出加减乘除计算后的Fraction对象(直接输出分数值,不需要约简) 样例输入 1 3 2 5 样例输出 fraction=11/15 fraction=-1/15

96 / 117下载文档可编辑


fraction=2/15 fraction=5/6

#include using namespace std; class Fraction {

private:

int fz,fm;

int commom() {}//最大公约数 void contracted() {} //分数化简 public:

Fraction() {}

Fraction(int z,int m):fz(z),fm(m) { } Fraction(Fraction &r) {}

Fraction &operator+(Fraction &r)/////// ++++ {

Fraction c;

c.fz=fz*r.fm+fm*r.fz; c.fm=fm*r.fm;

// cout<<"fuck="< return c; }

Fraction &operator-(Fraction &r)//////// --- {

97 / 117下载文档可编辑


Fraction c;

c.fz=fz*r.fm-fm*r.fz; c.fm=fm*r.fm; return c; }

Fraction &operator*(Fraction &r)///////// *** {

Fraction c; c.fz=fz*r.fz; c.fm=fm*r.fm; return c; }

Fraction &operator/(Fraction &r)///////// //// {

Fraction c; c.fz=fz*r.fm; c.fm=fm*r.fz; return c; }

void set(int=0,int=1) {}

void disp()

{ cout<<"fraction="< };

int main()

98 / 117下载文档可编辑


{

// int t;

int a1,b1,a2,b2;

// freopen("c:\\123.txt","r",stdin); cin>>a1>>b1>>a2>>b2;

Fraction sb1(a1,b1),sb2(a2,b2); Fraction sb3;

sb3=sb1+sb2; sb3.disp();

sb3=sb1-sb2; sb3.disp();

sb3=sb1*sb2; sb3.disp();

sb3=sb1/sb2; sb3.disp(); }

=============================================================================

==========================================

时钟调整(运算符前后增量) 时间限制: 1 Sec 内存限制: 128 MB

99 / 117下载文档可编辑


提交: 732 解决: 358 [提交][状态][讨论版]

题目描述

假定一个时钟包含时、分、秒三个属性,取值范围分别为0~110~590~59,具体要求如下:

1、用一元运算符++,并且是前增量的方法,实现时钟的调快操作。例如要把时钟调快5秒,则执行5次” ++<对象> “ 的操作 2、用一元运算符--,并且是后增量的方法,实现时钟的调慢操作。例如要把时钟调慢10秒,则执行10次” <对象>-- “的操作 3、用构造函数的方法实现时钟对象的初始化,用输出函数实现时钟信息的输出 输入

第一行输入时钟的当前时间时、分、秒 第二行输入t表示有t个示例

第三行输入t个整数x,如果x为正整数,则表示执行调快操作,使用重载运算符++;如果x为负整数,则表示执行调慢操作,使用重载运算符--

每次的调快或调慢操作都是承接上一次调整后的结果进行,例如先调快10秒,再调慢2秒,那么调慢2秒是接着调快10秒后的结果进行的 输出

每行输出每个时钟调整操作后的时分秒 样例输入 11 58 46

100 / 117下载文档可编辑


本文来源:https://www.dywdw.cn/f931959e66ce0508763231126edb6f1aff007120.html

相关推荐
推荐阅读