C++实现有理数类加减乘除

C++上机题,题目如下:
设计一个有理数类,要求如下:
有理数有整数类型的分子、分母组成,通过运算符重载,完成有理数的加、减、乘、除运算,运算结果要求为最简分数,即分子分母没有公约数。在主程序中测试类与方法。

不多废话,完整代码我已经贴出来了,注释也很详细,唯一要注意的就是分母不能为0和第二个有理数的分子也不能为0(因为除数不能为0)。希望对初学C++,碰巧有类似练习的童鞋有帮助@_@

#include 
#include 
//numerator分子  denominator分母
using namespace std;
class Rational {
public:
    Rational(int n=0,int d=1):num(n),den(d) {} //有参构造函数

    friend Rational operator+(const Rational &r1,const Rational &r2);//相加
    friend Rational operator-(const Rational &r1,const Rational &r2);//相减
    friend Rational operator/(const Rational &r1,const Rational &r2);//相除
    friend Rational operator*(const Rational &r1,const Rational &r2);//相乘


    void simplify();//对有理数进行化简
    void display();  //显示结果
private :
    double num;
    double den;

};
Rational operator+(const Rational &r1,const Rational &r2) {
    Rational r;
    r.num = r1.den*r2.num+r1.num*r2.den;//相加的分子等于r1分母和r2分子相乘,r1分子和r2分母相乘之和
    r.den = r1.den*r2.den;//分母等于两个有理数分母的相乘
    r.simplify();//调用simplify对结果进行化简
    return r;//将结果返回
}
Rational operator-(const Rational &r1,const Rational &r2) {
    Rational r;
    r.num = r1.num*r2.den-r1.den*r2.num;//相加的分子等于r1分母和r2分子相乘,r1分子和r2分母相乘之差
    r.den = r1.den*r2.den;//分母等于两个有理数分母的相乘
    r.simplify();
    return r;
}
Rational operator/(const Rational &r1,const Rational &r2) {
    Rational r;
    if(r1.den==0||r2.den==0||r2.num==0) {
        cout<<"分母或者除数不能为0"<else if(r1.num==0) {
        cout<<"0/0"<else {
        r.num = r1.num*r2.den;//相除的分子等于r1分子和r2分母相乘
        r.den = r1.den*r2.num;//分母等于两个r1分母和r2分子相乘
        r.simplify();
        return r;
    }
}
Rational operator*(const Rational &r1,const Rational &r2) {
    Rational r;
    if(r1.den==0||r2.den==0) {
        cout<<"分母不能为0"<else if(r1.num==0||r2.num==0) {
        cout<<"0/0"<else {
        r.num = r1.num*r2.den;//分子等于r1分子和r2分母相乘
        r.den = r1.den*r2.num;//分母等于两个r1分母和r2分子相乘
        r.simplify();
        return r;
    }
}
void Rational::simplify() {
    int i,j,temp;
    i=abs(den);
    j=abs(num);
    //如果i对j取余不为0,辗转相除法求最大公约数
    while(temp=i%j) {
        i=j;
        j=temp;
    }
    den/=j;
    num/=j;
    if(den<0) {
        den=-den;
        num=-num;
    }
}
void Rational::display() {
    if(num==0||den==0) {

    } else {
        cout<"/"<int main() {
    Rational r;
    Rational r1(1,3),r2(0,5);
    r=r1+r2;
    r.display();
    r=r1-r2;
    r.display();
    r=r1*r2;
    r.display();
    r=r1/r2;
    r.display();
    return 0;
}

你可能感兴趣的:(C++)