<数据结构>创建一个有理数类

有理数类

内容:设计并实现抽象数据类型“有理数”,有理数的基本操作包括:两个有理数的加、减、乘、除等(包括有理数的创建和输出)。
同时
(1)有理数的类型,我们可以构造成一个结构体类型,这个结构体由两个整数构成,分别表示有理数的分子和分母。
(2)在初始化或创建一个有理数时,可以给出有理数的分子和分母来创建一个有理数;也可以给出一个小数形式的有理数,来计算对应的分子分母来创建一个有理数(可设置一个允许的计算误差)。
(3)以分数形式创建有理数时,要处理分母为零的异常情况。
(4)输出不能有类似于4/4、3/6这样的结果数据。
(5)要有能根据用户输入选择不同运算的菜单选择界面。
代码如下:

#include<iostream>
#include<stdlib.h>           //头文件
#include<cstdio>
using namespace std;

//分数形式
class fractionsForm          //定义一个有理数类
{
   
public:
    fractionsForm(int numerator, int denominator);                   //构造函数,参数整数分子,分母
    friend fractionsForm operator+(fractionsForm r1, fractionsForm r2);		//重载加法运算符,参数为类的引用
    friend fractionsForm operator-(fractionsForm r1, fractionsForm r2);		//重载减法,除法,乘法运算符
    friend fractionsForm operator*(fractionsForm r1, fractionsForm r2);
    friend fractionsForm operator/(fractionsForm r1, fractionsForm r2);
    friend istream& operator>>(istream& in, fractionsForm& r);		//重载流输入运算符
    friend ostream& operator<<(ostream& out, fractionsForm& r);		//重载流输出运算符
    fractionsForm normalize1();                                      // 定义一个分数化简函数
private:
    void normalize();										//私有成员函数,化简函数
    int numerator;											//私有数据
    int denominator;
};


fractionsForm::fractionsForm(int num, int denom)
{
   
    numerator = num;
    if (denominator != 0)   denominator = denom;				// 分母不能为0,在流输入运算符重载中也有定义
    else denominator = 1;
    normalize();
}
//标准化
void fractionsForm::normalize()
{
   

    //求出分子和分母的最大公约数,用欧几里得算法
    int a = abs(numerator);
    int b = abs(denominator);
    while (b > 0)
    {
   
        int t = a % b;
        a = b;
        b = t;
    
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值