(有理数类 )创建一个名为Rational的类,进行分数运算。

原题目是

 (有理数类 )创建一个名为Rational的类,进行分数运算。编写一个程序测试这个类。

用整数变量表示类的private数据:numerator( 分子)和denominator(分母)。提供一个构造函数,它使这个类的对象在声明时得以初始化。这个构造函数应该包含默认值,以防未提供初始化值的情况,并且它应该以简化的形式保存分数。例如,分数2/4应在对象中保存成numerator为1、denominator为2的形式。对下列任务,提供完成它们的public成员函数:

a)两个Rational值相加,结果应以简化的形式保存。

b)两个Rational值相减,结果应以简化的形式保存。

c)两个Rational值相乘,结果应以简化的形式保存。

d)两个Rational值相除,结果应以简化的形式保存。

e)以a/b的形式打印Rational值,其中a是分子, b是分母。

f)以浮点数的形式打印Rational值。

要求:测试时创建两个对象,如3/2和1/6,依次调用a-d对应的函数,并分别以e和f两种方式输出结果。


如需系统判分,请依次输入分数的分子和分母,需要输入两个分数,如:

3 2

1 6

结果:

5/3
1.66667
4/3
1.33333
1/4
0.25
9/1
9

 

#include <iostream>

using namespace std;

class Rational
{
    int numerator, denominator;
public:
    //变量初始化
    Rational(int fir=1,int sec=1):numerator(fir),denominator(sec)
    {
        if(denominator==0)denominator=1;
    }
    int imax(int m, int n)//计算最大公因数
    {
        while(m%n)
        {
            int temp=m;
            m=n;
            n=temp%n;
        }
        return n;
    }
    Rational add(const Rational& r)
    {
        int fir=denominator*r.denominator;//分母
        //分子
        int sec=numerator*r.denominator+r.numerator*denominator;
        int m=imax(fir, sec);
        Rational r1(sec/m, fir/m);
        return r1;
    }
    Rational subtract(const Rational& r)
    {
        int fir=denominator*r.denominator;//分母
        //分子
        int sec=numerator*r.denominator-r.numerator*denominator;
        int m=imax(fir, sec);
        Rational r1(sec/m, fir/m);
        return r1;
    }
    Rational mutiply(const Rational& r)
    {
        int fir=denominator*r.denominator;//分母
        //分子
        int sec=numerator*r.numerator;
        int m=imax(fir, sec);
        Rational r1(sec/m, fir/m);
        return r1;
    }
    Rational divide(const Rational& r)
    {
        int fir=denominator*r.numerator;//分母
        //分子
        int sec=numerator*r.denominator;
        int m=imax(fir, sec);
        Rational r1(sec/m, fir/m);
        return r1;
    }
    void Display()
    {
        cout<<numerator<<"/"<<denominator<<endl;
        cout<<numerator*1.0/denominator<<endl;
    }
};

int main()
{
    int m, n, j, k;
    cin>>m>>n>>j>>k;
    Rational r1(m, n), r2(j, k);
    Rational r3;
    r3=r1.add(r2);
    r3.Display();
    r3=r1.subtract(r2);
    r3.Display();
    r3=r1.mutiply(r2);
    r3.Display();
    r3=r1.divide(r2);
    r3.Display();
    return 0;
}
 

 注意!!!

这段代码仅能满足上述答案实例,只是其中诸如const Rational& r 引用一个新的类的方式比较方便和简化,但实际要考虑求最大公因数时分子分母大小问题,还有减法时的正负问题,取绝对值问题等修改方向

本人也是小白,觉得上面那种类的调用和引用方式很好,希望可以帮到其他小白

  • 9
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
有理数创建一个名为 Rational,用于对分数进行算术运算。编写一个程序来测试你的。使用整数变量来表示的私有实例变量——分子分母。 提供一个构造函数,使该的对象能够在声明时进行初始化。构造函数应以简化形式存储分数分数 2/4 等价于 1/2,并将作为分子中的 1 和分母中的 2 存储在对象中。 如果没有提供初始值设定项,请提供默认值为 1 的无参数构造函数。 提供执行以下每个操作的公共方法: a) 将两个有理数相加:相加的结果应以简化形式存储。 b) 两个有理数相减:相减的结果应以简化形式存储。 c) 将两个有理数相乘:相乘的结果应以简化形式存储。 d) 将两个有理数相除:相除的结果应以简化形式存储。 e) 以 a/b 的形式返回有理数的字符串表示形式,其中 a 是分子,b 是分母。 f) 以浮点格式返回有理数的字符串表示形式. (考虑提供格式化功能,的用户能够指定小数点右侧的精度位数。) 【Sample output 1】 Enter numerator 1: 12 Enter denominator 1: 3 Enter numerator 2: 5 Enter denominator 2: 14 Enter precision: 3 a=4/1 b=5/14 a + b = 61/14 = 4.357 a - b = 51/14 = 3.643 a * b = 10/7 = 1.429 a / b = 56/5 = 11.200 【Sample output 2】 Enter numerator 1: 1 Enter denominator 1: 4 Enter numerator 2: 75 Enter denominator 2: 35 Enter precision: 1 a=1/4 b=15/7 a + b = 67/28 = 2.4 a - b = -53/28 = -1.9 a * b = 15/28 = 0.5 a / b = 7/60 = 0.1 Note: The red texts are inputed ,others are output texts. Just use a space to seperate words

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值