现在的位置: 首页 > 综合 > 正文

分数和整形数的四则运算

2012年10月12日 ⁄ 综合 ⁄ 共 4681字 ⁄ 字号 评论关闭
/*
* Copyright (c) 2013, 烟台大学计算机学院
* All rights reserved.
* 文件名称:test.cpp
* 作者:邱学伟
* 完成日期:2013 年 5 月 4 日
* 版本号:v1.0
* 输入描述:无
* 问题描述:分数和整型数的运算符重载“+ - * /等”
* 程序输出:
* 问题分析:
* 算法设计:略
*/
#include <iostream>
#include <cmath>
using namespace std;
class CFraction
{
  private:
  int nume;//分子
  int deno;//分母
  public:
  CFraction(int nu=0,int de=1):nume(nu),deno(de){}//构造函数定义,de=1分母不能为0!

  void simplify();//化简分数
  void display();//展示分数

  friend CFraction operator+(const CFraction &c1,const CFraction &c2);//分数之间的加减乘除,友元函数实现
  friend CFraction operator-(const CFraction &c1,const CFraction &c2);
  friend CFraction operator*(const CFraction &c1,const CFraction &c2);
  friend CFraction operator/(const CFraction &c1,const CFraction &c2);

  friend CFraction operator+(const CFraction &c,const int i);//分数和整数的加减乘除
  friend CFraction operator+(const int i,const CFraction &c);
  friend CFraction operator-(const CFraction &c,const int i);
  friend CFraction operator-(const int i,const CFraction &c);
  friend CFraction operator*(const CFraction &c,const int i);
  friend CFraction operator*(const int i,const CFraction &c);
  friend CFraction operator/(const CFraction &c,const int i);
  friend CFraction operator/(const int i,const CFraction &c);

  friend bool operator==(const CFraction &c1,const CFraction &c2);
  friend bool operator!=(const CFraction &c1,const CFraction &c2);
  friend bool operator<=(const CFraction &c1,const CFraction &c2);
  friend bool operator>=(const CFraction &c1,const CFraction &c2);
  friend bool operator>(const CFraction &c1,const CFraction &c2); //比较大小
  friend bool operator<(const CFraction &c1,const CFraction &c2);

  CFraction operator+();//取正
  CFraction operator-();//取反
};

//分数的化简
void CFraction::simplify()
{
    int d,n,r;
    d=fabs(deno);//分母  “fabs()” 的作用求浮点数x的绝对值。
    n=fabs(nume);//分子
    if(d<n)
    {
        r=d;
        d=n;
        n=r;
    }
    while(r=d%n)
    {
        d=n;
        n=r;
    }
    deno=deno/n;
    nume=nume/n;
    //将分母转化成正数
    if(deno<0)
    {
        deno=-deno;
        nume=-nume;
    }
}
//展示分数
void CFraction::display()
{
    cout<<"("<<nume<<"/"<<deno<<")"<<endl;
}

//分数相加
CFraction operator+(const CFraction &c1,const CFraction &c2)
{
    CFraction c;
    c.nume=c1.nume*c2.deno+c2.nume*c1.deno;
    c.deno=c1.deno*c2.deno;
    c.simplify();
    return c;
}
//分数相减
CFraction operator-(const CFraction &c1,const CFraction &c2)
{
    CFraction c;
    c.nume=c1.nume*c2.deno-c2.nume*c1.deno;
    c.deno=c1.deno*c2.deno;
    c.simplify();
    return c;
}
//分数相乘

CFraction operator*(const CFraction &c1,const CFraction &c2)
{
    CFraction c;
    c.nume=c1.nume*c2.nume;
    c.deno=c1.deno*c2.deno;
    c.simplify();
    return c;
}

//分数相除
CFraction operator/(const CFraction &c1,const CFraction &c2)
{
    CFraction c;
    c.nume=c1.nume*c2.deno;
    c.deno=c1.deno*c2.nume;
    c.simplify();
    return c;
}

