C、C++编程题目和代码4_第1页
C、C++编程题目和代码4_第2页
C、C++编程题目和代码4_第3页
C、C++编程题目和代码4_第4页
C、C++编程题目和代码4_第5页
已阅读5页,还剩105页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目 录手机服务(构造+拷贝构造+堆)3Point&Circle(类与对象)6任意鸡任意钱问题(构造与析构)10距离计算(友元函数)13样例输出14复数运算(友元函数)15旅馆顾客统计(静态成员)18三维空间的点(继承)21圆和圆柱体计算(继承)23时钟模拟(继承)26在职研究生(多重继承)28交通工具(多重继承)32商旅信用卡(多重继承)35电视机与遥控器139图形面积(虚函数与多态)44动物园(虚函数与多态)47员工工资(虚函数与多态)50在职研究生(多重继承)54复数运算(运算符重载)58分数的加减乘除(运算符重载)60时钟调整(运算符前后增量)63字符串的加减(运算符重载)66食

2、品管理系统69=二级指针指向二维数组:=手机服务(构造+拷贝构造+堆)时间限制: 1 Sec  内存限制: 128 MB提交: 234  解决: 95提交状态讨论版题目描述设计一个类来实现手机的功能。它包含私有属性:号码类型、号码、号码状态、停机日期;包含方法:构造、拷贝构造、打印、停机。1、号码类型表示用户类别,只用单个字母,A表示政府,B表示企业、C表示个人2、号码是11位整数,用一个字符串表示3、号码状态用一个数字表示,1、2、3分别表示在用、未用、停用4、停机日期是一个日期对象指针,在初始化时该成员指向空,

3、该日期类包含私有属性年月日,以及构造函数和打印函数等-5、构造函数的作用就是接受外来参数,并设置各个属性值,并输出提示信息,看示例输出6、拷贝构造的作用是复制已有对象的信息,并输出提示信息,看示例输出。      想一下停机日期该如何复制,没有停机如何复制?已经停机又如何复制?7、打印功能是把对象的所有属性都输出,输出格式看示例8、停机功能是停用当前号码,参数是停机日期,无返回值,操作是把状态改成停用,并停机日期指针创建为动态对象,并根据参数来设置停机日期,最后输出提示信息,看示例输出-要求:在主函数中实现号码备份的功能,对已有的虚拟手机号的所有信息进行复制,并将

4、号码类型改成D表示备份;将手机号码末尾加字母X-主函数的参考代码如下:假设号码类名为PNO(为避免代码重复,自己的代码请不要用这个类名)PNO p1(.) ; /创建号码并初始化p1.Print();     /输出原号码信息PNO p2(p1);    /实现号码备份p2.Print();     /输出备份号码信息p1.Stop(td);     /原号码停机,td是日期对象p1.Print();       /输出停机后号码信息输入第一行输

5、入t表示有t个号码第二行输入6个参数,包括号码类型、号码、状态、停机的年、月、日,用空格隔开依次输入t行输出每个示例输出三行,依次输出原号码信息、备份号码信息和原号码停机后的信息每个示例之间用短划线(四个)分割开,看示例输出样例输入2A1 2015 1 1B2 2012 12 12样例输出Construct a new phone型=机构|号码State=在用Construct a copy of phone型=备份|号码|State=在用

6、Stop the phone型=机构|号码State=停用 |停机日期=2015.1.1-Construct a new phone型=企业|号码State=未用Construct a copy of phone型=备份|号码|State=未用Stop the phone型=企业|号码State=停用 |停机日期=2012.12.12-#include<iostream>#in

7、clude<string>using namespace std; class Dateprivate:    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 mon

8、th;    int getd() return day;    void print() ;class phoneprivate:    char type;    string number;    int status;    Date *date;public:    phone(char t,string n

9、,int s):type(t),number(n),status(s)            cout<<"Construct a new phone "<<number<<endl;         if(type='A')       

10、0;    cout<<"类型=机构|"        else if(type='B')            cout<<"类型=企业|"         cout<<&qu

