分数的加减乘除

【问题描述】

用分数形式表示的有理数类如下(C++语言描述):
class Rational{
private:
int x,y; //成员变量 x 和 y,分别存放分子和分母
public:
Rational(int a=1,int b=1); //具有默认参数的构造函数,默认值为 1
Rational Add(Rational &r); //求两个分数的和
Rational Sub(Rational &r); //求两个分数的差
Rational Mul(Rational &r); //求两个分数的积
Rational Div(Rational &r); //求两个分数的商
Rational operator+(Rational &r); //重载“+”运算符,求两个分数的和
Rational operator-(Rational &r); //重载“-”运算符,求两个分数的差
Rational operator*(Rational &r); //重载“*”运算符,求两个分数的积
Rational operator/(Rational &r); //重载“/”运算符,求两个分数的商
int Divisor(int a,int b); //求最大公约数
friend ostream& operator<<(ostream &output,Rational &r); //以 x/y 的形式输出分数
};

【基本要求】

1.成员变量 x 和 y,分别存放分子和分母, 要求分数以最简形式存放。例如:分数 2/4 应简化为 1/2。
2.定义成员函数 Add、Sub、Mul 和 Div,求两个分数的和差积商。计算结果仍以最简形式存放。
3.重载运算符“+、-、*、/”,求两个分数的和差积商。计算结果仍以最简形式存放。
4.定义友元函数,重载“<<”运算符,以 x/y 的形式输出分数。例如,有如下的主函数:

int main(){
Rational a(5,15),b(1,-2),c;
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
c=a.Add(b); //c=a+b;
cout<<"a+b="<<c<<endl;
c=a.Sub(b); //c=a-b;
cout<<"a-b="<<c<<endl;
c=a.Mul(b); //c=a*b;
cout<<"a*b="<<c<<endl;
c=a.Div(b); //c=a/b;
cout<<"a/b="<<c<<endl;
}

运行结果如图 所示
在这里插入图片描述

#include<iostream>
#include<cmath>
using namespace std;
int fn(int a,int b);
class  fraction
{
public://外部接口
    fraction(int m=0,int n=0)//构造函数
    {
        a=m ;    
        b=n ;
    }
    friend  fraction operator + ( fraction d, fraction e)//运算符 + 重载成员函数
    {
        return  fraction(d.a*e.b+e.a*d.b,d.b*e.b);
    }
    friend  fraction operator - ( fraction d, fraction e)//运算符 - 重载成员函数
    {
        return  fraction(d.a*e.b-e.a*d.b,d.b*e.b);
    }
    friend  fraction operator * ( fraction d, fraction e)//运算符 * 重载成员函数
    {
        return  fraction(d.a*e.a,d.b*e.b);
    }
    friend  fraction operator / ( fraction d, fraction e)//运算符 / 重载成员函数
    {
        return  fraction(d.a*e.b,d.b*e.a);
    }
    void display();
private:
    int a;//分子
    int b;//分母
};

void  fraction::display()//输出函数类外实现
{

    int c;
    c=fn(a,b);
    a/=c;
    b/=c;
    if(a>0&&b<0)
    {
        cout<<"-"<<a<<"/"<<abs(b)<<endl;
    }else if(a<0&&b<0)
    {
         cout<<abs(a)<<"/"<<abs(b)<<endl;
    }else if(a>0&&b>0)
    {
        cout<<a<<"/"<<b<<endl;
    }else if(a<0&&b>0)
    {
         cout<<a<<"/"<<b<<endl;
    }
}

int fn(int a,int b)//求分子分母的公约数
{
    
    
    int a3,b3,d;
    a3=abs(a);
    b3=abs(b);
    for(d=(a3<b3?a3:b3); d>=1; d--)
        if(a3%d==0&&b3%d==0)
        {
            break;
        }
    return d;
}

int main()
{

    fraction a(5,15),b(1,-2),c;
    cout<<"a=";
    a.display();
    cout<<"b=";
    b.display();
    c=a+b;
    cout<<"a+b=";
    c.display();
    c=a-b;
    cout<<"a-b=";
    c.display();
    c=a*b;
    cout<<"a*b=";
    c.display();
    c=a/b;
    cout<<"a/b=";
    c.display();
    getchar();
    //getchar();
    system("pause");
}


有任何问题可以私聊

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是Java实现假分数加减乘除运算的示例代码: ```java public class Fraction { private int numerator; // 分子 private int denominator; // 分母 public Fraction(int numerator, int denominator) { this.numerator = numerator; this.denominator = denominator; } // 获取分子 public int getNumerator() { return numerator; } // 获取分母 public int getDenominator() { return denominator; } // 转化为假分数 public Fraction toImproperFraction() { int newNumerator = numerator + denominator * (numerator < 0 ? -1 : 1); return new Fraction(newNumerator, denominator); } // 加法 public static Fraction add(Fraction f1, Fraction f2) { int newNumerator = f1.getNumerator() * f2.getDenominator() + f2.getNumerator() * f1.getDenominator(); int newDenominator = f1.getDenominator() * f2.getDenominator(); return new Fraction(newNumerator, newDenominator).toImproperFraction(); } // 减法 public static Fraction subtract(Fraction f1, Fraction f2) { int newNumerator = f1.getNumerator() * f2.getDenominator() - f2.getNumerator() * f1.getDenominator(); int newDenominator = f1.getDenominator() * f2.getDenominator(); return new Fraction(newNumerator, newDenominator).toImproperFraction(); } // 乘法 public static Fraction multiply(Fraction f1, Fraction f2) { int newNumerator = f1.getNumerator() * f2.getNumerator(); int newDenominator = f1.getDenominator() * f2.getDenominator(); return new Fraction(newNumerator, newDenominator).toImproperFraction(); } // 除法 public static Fraction divide(Fraction f1, Fraction f2) { int newNumerator = f1.getNumerator() * f2.getDenominator(); int newDenominator = f1.getDenominator() * f2.getNumerator(); return new Fraction(newNumerator, newDenominator).toImproperFraction(); } // 输出假分数 public String toString() { int integerPart = numerator / denominator; int newNumerator = numerator % denominator; if (newNumerator == 0) { return String.valueOf(integerPart); } return integerPart + " " + newNumerator + "/" + denominator; } } ``` 接下来是一个简单的测试: ```java public class Main { public static void main(String[] args) { Fraction f1 = new Fraction(3, 4); Fraction f2 = new Fraction(1, 2); Fraction sum = Fraction.add(f1, f2); Fraction difference = Fraction.subtract(f1, f2); Fraction product = Fraction.multiply(f1, f2); Fraction quotient = Fraction.divide(f1, f2); System.out.println(f1 + " + " + f2 + " = " + sum); System.out.println(f1 + " - " + f2 + " = " + difference); System.out.println(f1 + " * " + f2 + " = " + product); System.out.println(f1 + " / " + f2 + " = " + quotient); } } ``` 输出结果应该为: ``` 3/4 + 1/2 = 5/4 3/4 - 1/2 = 1/4 3/4 * 1/2 = 3/8 3/4 / 1/2 = 3/2 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值