天天看点

整数展示分数和整形数的四则运算

文章结束给大家来个序程员笑话:[M]

/*
* 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;
}      

    每日一道理

有一首诗最为动人,那就是青春;有一段人生最美丽,那就是青春;有一道风景最为亮丽,那就是青春。青春,不要说已疲惫,也许你的幻想曾被现实无情毁灭,也许你的追求毫无结果,但你应该相信,没有寒风的洗礼,哪来万紫千红的春天,没有心的耕耘,哪有累累硕果?

整数展示分数和整形数的四则运算

文章结束给大家分享下程序员的一些笑话语录: 程序员打油诗   

  写字楼里写字间,写字间里程序员;

  程序人员写程序,又拿程序换酒钱。

  酒醒只在网上坐,酒醉还来网下眠;

  酒醉酒醒日复日,网上网下年复年。

  但愿老死电脑间,不愿鞠躬老板前;

  奔驰宝马贵者趣,公交自行程序员。

  别人笑我忒疯癫,我笑自己命太贱;

  不见满街漂亮妹,哪个归得程序员。