11、ot;号码="<<number;         if(status=1)            cout<<"|State=在用"<<endl;        else if(status=2)    

12、        cout<<"|State=未用"<<endl;        else if(status=3)            cout<<"|State=停用"<<endl;    

13、;    phone(phone &s)                     type=s.type;        status=s.status;        number

14、=s.number;        cout<<"Construct a copy of phone "<<number<<endl;        cout<<"类型=备份|号码="<<number<<"X"        i

15、f(status=1)            cout<<"|State=在用"<<endl;        else if(status=2)            cout<<"|State=未用"&

16、lt;<endl;        else if(status=3)            cout<<"|State=停用"<<endl;        void stop(Date &s)      

17、;      cout<<"Stop the phone "<<number<<endl;        if(type='A')            cout<<"类型=机构|"    

18、60;   else if(type='B')            cout<<"类型=企业|"         cout<<"号码="<<number;         co

19、ut<<"|State=停用 |停机日期="            <<s.gety()<<"."            <<s.getm()<<"."       &#

20、160;    <<s.getd()<<endl;        cout<<"-"<<endl;     int main()     int year,month,day,status,t;    char type;    s

21、tring number;    cin>>t;    while(t-)        cin>>type>>number>>status>>year>>month>>day;    phone sb1(type,number,status);    Date sb2(ye

22、ar,month,day);    phone sb3(sb1);    sb1.stop(sb2);    =Point&Circle(类与对象)时间限制: 1 Sec  内存限制: 128 MB提交: 161  解决: 103提交状态讨论版题目描述类Point是我们写过的一个类,类Circle是一个新的类,Point作为其成员对象,请完成类Circle的成员函数的实现。在主函数中生成一

23、个圆和若干个点,判断这些点与圆的位置关系,如果点在圆内(包括在圆的边上),输出“inside”,否则输出"outside";然后移动圆心的位置,再次判断这些点与圆的位置关系。输入圆的x坐标 y坐标 半径点的个数n第一个点的x坐标 y坐标第二个点的x坐标 y坐标.第n个点的x坐标 y坐标圆心移动到的新的x坐标 y坐标输出第一个点与圆的关系第二个点与圆的关系.第n个点与圆的关系after move the centre of circle圆心移动后第一个点与圆的关系圆心移动后第二个点与圆的关系.圆心移动后第n个点与圆的关系样例输入0 0 541 12 25 0-6 0-1 0样

24、例输出insideinsideinsideoutsideafter move the centre of circle:insideinsideoutsideinside#include<iostream>#include<cmath>using namespace std;class pointprivate:    double x,y;public:    point()     point (double x_value,double y_va

25、lue)     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;  

26、0; 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);    

27、0;dis=sqrt(n);     return dis;class circleprivate:    point center;    double radius;public:    circle()     circle(double x1,double y1,double r):radius(r)     center.setxy(x1,y1);

28、     double getarea()     void movecenterto(double x1,double y1) center.setxy(x1,y1);    int contain(point &p);    circle() ;int circle:contain(point &p)    double dis;    

29、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; &#

30、160;  circle fuck(a,b,r);    point *sb;    sb=new pointn;    for(i=0;i<n;i+)            cin>>x>>y;        sbi.setxy

31、(x,y);        k=fuck.contain(sbi);        if(k=1)            cout<<"inside"<<endl;        else

32、0;           cout<<"outside"<<endl;        cin>>xx>>yy;    fuck.movecenterto(xx,yy);    cout<<"after move the centre of

33、circle:"<<endl;    for(i=0;i<n;i+)            k=fuck.contain(sbi);        if(k=1)            cout<<&

34、quot;inside"<<endl;        else            cout<<"outside"<<endl;    =任意鸡任意钱问题(构造与析构)时间限制: 1 Sec  内存限制: 128 MB提交: 179 

