《C、C++编程题目和代码4.doc》由会员分享,可在线阅读,更多相关《C、C++编程题目和代码4.doc(74页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 . . . . 目 录手机服务(构造+拷贝构造+堆)3Point&Circle(类与对象)6任意鸡任意钱问题(构造与析构)10距离计算(友元函数)13样例输出14复数运算(友元函数)15旅馆顾客统计(静态成员)18三维空间的点(继承)21圆和圆柱体计算(继承)23时钟模拟(继承)26在职研究生(多重继承)28交通工具(多重继承)32商旅信用卡(多重继承)35电视机与遥控器139图形面积(虚函数与多态)44动物园(虚函数与多态)47员工工资(虚函数与多态)50在职研究生(多重继承)54复数运算(运算符重载)58分数的加减乘除(运算符重载)60时钟调整(运算符前后增量)63字符串的加减(运算符重
2、载)66食品管理系统69=二级指针指向二维数组:=手机服务(构造+拷贝构造+堆)时间限制:1 Sec存限制:128 MB提交:234解决:95提交状态讨论版题目描述设计一个类来实现手机的功能。它包含私有属性:类型、状态、停机日期;包含方法:构造、拷贝构造、打印、停机。1、类型表示用户类别,只用单个字母,A表示政府,B表示企业、C表示个人2、是11位整数,用一个字符串表示3、状态用一个数字表示,1、2、3分别表示在用、未用、停用4、停机日期是一个日期对象指针,在初始化时该成员指向空,该日期类包含私有属性年月日,以与构造函数和打印函数等-5、构造函数的作用就是承受外来参数,并设置各个属性值,并输出
3、提示信息,看示例输出6、拷贝构造的作用是复制已有对象的信息,并输出提示信息,看示例输出。 想一下停机日期该如何复制,没有停机如何复制?已经停机又如何复制?7、打印功能是把对象的所有属性都输出,输出格式看示例8、停机功能是停用当前,参数是停机日期,无返回值,操作是把状态改成停用,并停机日期指针创建为动态对象,并根据参数来设置停机日期,最后输出提示信息,看示例输出-要求:在主函数中实现备份的功能,对已有的虚拟手机号的所有信息进行复制,并将类型改成D表示备份;将手机末尾加字母X-主函数的参考代码如下:假设类名为PNO(为避免代码重复,自己的代码请不要用这个类名)PNO p1(.) ; /创建并初始化
4、p1.Print(); /输出原信息PNO p2(p1); /实现备份p2.Print(); /输出备份信息p1.Stop(td); /原停机,td是日期对象p1.Print(); /输出停机后信息输入第一行输入t表示有t个第二行输入6个参数,包括类型、状态、停机的年、月、日,用空格隔开依次输入t行输出每个示例输出三行,依次输出原信息、备份信息和原停机后的信息每个示例之间用短划线(四个)分割开,看示例输出样例输入2A 1 2015 1 1B 2 2012 12 12样例输出Construct a new phone 类型=机构|=|State=在用Construct a copy of pho
5、ne 类型=备份|=X|State=在用Stop the phone 类型=机构|=|State=停用 |停机日期=2015.1.1-Construct a new phone 类型=企业|=|State=未用Construct a copy of phone 类型=备份|=X|State=未用Stop the phone 类型=企业|=|State=停用 |停机日期=2012.12.12-#include#includeusingnamespacestd;classDateprivate:intyear,month,day;public:Date(inty,intm,intd):year(y
6、),month(m),day(d)intgety() returnyear;intgetm() returnmonth;intgetd() returnday;voidprint() ;classphoneprivate:chartype;string number;intstatus;Date *date;public:phone(chart,string n,ints):type(t),number(n),status(s)coutConstruct a new phone numberendl;if(type=A)cout类型=机构|;elseif(type=B)cout类型=企业|;c
7、out=number;if(status=1)cout|State=在用endl;elseif(status=2)cout|State=未用endl;elseif(status=3)cout|State=停用endl;phone(phone &s)type=s.type;status=s.status;number=s.number;coutConstruct a copy of phone numberendl;cout类型=备份|=numberX;if(status=1)cout|State=在用endl;elseif(status=2)cout|State=未用endl;elseif(s
8、tatus=3)cout|State=停用endl;voidstop(Date &s)coutStop the phone numberendl;if(type=A)cout类型=机构|;elseif(type=B)cout类型=企业|;cout=number;cout|State=停用 |停机日期=s.gety().s.getm().s.getd()endl;cout-t;while(t-)cintypenumberstatusyearmonthday;phone sb1(type,number,status);Date sb2(year,month,day);phone sb3(sb1);
9、sb1.stop(sb2);=Point&Circle(类与对象)时间限制:1 Sec存限制:128 MB提交:161解决:103提交状态讨论版题目描述类Point是我们写过的一个类,类Circle是一个新的类,Point作为其成员对象,请完成类Circle的成员函数的实现。在主函数中生成一个圆和若干个点,判断这些点与圆的位置关系,如果点在圆(包括在圆的边上),输出“inside”,否则输出outside;然后移动圆心的位置,再次判断这些点与圆的位置关系。输入圆的x坐标 y坐标 半径点的个数n第一个点的x坐标 y坐标第二个点的x坐标 y坐标.第n个点的x坐标 y坐标圆心移动到的新的x坐标 y坐
10、标输出第一个点与圆的关系第二个点与圆的关系.第n个点与圆的关系after move the centre of circle圆心移动后第一个点与圆的关系圆心移动后第二个点与圆的关系.圆心移动后第n个点与圆的关系样例输入0 0 541 12 25 0-6 0-1 0样例输出insideinsideinsideoutsideafter move the centre of circle:insideinsideoutsideinside#include#includeusingnamespacestd;classpointprivate:doublex,y;public:point() point
11、 (doublex_value,doubley_value) doublegetx() returnx;doublegety() returny;voidsetxy(doublex1,doubley1) x=x1,y=y1;voidset(doublex_value) x=x_value;voidsety(doubley_value) y=y_value;doublegetdisto(point &p);point() ;doublepoint:getdisto(point &p)doublex1,y1,dis,n;x1=p.getx(); y1=p.gety(); n=(x-x1)*(x-x
12、1)+(y-y1)*(y-y1); dis=sqrt(n); returndis;classcircleprivate:point center;doubleradius;public:circle() circle(doublex1,doubley1,doubler):radius(r) center.setxy(x1,y1); doublegetarea() voidmovecenterto(doublex1,doubley1) center.setxy(x1,y1);intcontain(point &p);circle() ;intcircle:contain(point &p)dou
13、bledis;dis=p.getdisto(center);if(disabrn;circle fuck(a,b,r);point *sb;sb=newpointn;for(i=0;ixy;sbi.setxy(x,y);k=fuck.contain(sbi);if(k=1)coutinsideendl;elsecoutoutside#yy;fuck.movecenterto(#,yy);coutafter move the centre of circle:endl;for(i=0;in;i+)k=fuck.contain(sbi);if(k=1)coutinsideendl;elsecout
14、outsideendl;=任意鸡任意钱问题(构造与析构)时间限制:1 Sec存限制:128 MB提交:179解决:130提交状态讨论版题目描述百鸡百钱问题描述为:用100元钱买100只鸡,已知每只公鸡5元,每只母鸡3元,3只小鸡1元,问能买多少只公鸡、母鸡和小鸡?试将该类问题用一个类来表示,百鸡百钱问题只是这个类如CChickProblem的一个实例,假设各种鸡的价格不变,类中数据成员有总钱数、要买的总的鸡数、能买到的母鸡、小鸡和公鸡的数量。成员函数有构造和析构函数,求问题解的函数findSolution,打印问题解的函数printSolution。(要求用动态数组保存问题的所有解)编写程序求
15、解该类问题。输入测试数据的组数 t第一组 鸡数 钱数第二组 鸡数 钱数.输出第一组解个数第一组第一个解公鸡数 母鸡数 小鸡数第一组第二个解公鸡数 母鸡数 小鸡数.第二组解个数第二组第一个解公鸡数 母鸡数 小鸡数第二组第二个解公鸡数 母鸡数 小鸡数.样例输入2100 100200 200样例输出34 18 788 11 8112 4 8474 43 1538 36 15612 29 15916 22 16220 15 16524 8 16828 1 171#includeusingnamespacestd;classfuckprivate:intqian,ji,x,y,z;public:fuck
16、(intq,intj):qian(q),ji(j) fuck() int*find();voidprint(int*sb);int*fuck:find()inti,j,k,o,p,q,n=1,m=0;o=qian/5;p=qian/3;q=qian*3;int*sb;sb=newint100;for(i=1;io;i+)for(j=1;jp;j+)for(k=0;kq;k+=3)if(i+j+k=ji & 5*i+3*j+k/3=qian)m+=3;sbn=i;n+;sbn=j;n+;sbn=k;n+;sb0=m;returnsb;voidfuck:print(int*sb)inti,n;n=
17、sb0;coutn/3endl;for(i=1;i=n;i+) if(i%3=0)coutsbiendl;elsecoutsbit;while(t-)cinqianji;fuck sb(qian,ji);int*a=sb.find();sb.print(a);=距离计算(友元函数)时间限制:1 Sec存限制:128 MB提交:536解决:444提交状态讨论版题目描述Point类的基本形式如下:请完成如下要求:1.实现Point类;2.为Point类增加一个友元函数double Distance(Point &a, Point &b),用于计算两点之间的距离。直接访问Point对象的私有数据进行
18、计算。3.编写main函数,输入两点坐标值,计算两点之间的距离。输入第1行:输入需计算距离的点对的数目第2行开始,每行依次输入两个点的x和y坐标输出每行依次输出一组点对之间的距离(结果直接取整数部分,不四舍五入 )样例输入21 0 2 12 3 2 4样例输出11#include#includeusingnamespacestd;classpointprivate:doublex,y;public:point(double#,doubleyy):x(#),y(yy) frienddoubledistence(point &a,point &b);doubledistence(point &a,
19、point &b)doublem,n;m=(a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);n=sqrt(m);returnn;intmain()intt;doublex1,y1,x2,y2;cint;while(t-)cinx1y1x2y2;point aa(x1,y1),bb(x2,y2);coutint(distence(aa,bb)endl;=复数运算(友元函数)时间限制:1 Sec存限制:128 MB提交:512解决:397提交状态讨论版题目描述复数类的声明如下:要求如下:1.实现复数类和友元函数addCom和outCom。2. 参考addCom函数为复
20、数类增加一个友元函数minusCom,用于实现两个复数的减法3.在main函数中,通过友元函数,实现复数的加减法和复数的输出。输入第1行:第1个复数的实部和虚部第2行:需进行运算的次数,注意:是连续运算。具体结果可参考样例 第3行开始,每行输入运算类型,以与参与运算的复数的实部与虚部。“+”表示复数相加,“-”表示复数相减。输出每行输出复数运算后的结果,复数输出格式为“(实部,虚部)”。样例输入10 103+ 20 10- 15 5+ 5 25样例输出(30,20)(15,15)(20,40)#includeusingnamespacestd;classComplexprivate:doubl
21、ereal;doubleimag;public:Complex() Complex(doubler,doublei):real(r),imag(i) voidset(doubler,doublei) real=r;imag=i;friendComplex add(Complex c1,Complex c2);friendComplex minuscom(Complex c1,Complex c2);friendvoidout(Complex c);Complex add(Complex c1,Complex c2)Complex c3;c3.real=c1.real+c2.real;c3.im
22、ag=c1.imag+c2.imag;returnc3;Complex minuscom(Complex c1,Complex c2)Complex c3;c3.real=c1.real-c2.real;c3.imag=c1.imag-c2.imag;returnc3;voidout(Complex c)cout(c.real,c.imag)r1i1;Complex a(r1,i1);cinn;Complex *sb=newComplexn;while(n-)cinchr2i2;sbi.set(r2,i2);if(ch=+)a=add(a,sbi);elseif(ch=-)a=minuscom
23、(a,sbi);out(a);=旅馆顾客统计(静态成员)时间限制:1 Sec存限制:128 MB提交:429解决:214提交状态讨论版题目描述编写程序,统计某旅馆住宿客人的总数和收入总额。要求输入客人的,输出客人编号(2015+顺序号,顺序号4位,如第1位为0001,第2位为0002,依此类推)、总人数以与收入总额。总人数和收入总额用静态成员,其他属性采用普通的数据成员。旅馆类声明如下:输入第1行:输入旅馆单个顾客房租第2行开始,依次输入顾客,0表示输入完毕。输出每行依次输出顾客信息和当前旅馆信息。包括顾客,顾客编号,旅馆当前总人数,旅馆当前总收入。样例输入150 三 四 王五 0样例输出三
24、20150001 1 150四 20150002 2 300王五 20150003 3 450#include#includeusingnamespacestd;classhotelprivate:staticintcustnum;staticfloatearning;staticfloatrent;char*name;intid;public:hotel(char*a);hotel() voidset_num() custnum=1;voidset_id() id=20150001;voidincrease_custnum() custnum+;voidset_earning() earni
25、ng=rent;voidset_rent(floatr1) rent=r1;voidincrease_id() id+;voidincrease_earning() earning=earning+rent;voiddisplay();/inthotel:custnum=0;floathotel:earning=0;floathotel:rent=0;/hotel:hotel(char*a)name=newchar50;strcpy(name,a);voidhotel:display()coutname id custnum earningr;while(1)cinn;if(n0=0)brea
26、k;hotel sb(n);if(k=0)sb.set_num();sb.set_rent(r);sb.set_earning();sb.set_id();elsesb.increase_custnum();sb.increase_id();sb.increase_earning();sb.display();i+;k+;=三维空间的点(继承)时间限制:1 Sec存限制:128 MB提交:562解决:509提交状态讨论版题目描述定义一个平面上的点C2D类,它含有一个getDistance()的成员函数,计算该点到原点的距离;从C2D类派生出三维空间的点C3D类,它的getDistance()成
27、员函数计算该点到原点的距离。试分别生成一个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#includeusingnamespacestd;
28、classC2Dprotected:doublex,y;public:C2D() C2D(double_x,double_y):x(_x),y(_y) C2D() doublegetDistance()doublem,n;m=pow(x,2)+pow(y,2);n=sqrt(m);returnn;/classC3D:publicC2Dprotected:doublez;public:C3D() C3D(double_x,double_y,double_z):C2D(_x,_y),z(_z) C3D() doublegetDistance()doublem,n;m=pow(x,2)+pow(y,
29、2)+pow(z,2);n=sqrt(m);returnn;intmain()doublex,y,x1,y1,z1,x2,y2,z2;cinxyx1y1z1x2y2z2;C2D sb1(x,y);C3D sb2(x1,y1,z1),sb3(x2,y2,z2);coutsb1.C2D:getDistance()endl;coutsb2.C3D:getDistance()endl;coutsb3.C3D:getDistance()endl;C2D sb4(sb3);coutsb4.C2D:getDistance()endl;=圆和圆柱体计算(继承)时间限制:1 Sec存限制:128 MB提交:721解决:502提交状态讨论版题目描述定义一个CPoint点类,包含数据成员x,y(坐标点)。以CPoint为基类,派生出一个圆形类CCircle,增加数据成员r(半径)和一个计算圆面积的成员函数。再以CCircle做为直接基类,派生出一个圆柱体类CCylinder,增加数据成员h(高)和一个计算体积的成员函数。生成圆和圆柱体对象,调用成员函数计算面积或体积并输出结果。