西安交大C++程序设计第八章作业.doc
《西安交大C++程序设计第八章作业.doc》由会员分享,可在线阅读,更多相关《西安交大C++程序设计第八章作业.doc(26页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流西安交大C+程序设计第八章作业.精品文档.西安交通大学实验报告课程_计算机程序设计_实验名称_类与对象_第 1 页 共 47 页系 别_ _ _ 实 验 日 期 2014 年 5 月 17 日专业班级_ _组别_ 实 验 报 告 日 期 2014 年 5 月 18日姓 名_ _学号_ _ 报 告 退 发 ( 订正 、 重做 )同 组 人_ 教 师 审 批 签 字一、 实验目的掌握构造函数、析构函数的用法、类中数据对象初始化的不同方法。二、实验内容 (一)第一题: 设计并测试一个名为Ellipse的椭圆类,其属性为其圆心坐标及半长轴和半短轴的长
2、度。设计一个构造函数对这些属性进行初始化,并通过成员函数计算椭圆的面积。1.源程序代码:#includeusing namespace std;class Ellipsedouble a,b,x,y,s;public:Ellipse();Ellipse(double,double,double,double);void init(double,double,double,double);void calculate();void print();Ellipse:Ellipse()a=8;b=5;x=3.2;y=9.6;Ellipse:Ellipse(double m,double n,doub
3、le p,double q)init(m,n,p,q);void Ellipse:calculate()s=x*y*3.1415926;void Ellipse:print()cout中心坐标为:(x,y)n;cout面积为:sendl;void Ellipse:init(double m,double n,double p,double q)a=m;b=n;x=p;y=q;int main()Ellipse ellipse1,ellipse2(2.5,3.2,4.5,5.4);/依次为a,b,x,y;cout预设的是:a=8;b=5;x=3.2;y=9.6;n;cout输入的是:ellips
4、e1,ellipse2(2.5,3.2,4.5,5,4);n;double x,y,a,b;cout输入之前的值:endlellipse1:n;ellipse1.calculate();ellipse1.print();coutellipse2:n;ellipse2.calculate();ellipse2.print();coutxy;coutab;cout写入后的结果:n;coutellipse2:n;ellipse2.init(a,b,x,y);ellipse2.calculate();ellipse2.print();return 0;2.实验结果:(二)第二题: 仿照Date类设计一
5、个Time类,设计多个重载的构造函数,可以设置时间、进行时间的加减运算,按照可能的格式输出时间。1.源程序代码:#includeusing namespace std;class Timeint hour,minute,second;public:Time();Time(int,int,int);void init(int,int,int);void plus(Time& t);/由此可以引用另一Time类中的成员void minus(Time& t);void print_hms();void print_hsm();void print_mhs();void print_msh();voi
6、d print_shm();void print_smh();Time:Time(int h,int m,int s)init(h,m,s);Time:Time()hour=12;minute=0;second=0;void Time:init(int h,int m,int s)second=s%60;minute=(m+s/60)%60;hour=(h+m/60)%24;void Time:plus(Time& t)hour=hour+t.hour;minute=minute+t.minute;second=second+t.second;init(hour,minute,second);
7、void Time:minus(Time& t)int sum=(second+60*minute+3600*hour)-(t.second+60*t.minute+t.hour*3600);second=sum%60;minute=(sum/60)%60;hour=(sum/3600)%24;init(hour,minute,second);void Time:print_hms()couthour-minute-secondendl;void Time:print_hsm()couthour-second-minuteendl;void Time:print_mhs()coutminute
8、-hour-secondendl;void Time:print_msh()coutminute-second-hourendl;void Time:print_shm()coutsecond-hour-minuteendl;void Time:print_smh()coutsecond-minute-hourendl;int main()Time time1,time2(12,34,56);int h,m,s,h2,m2,s2;cout初始按照时分秒输出:n;time1.print_hms();time2.print_hms();couthms;time1.init(h,m,s);cout输
9、入时间为:n;cout 时分秒:;time1.print_hms();cout 时秒分:;time1.print_hsm();cout 分时秒:;time1.print_mhs();cout 分秒时:;time1.print_msh();cout 秒时分:;time1.print_shm();cout 秒分时:;time1.print_smh();couth2m2s2;time2.init(h2,m2,s2);couti;cout运算结果为:;switch(i)case +:time1.plus(time2);time1.print_hms();break;case -:time1.minus
10、(time2);time1.print_hms();break;default:coutERROR!n;return 0;2.实验结果:(1)输入秒大于60,两时间相加大于24小时:(2)相减,时分秒相互有影响:(3)输入运算类型异常:(3)问题分析:功能:能够以各种形式输出时间;对输入的时间能够进行进位化简处理,即输入超出范围时自动进位,如输入78秒,则能变为18同时分钟数加1;对于加法能够实现24小时循环,即超过24小时时变为(第二天)0小时;对于减法也能够实现时分秒联动。不足之处:不能实现减法的循环。即:如果一个小的时间减去一个大的时间,会输出负数。当然这只是说相减应该到前一天的情况。在
11、一天内是能实现时分秒的变化的。如12:34:56减去8:56:57,则能够输出时间为3:37:59.另外,没有考虑输入小于0的可能。(三)第三题: 创建一个Rational类,执行带分数的算术运算。用两个整数的私有成员分别表示有理数的分子、分母。提供构造函数初始化类,构造函数保证分数已为最简形式。同时也提供无参数的构造函数,默认分子为0,分母为1。提供6个公开的方法:相加、相减、相乘、相除、以a/b的形式显示有理数、以浮点数的形式显示有理数。1.源程序代码: #include#includeusing namespace std;class Rationalint n,d;/n为分子,d为分母
12、public:Rational();/默认初始Rational(int,int);/初始化void init(int,int);/赋值函数void simplify();void plus(Rational& ra);/加法void minus(Rational& ra);/减法void multiply(Rational& ra);/乘法int divide(Rational& ra);/除法void print_youli();/有理数输出void print_fudian();/浮点输出Rational:Rational()/默认初始n=0;d=1;Rational:Rational(i
13、nt nu,int de)/nu是分子,de是分母init(nu,de);/初始化void Rational:simplify()/化简函数int i,m;/定义变量i,m,i用来逐个上升至分子分母中较小者逐个判断是否为公约数,m用来记录公约数do/循环m=1;for(i=1;i=fabs(n*1.0)&i1);void Rational:init(int nu,int de)/存入第一个分数n=nu;d=de;simplify();void Rational:plus(Rational& ra)n=n*ra.d+d*ra.n;d=d*ra.d;simplify();void Rational
14、:minus(Rational& ra)n=n*ra.d-d*ra.n;d=d*ra.d;simplify();void Rational:multiply(Rational& ra)n=n*ra.n;d=d*ra.d;simplify();int Rational:divide(Rational& ra)if(ra.n=0)coutERROR!;return 0;n=n*ra.d;d=d*ra.n;simplify();return 1;void Rational:print_youli()coutn/d;void Rational:print_fudian()coutn*1.0/d;int
15、 main()Rational rational1,rational2(1,2);int nu1,de1,nu2,de2;cout初始值:nrational1:n有理数:;rational1.print_youli();cout 浮点型:;rational1.print_fudian();coutnrational2:n有理数:;rational2.print_youli();cout 浮点型:;rational2.print_fudian();coutn输入初始值:n;coutnu1de1;if(de1=0)coutERROR!n;return 0;rational1.init(nu1,de
16、1);coutnu2de2;if(de2=0)coutERROR!n;return 0;rational2.init(nu2,de2);cout输入的是:nrational1:;rational1.print_youli();cout rational2:;rational2.print_youli();couti;switch(i)case +:rational1.plus(rational2);break;case -:rational1.minus(rational2);break;case *:rational1.multiply(rational2);break;case /:if(
17、rational1.divide(rational2)=0)/经验:这里首先执行了simplify操作,故非零时可以输出结果!/判断是否可以进行除法的操作return 0;break;default:coutERROR!n;return 0;cout计算结果为:;rational1.print_youli();cout 即:;rational1.print_fudian();coutendl;return 0;2.实验结果:(1)相加:(2)相减:(3)相乘:(4)相除:(5)化简功能:(6)分母为0: (6)除数为0:(7)运算符异常:(3)问题分析:功能:能够实现化简功能,包括对输入的两个
18、分数及其计算结果;进行加减乘除运算输出结果;判断输入的分数是否合理即分母是否为0;判断除法是否能够进行即除数是否为0;判断运算类型是否合理。收获:从if(rational1.divide(rational2)=0)return 0;break;一句可以看出:if中的语句首先被执行,然后判断返回值是否合理,因此,当结果非0时能够cout。(四)实验题目四:完善PPT汽车类,增加数据成员10个曲目库,增加下列成员函数:构造函数、析构函数、斜线下降运动函数、倒车函数、选播歌曲函数。选播歌曲函数具体要求:先显示所有歌曲名称,用户选1或2或3.,播放序号的歌曲。 1.程序源代码:#include#inc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 西安 交大 C+ 程序设计 第八 作业
限制150内