35、; 解决: 130提交状态讨论版题目描述百鸡百钱问题描述为:用100元钱买100只鸡,已知每只公鸡5元,每只母鸡3元,3只小鸡1元,问能买多少只公鸡、母鸡和小鸡?试将该类问题用一个类来表示,百鸡百钱问题只是这个类如CChickProblem的一个实例,假设各种鸡的价格不变,类中数据成员有总钱数、要买的总的鸡数、能买到的母鸡、小鸡和公鸡的数量。成员函数有构造和析构函数,求问题解的函数findSolution,打印问题解的函数printSolution。(要求用动态数组保存问题的所有解)编写程序求解该类问题。输入测试数据的组数 t第一组 鸡数 钱数第二组 鸡数 钱数.输出第一组

36、解个数第一组第一个解公鸡数 母鸡数 小鸡数第一组第二个解公鸡数 母鸡数 小鸡数.第二组解个数第二组第一个解公鸡数 母鸡数 小鸡数第二组第二个解公鸡数 母鸡数 小鸡数.样例输入2100 100200 200样例输出34 18 788 11 8112 4 8474 43 1538 36 15612 29 15916 22 16220 15 16524 8 16828 1 171#include<iostream>using namespace std;class fuckprivate:    int qian,ji,x,y,z;public:&

37、#160;   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;    

38、p=qian/3;    q=qian*3;    int *sb;    sb=new int100;    for(i=1;i<o;i+)        for(j=1;j<p;j+)            for(k=0;

39、k<q;k+=3)                if(i+j+k=ji && 5*i+3*j+k/3=qian)                         &#

40、160;          m+=3;                    sbn=i;                 

41、60;  n+;                    sbn=j;                    n+;     

42、60;              sbn=k;                    n+;              

43、          sb0=m;    return sb; void fuck:print(int *sb)    int i,n;    n=sb0;    cout<<n/3<<endl;    for(i=1;i<=n;i+)  &

44、#160;                if(i%3=0)            cout<<sbi<<endl;        else       &

45、#160;    cout<<sbi<<" "      int main()    int qian,ji,t;    cin>>t;    while(t-)        cin>>qian>>ji; &

46、#160;  fuck sb(qian,ji);    int *a=sb.find();    sb.print(a);    =距离计算(友元函数)时间限制: 1 Sec  内存限制: 128 MB提交: 536  解决: 444提交状态讨论版题目描述Point类的基本形式如下:请完成如下要求:1.实现Point类;2.为Point类增加一个友元函数double Dista

47、nce(Point &a, Point &b),用于计算两点之间的距离。直接访问Point对象的私有数据进行计算。3.编写main函数,输入两点坐标值,计算两点之间的距离。输入第1行:输入需计算距离的点对的数目第2行开始,每行依次输入两个点的x和y坐标输出每行依次输出一组点对之间的距离(结果直接取整数部分,不四舍五入 )样例输入21 0 2 12 3 2 4样例输出11#include<iostream>#include<cmath>using namespace std;class pointprivate:   

48、0;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);

49、    n=sqrt(m);    return n;int main()    int t;    double x1,y1,x2,y2;    cin>>t;    while(t-)            cin>&

