资源预览内容
第1页 / 共14页
第2页 / 共14页
第3页 / 共14页
第4页 / 共14页
第5页 / 共14页
第6页 / 共14页
第7页 / 共14页
第8页 / 共14页
第9页 / 共14页
第10页 / 共14页
亲,该文档总共14页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
课程设计报告课程设计题目:有理数运算学生姓名:冯绍文 专 业:软件工程班 级:1221815学 号:201220181502指导教师:许志文2013年 06月 20日2东华理工大学1. 有理数运算问题描述有理数是一个可以化为一个分数的数,例如 2/3,533/920 ,-12/49 都是有理数,而就为无理数。在 C+中,并没有预先定义有理数,需要时可以定义一个有理数类,将有理数的分子和分母分别存放在两个整型变量中。对有理数的各种操作都可以用重载运算符来实现。基本要求定义并实现一个有理数类,通过重载运算符+、- 、*、/ 对有理数进行算术运算,通过重载运算符=实现判定两个有理数是否相等。写一个优化函数,它的作用是使有理数约去公分母,也即是使保存的有理数分子和分母之间没有公约数(除去 1 以外) 。此外,还要定义一个将有理数转换为实数的函数,再加上构造函数和有理数输出函数。测试数据在应用程序中,创建若干有理数对象,通过带参数的构造函数使得各有理数对象值各不相同,然后分别进行各类运算,输出运算结果,检验其正确性。实现提示设有两个有理数 a/b 和 c/d,则有:(1) 有理数相加 分子=a*d+b*c;分母=b*d23(2) 有理数相减 分子=a*d-b*c;分母=b*d(3) 有理数相乘 分子=a*c; 分母=b*d(4) 有理数相除 分子=a*d; 分母=b*c优化函数在创建有理数对象时应执行,在执行其它各种运算之后也需执行它,这样可保证所存储的有理数随时都是最优的。对于判断两个有理数是否相等,由于在对有理数进行各种运算后都对其进行优化,所以判定两个有理数是否相等只需判定它们两个的分子和分母分别相等即可。选做内容重载插入()运算符,使得对有理数可以直接输入输出。设有理数输入格式为:整数 1 整数 2 /整数 1 为分子,整数 2 为分母有理数输出格式为:分子/分母以下为代码#include#include#include#include/using namespace std; 删除此处才能为类定义友元函数class rationalnumber /定义一个有理数类private:int fenmu; /有理数分母int fenzi; /有理数分子4public:rationalnumber(int a=1,int b=1); /带默认形参的构造函数void setnumber(int a,int b); /设置分子分母的函数rationalnumber operator +(rationalnumber aa); /重载加法运算符rationalnumber operator -(rationalnumber aa); /重载减法运算符rationalnumber operator *(rationalnumber aa); /重载乘法运算符rationalnumber operator /(rationalnumber aa); /重载除法运算符void display(); /有理数输出函数/ friend void add(rationalnumber a,rationalnumber b);friend rationalnumber /将约分函数设为友元函数friend double zhuan(rationalnumber r); /将有理数转换成实数函数声明friend istream /对输入流符号的重载为有元函数friend ostream /对输出流符号的重载为友元函数/* 对重载的函数形式如下:只能重载为友元函数istream ostream */;rationalnumber:rationalnumber(int a,int b)fenzi=a;fenmu=b;void rationalnumber:setnumber(int a,int b)fenzi=a;fenmu=b;rationalnumber rationalnumber:operator +(rationalnumber aa)rationalnumber c;c.fenmu=fenmu*aa.fenmu;c.fenzi=fenzi*aa.fenmu+aa.fenzi*fenmu;return c;rationalnumber rationalnumber:operator -(rationalnumber aa)rationalnumber c;c.fenmu=fenmu*aa.fenmu;c.fenzi=fenzi*aa.fenmu-aa.fenzi*fenmu;return c;rationalnumber rationalnumber:operator *(rationalnumber aa)5rationalnumber c;c.fenmu=fenmu*aa.fenmu;c.fenzi=fenzi*aa.fenzi;return c;rationalnumber rationalnumber:operator /(rationalnumber aa)rationalnumber c;c.fenmu=fenmu*aa.fenzi;c.fenzi=fenzi*aa.fenmu;return c;void rationalnumber:display() /有理数输出函数的实现cout(istream& input,rationalnumber & r) /对输入流符号的重载实现/ coutr.fenzir.fenmu;return input;double zhuan(rationalnumber r) /将有理数转换成实数的函数实现return static_cast(r.fenzi*1.0)/static_cast(r.fenmu);6rationalnumber& yuefen(rationalnumber& r) /约分函数的实现int a,b,temp;if(r.fenmur.fenzi)a=r.fenmu;b=r.fenzi;elsea=r.fenzi;b=r.fenmu;while(b!=0)temp=a%b;a=b;b=temp;r.fenzi=r.fenzi/a;r.fenmu=r.fenmu/a;return r;void add()rationalnumber a;rationalnumber b;couta;coutb;couta;coutb;couta;coutb;couta;coutb;coutr3;coutr4;coutr1: r1 r2: r2 r3: yuefen(r3) r4: yuefen(r4)endl;coutr1: r1 转换成实数为:setprecision(2)zhuan(r1)endl;coutr2: r2 转换成实数为:setprecision(2)zhuan(r2)endl;coutr3: r3 转换成实数为:setprecision(2)zhuan(r3)endl;coutr4: r4 转换成实数为:setprecision(2)zhuan(r4)endl;coutr1+r2: yuefen(r1)+yuefen(r2)=yuefen(r1+r2)endl;coutr2-r3: yuefen(r2)-yuefen(r3)=yuefen(r2-r3)endl;coutr3*r4: yuefen(r3)*yuefen(r4)=yuefen(r3*r4)endl;coutr2/r4: yuefen(r2)/yuefen(r4)=yuefen(r2/r4)endl;cout你想做有理数的简单运算吗?(y/n)endl;char c;while(1)c=getch();if(c=y)9c=xuan();if(c=5)break;else if(c=n)break;else;cout已经退出运算,按任意键退出程序endl;getch();/ system(cls);cout成功退出!endl;return 0;运行界面如下:按任意键后出现以下界面:10输入 r3的值:11这时你可以选择 y或 n进行选择,但注意必须是小写。若输入的为 y:选择不同的数字依次会出现以下界面:121314若输入的为 n:实验总结:通过此次 C+的课程设计,我熟练掌握了面向对象程序语言中的很多功能的实现,并且熟悉了很多调试程序的方法,懂得了处理错误的方法。进一步掌握面向过程和面向对象程序设计的基本方法和编程技巧,巩固所学理论知识,使理论与实际相结合。从而提高自我分析问题、解决问题的能力。通过课程设计,在各方面的能力得到了锻炼经历了这次课程设计,不仅对我的学习提供了帮助,而且在意志力方面也得到了锻炼。没有足够的耐力和信心就很难坚持对课程设计每一步的顺利进行。
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号