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: "<