//分数和整数的加法
CFraction operator+(const CFraction &c,const int i)
{
    CFraction c0;
    c0.nume=c.nume+i*c.deno;
    c0.deno=c.deno;
    c0.simplify();
    return c0;
}
CFraction operator+(const int i,const CFraction &c)
{
    CFraction c0;
    c0.nume=c.nume+i*c.deno;
    c0.deno=c.deno;
    c0.simplify();
    return c0;
}
//分数和整数的减法
CFraction operator-(const CFraction &c,const int i)
{
    CFraction c0;
    c0.nume=c.nume-i*c.deno;
    c0.deno=c.deno;
    c0.simplify();
    return c0;
}
CFraction operator-(const int i,const CFraction &c)
{
    CFraction c0;
    c0.nume=i*c.deno-c.nume;
    c0.deno=c.deno;
    c0.simplify();
    return c0;
}
//分数和整数的乘法
CFraction operator*(const CFraction &c,const int i)
{
    CFraction c0;
    c0.nume=c.nume*i;
    c0.deno=c.deno;
    c0.simplify();
    return c0;
}
CFraction operator*(const int i,const CFraction &c)
{
    CFraction c0;
    c0.nume=c.nume*i;
    c0.deno=c.deno;
    c0.simplify();
    return c0;
}
//分数和整数的除法
CFraction operator/(const CFraction &c,const int i)
{
    CFraction c0;
    c0.nume=c.nume;
    c0.deno=c.deno*i;
    c0.simplify();
    return c0;
}
CFraction operator/(const int i,const CFraction &c)
{
    CFraction c0;
    c0.nume=c.deno*i;
    c0.deno=c.nume;
    c0.simplify();
    return c0;
}
//分数取正
CFraction CFraction::operator +()
{
    return *this;
}

//分数取负号
CFraction CFraction::operator -()
{
    CFraction c;
    c.deno=-deno;
    c.nume=-nume;
    return c;
}

//比较两个分数的大小
bool operator>(const CFraction &c1,const CFraction &c2)
{
    double t1,t2;
    t1=c1.nume*c2.deno;
    t2=c2.nume*c1.deno;
    if(t1>t2)
    return true;
    else
    return false;
}
bool operator<(const CFraction &c1,const CFraction &c2)
{
    double t1,t2;
    t1=c1.nume*c2.deno;
    t2=c2.nume*c1.deno;
    if(t1<t2)
    return true;
    else
    return false;
}
bool operator >=(const CFraction &c1,const CFraction &c2)
{
    double t1,t2;
    t1=c1.nume*c2.deno;
    t2=c2.nume*c1.deno;
    if(t1<t2)
    return false;
    else
    return true;
}
bool operator <=(const CFraction &c1,const CFraction &c2)
{
    double t1,t2;
    t1=c1.nume*c2.deno;
    t2=c2.nume*c1.deno;
    if(t1>t2)
    return false;
    else
    return true;
}
bool operator ==(const CFraction &c1,const CFraction &c2)
{
    if(c1!=c2)
    return false;
    else
    return true;
}
bool operator!=(const CFraction &c1,const CFraction &c2)
{
    if(c1>c2 || c1<c2 )
    return true;
    else
    return false;
}
int main()
{
    CFraction x(1,3),y(-5,10),s;
    cout<<"分数x=1/3      y=-5/10"<<endl;
    s=+x+y;
    cout<<"+x+y=";
    s.display();
    s=x-y;
    cout<<"x-y=";
    s.display();
    s=x*y;
    cout<<"x*y=";
    s.display();
    s=x/y;
    cout<<"x/y=";
    s.display();
    s=-x+y;
    cout<<"-x+y=";
    s.display();

    x.display();
    if (x>y) cout<<"大于"<<endl;
    if (x<y) cout<<"小于"<<endl;
    if (x==y) cout<<"等于"<<endl;
    y.display();
    cout<<endl;

    CFraction c1(5,3),c2;
    //以下建议在调试环境中完成测试,
    c2=c1+5;
    c2=5+c1;

    c2=c1-5;
    c2=5-c1;

    c2=c1*5;
    c2=5*c1;

    c2=c1/5;
    c2=5/c1;

    bool b;

    b=(c1>2);
    b=(2>c1);


    return 0;
}

抱歉!评论已关闭.