源代码如下:
#include <iostream>
using namespace std;
class Rational
{
int numerator; //分子
int denominator; //分母
public:
//变量初始化
Rational(int fir=1,int sec=1):numerator(fir),denominator(sec)
{
if(denominator==0)denominator=1;
}
int imax(int m, int n)//计算最大公因数
{
return n ? imax(n, m % n) : m;
}
Rational add( Rational& r1, Rational& r2)
{
int fir=r1.denominator*r2.denominator;//分母
//分子
int sec=r1.numerator*r2.denominator+r1.numerator*r2.denominator;
int m=imax(fir, sec);
Rational r(sec/m, fir/m);
return r;
}
Rational minus(Rational& r1, Rational& r2)
{
int fir=r1.denominator*r2.denominator;//分母
//分子
int sec=r1.numerator*r2.denominator-r1.numerator*r2.denominator;
int m=imax(fir, sec);
Rational r(sec/m, fir/m);
return r;
}
Rational multi(Rational& r1, Rational& r2)
{
int fir=r1.denominator*r2.denominator;//分母
//分子
int sec=r1.numerator*r2.numerator;
int m=imax(fir, sec);
Rational r(sec/m, fir/m);
return r;
}
Rational divide(Rational& r1, Rational& r2)
{
int fir=r1.denominator*r2.numerator;//分母
//分子
int sec=r1.numerator*r2.denominator;
int m=imax(fir, sec);
Rational r(sec/m, fir/m);
return r;
}
void printFormal()
{
cout<<(numerator/imax(numerator,denominator))<<"/"<<(denominator/imax(numerator,denominator))<<endl;
}
void printBoth()
{
//cout<<(numerator/imax(numerator,denominator))<<"/"<<(denominator/imax(numerator,denominator))<<endl;
cout<<numerator*1.0/denominator<<endl;
}
};
int main()
{
int firstN,firstD,secondN,secondD;
char op;
// cout<<"Please input the numerator of first Rational: ";
cin>>firstN;
// cout<<"Please input the denominator of first Rational: ";
cin>>firstD;
// cout<<"Please input the numerator of second Rational: ";
cin>>secondN;
// cout<<"Please input the denominator of second Rational: ";
cin>>secondD;
Rational r1(firstN,firstD),r2(secondN,secondD),r3;
cin>>op;
cout<<"the Formal format of the first rational is : ";
r1.printFormal();
cout<<"the Formal format of the second rational is : ";
r2.printFormal();
cout<<endl;
switch(op)
{
case '+' :
r3.add(r1,r2);
r3.printBoth();
break;
case '-' :
r3.minus(r1,r2);
r3.printBoth();
break;
case '*':
r3.multi(r1,r2);
r3.printBoth();
break;
case '/':
r3.divide(r1,r2);
r3.printBoth();
break;
default:
cout<<"Invalid operator!";
}
return 0;
}
这个add函数好像什么也没做吧,return的值你也没用上