50、gt;x1>>y1>>x2>>y2;        point aa(x1,y1),bb(x2,y2);        cout<<int(distence(aa,bb)<<endl;    =复数运算(友元函数)时间限制: 1 Sec  内存限制: 128 MB提交: 512 

51、 解决: 397提交状态讨论版题目描述复数类的声明如下:要求如下:1.     实现复数类和友元函数addCom和outCom。2.   参考addCom函数为复数类增加一个友元函数minusCom,用于实现两个复数的减法3.     在main函数中,通过友元函数,实现复数的加减法和复数的输出。输入第1行:第1个复数的实部和虚部第2行:需进行运算的次数,注意:是连续运算。具体结果可参考样例  第3行开始,每行输入运算类型,以及参与运算的复数的实部与虚部。

52、“+”表示复数相加,“-”表示复数相减。输出 每行输出复数运算后的结果,复数输出格式为“(实部,虚部)”。样例输入10 103+ 20 10- 15 5+ 5 25样例输出(30,20)(15,15)(20,40)#include<iostream>using namespace std;class Complexprivate:    double real;    double imag;public:    Complex()  

53、0;  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(

54、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;  

55、0; c3.real=c1.real-c2.real;    c3.imag=c1.imag-c2.imag;    return c3;void out(Complex c)    cout<<"("<<c.real<<","<<c.imag<<")"<<endl;int main()    i

56、nt n,i=0;    char ch;    double r1,i1,r2,i2;    cin>>r1>>i1;    Complex a(r1,i1);    cin>>n;    Complex *sb=new Complexn;    while(n-) &#

57、160;          cin>>ch>>r2>>i2;        sbi.set(r2,i2);        if(ch='+')            a

58、=add(a,sbi);        else if(ch='-')            a=minuscom(a,sbi);        out(a);     =旅馆顾客统计(静态成员)时间限制: 1 Sec  内

59、存限制: 128 MB提交: 429  解决: 214提交状态讨论版题目描述编写程序,统计某旅馆住宿客人的总数和收入总额。要求输入客人的姓名,输出客人编号(2015+顺序号,顺序号4位,如第1位为0001,第2位为0002,依此类推)、姓名、总人数以及收入总额。总人数和收入总额用静态成员,其他属性采用普通的数据成员。旅馆类声明如下:输入第1行:输入旅馆单个顾客房租第2行开始,依次输入顾客姓名,0表示输入结束。输出每行依次输出顾客信息和当前旅馆信息。包括顾客姓名,顾客编号,旅馆当前总人数,旅馆当前总收入。样例输入150 张三 李四 王五 0样例输

60、出张三 20150001 1 150李四 20150002 2 300王五 20150003 3 450#include<iostream>#include<cstring>using namespace std;class hotelprivate:    static int custnum;    static float earning;    static float rent;    char *na

61、me;    int id;public:    hotel(char *a);    hotel()     void set_num() custnum=1;    void set_id() id=20150001;    void increase_custnum() custnum+;    void set

62、_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;/ho

63、tel:hotel(char *a)    name=new char50;    strcpy(name,a);void hotel:display()    cout<<name<<" "<<id<<" "<<custnum<<" "<<earning<<endl;int main()   

64、; float r,e;    int num,id1,i=0,k=0;    char n50;    cin>>r;         while(1)            cin>>n;   

65、0;    if(n0='0')            break;        hotel sb(n);        if(k=0)          

66、60;         sb.set_num();            sb.set_rent(r);            sb.set_earning();         

67、   sb.set_id();                else                    sb.increase_custnum();    

68、0;       sb.increase_id();            sb.increase_earning();                sb.display();      

69、  i+;        k+;      =三维空间的点(继承)时间限制: 1 Sec  内存限制: 128 MB提交: 562  解决: 509提交状态讨论版题目描述定义一个平面上的点C2D类,它含有一个getDistance()的成员函数,计算该点到原点的距离;从C2D类派生出三维空间的点C3D类,它的getDistance()成员函数计算该点到原点的

70、距离。试分别生成一个C2D和C3D的对象,计算它们到原点的距离。三维空间的两点(x, y, z)和(x1, y1, z1)的距离公式如下:(x-x1)2+(y-y1)2+(z-z1)2(1/2) 输入第一行二维坐标点位置第二行三维坐标点位置1第三行三维坐标点位置2输出第一行二维坐标点位置到原点的距离第二行三维坐标点位置1到原点的距离第三行三维坐标点位置2到原点的距离第四行三维坐标点位置2赋值给二维坐标点变量后,二维坐标点到原点的距离样例输入3 43 4 56 8 8样例输出57.0710712.806210#include<iostream>#include<cma

71、th>using namespace std;class C2Dprotected:    double x,y;public:    C2D()     C2D(double _x,double _y):x(_x),y(_y)     C2D()     double getDistance()        

72、    double m,n;        m=pow(x,2)+pow(y,2);        n=sqrt(m);        return n;    /class C3D:public C2Dprotected:    dou

73、ble z;public:    C3D()     C3D(double _x,double _y,double _z):C2D(_x,_y),z(_z)     C3D()     double getDistance()            double m,n;    

74、    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

75、>>x1>>y1>>z1>>x2>>y2>>z2;    C2D sb1(x,y);    C3D sb2(x1,y1,z1),sb3(x2,y2,z2);    cout<<sb1.C2D:getDistance()<<endl;    cout<<sb2.C3D:getDistance()<<endl; 

76、   cout<<sb3.C3D:getDistance()<<endl;    C2D sb4(sb3);    cout<<sb4.C2D:getDistance()<<endl;=圆和圆柱体计算(继承)时间限制: 1 Sec  内存限制: 128 MB提交: 721  解决: 502提交状态讨论版题目描述定义一个CPoint点类,包含数据成员x,y(坐标

77、点)。以CPoint为基类,派生出一个圆形类CCircle,增加数据成员r(半径)和一个计算圆面积的成员函数。再以CCircle做为直接基类,派生出一个圆柱体类CCylinder,增加数据成员h(高)和一个计算体积的成员函数。生成圆和圆柱体对象,调用成员函数计算面积或体积并输出结果。输入输入圆的圆心位置、半径输入圆柱体圆心位置、半径、高输出输出圆的圆心位置 半径输出圆面积输出圆柱体的圆心位置 半径 高输出圆柱体体积样例输入0 0 11 1 2 3样例输出Circle:(0,0),1Area:3.14Cylinder:(1,1),2,3Volume:37.68#include<iostre

78、am>using namespace std;class CPointprotected:    double x,y;public:    CPoint()     CPoint(double _x,double _y):x(_x),y(_y)     CPoint() ;class CCircle:public CPointprotected:    double r;public:&#

79、160;   CCircle(double xx,double yy,double _r):CPoint(xx,yy),r(_r)     CCircle()     double Area()            return 3.14*r*r;        void printf(

80、)            cout<<"Circle:("<<x<<","<<y<<"),"<<r<<endl;        cout<<"Area:"<<Area()<<endl; &#

81、160;  class CCylinder:public CCircleprotected:    double h;public:    CCylinder(double x2,double y2,double r1,double _h):CCircle(x2,y2,r1),h(_h)     CCylinder()     double Volume()     

82、       return 3.14*r*r*h;        void printf()            cout<<"Cylinder:("<<x<<","<<y<<"),"<<r<

83、;<","<<h<<endl;        cout<<"Volume:"<<Volume()<<endl;    int main()    double x,y,r,x1,y1,r1,h;    cin>>x>>y>>r>>x1>&g

84、t;y1>>r1>>h;    CCircle sb1(x,y,r);    CCylinder sb2(x1,y1,r1,h);    sb1.printf();    sb2.printf();=时钟模拟(继承)时间限制: 1 Sec  内存限制: 128 MB提交: 755  解决: 365提交状态讨论版题目描述定义计数器类,包

85、含保护数据成员value,公有函数increment计数加1。定义循环计算器继承计数器类,增加私有数据成员:最小值min_value,max_value,重写公有函数increment,使得value在min_valuemax_value区间内循环+1。定义时钟类,数据成员是私有循环计数器对象小时hour、分钟minute、秒second,公有函数time(int s)计算当前时间经过s秒之后的时间,即hour,minute,second的新value值。定义时钟类对象,输入当前时间和经过的秒数,调用time函数计算新时间。根据题目要求,增加必要的构造函数、析构函数和其他所需函数。输入第一行测

86、试次数n2行一组,第一行为当前时间(小时 分钟 秒),第二行为经过的秒数。输出输出n行每行对应每组当前时间和经过秒数后计算得到的新时间(小时:分钟:秒)。样例输入28 19 202023 30 01801样例输出8:19:400:0:1#include<iostream>using namespace std;class Counterprotected:    int value;public:    Counter(int va):value(va)     

87、int increment()            value+;        if(value=60)            value=0;        return value; 

88、;   class Calculater:public Counterprivate:    int min_value;    int max_value;public:    Calculater(int v,int minv,int maxv):Counter(v),min_value(minv),max_value(maxv)     int increment()   

89、;         value+;        if(value=max_value)            value=0;        return value;     

90、   int GetValue()     return value; ;class Clockprivate:    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();      

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论