- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c关于有理数类的课程设计
1. 有理数运算
问题描述
有理数是一个可以化为一个分数的数,例如2/3,533/920,-12/49都是有理数,而就为无理数。在C++中,并没有预先定义有理数,需要时可以定义一个有理数类,将有理数的分子和分母分别存放在两个整型变量中。对有理数的各种操作都可以用重载运算符来实现。
基本要求
定义并实现一个有理数类,通过重载运算符+、-、*、/对有理数进行算术运算,通过重载运算符==实现判定两个有理数是否相等。写一个优化函数,它的作用是使有理数约去公分母,也即是使保存的有理数分子和分母之间没有公约数(除去1以外)。此外,还要定义一个将有理数转换为实数的函数,再加上构造函数和有理数输出函数。
测试数据
在应用程序中,创建若干有理数对象,通过带参数的构造函数使得各有理数对象值各不相同,然后分别进行各类运算,输出运算结果,检验其正确性。
实现提示
设有两个有理数a/b和c/d,则有:
有理数相加 分子=a*d+b*c;分母=b*d
有理数相减 分子=a*d-b*c;分母=b*d
有理数相乘 分子=a*c; 分母=b*d
有理数相除 分子=a*d; 分母=b*c
优化函数在创建有理数对象时应执行,在执行其它各种运算之后也需执行它,这样可保证所存储的有理数随时都是最优的。对于判断两个有理数是否相等,由于在对有理数进行各种运算后都对其进行优化,所以判定两个有理数是否相等只需判定它们两个的分子和分母分别相等即可。
选做内容
重载插入()和提取()运算符,使得对有理数可以直接输入输出。设有理数输入格式为:
整数1 整数2 //整数1为分子,整数2为分母
有理数输出格式为:
分子/分母
以下为代码
#includeiostream.h
#includeconio.h
#includestdio.h
#includeiomanip.h
//using namespace std; 删除此处才能为类定义友元函数
class rationalnumber //定义一个有理数类
{
private:
int fenmu; //有理数分母
int fenzi; //有理数分子
public:
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 yuefen(rationalnumber r); //将约分函数设为友元函数
friend double zhuan(rationalnumber r); //将有理数转换成实数函数声明
friend istream operator(istream input,rationalnumber r); //对输入流符号的重载为有元函数
friend ostream operator(ostream output,rationalnumber r); //对输出流符号的重载为友元函数
/* 对“”和“”重载的函数形式如下:只能重载为友元函数
istream operator(istream,自定义类);
ostream operator(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
文档评论(0)