有理数加法要简化c语言编程,两个有理数相加(要求输入时以分数形式,输出时也以分数形式)...

上大一,老师布置了一道题,内容就是:两个有理数相加(要求输入时以分数形式,输出时也以分数形式),这道题用了大概2个多小时吧(欢迎指导),废话不多说了,直接上程序:

#include

using namespace std;

class rational

{

public:

void setnumber(int n,int d);

void getnumber(int& n,int& d);

void gcd(int n,int d);

bool operator==(int)const;

rational operator+(const rational& r) const;

rational operator-(const rational& r) const;

rational operator*(const rational& r) const;

rational operator/(const rational& r) const;

private:

int numerator;

int denominator;

};

void rational::setnumber(int n,int d)

{

numerator=n;denominator=d;

}

void rational::getnumber(int& n,int& d)

{

n=numerator;d=denominator;

}

void rational::gcd(int n,int d)

{

int a,b,c;

a=n;b=d;

if(n>d)

{

do

{

c=a%b;

a=b;

b=c;

}while(c=0);

numerator=n/a;

denominator=d/a;

}

else

{

do

{

c=b%a;

b=a;

a=c;

}while(c=0);

numerator=n/b;

denominator=d/b;

}

}

istream& operator>>(istream& is,rational& r)

{

int n,d;

is>>n;

is.ignore(1);

is>>d;

r.setnumber(n,d);

return is;

}

ostream& operator<

{

int n,d;

r.getnumber(n,d);

os<

return os;

}

bool rational::operator==(int)const

{

if(denominator==0)

return true;

else

return false;

}

rational rational::operator+(const rational& r) const

{

rational temp;

temp.numerator=numerator*r.denominator+r.numerator*denominator;

temp.denominator=denominator*r.denominator;

return temp;

}

rational rational::operator-(const rational& r) const

{

rational temp;

temp.numerator=numerator*r.denominator-r.numerator*denominator;

temp.denominator=denominator*r.denominator;

return temp;

}

rational rational::operator*(const rational& r) const

{

rational temp;

temp.numerator=numerator*r.numerator;

temp.denominator=denominator*r.denominator;

return temp;

}

rational rational::operator/(const rational& r) const

{

rational temp;

temp.numerator=numerator*r.denominator;

temp.denominator=denominator*r.numerator;

return temp;

}

void main()

{

int n,d;

char ch;

rational r1;

rational r2;

rational r3;

cin>>r1;

cin>>ch;

cin>>r2;

if(r1==0||r2==0)

{

cout<

}

else

{

switch(ch)

{

case‘+‘:

r3=r1+r2;

break;

case‘-‘:

r3=r1-r2;

break;

case‘*‘:

r3=r1*r2;

break;

case‘/‘:

r3=r1/r2;

break;

default:

cout<

}

r3.getnumber(n,d);

r3.gcd(n,d);

r3.getnumber(n,d);

cout<

}

}

由于对博客不熟悉,不会发图片,就这样子了,看不懂的可以提问题。

时间: 04-06

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值