• C++ 分数类


    class fraction
    {
    private:
    int above;         //分子
    int below;         //分母
    void reduction();            //约分
    fraction makeCommond(fraction); //通分
     
    public:
    fraction(int a=0,int b=1){       //构造函数
      above=a;below=b;
    }
    fraction add(fraction);      //两分数相加
    fraction sub(fraction);      //本分数减去实参分数
    fraction mul(fraction);      //两分数相乘
    fraction div(fraction);      //本分数除以实参分数
    fraction reciprocal();       //求倒数
    bool equal(fraction);        //等于运算
    bool greaterThan(fraction);  //大于运算
    bool lessThan(fraction);     //小于运算
    void display();              //显示分数
    void input();                //输入分数
    };

    void fraction::reduction()
    {
    int i,comdiv,small,max;

    if(this->above<this->below){
      small=this->above;
      max=this->below;
    }else {
      small=this->below;
      max=this->above;
    }

    for(i=small;i>1;i--){
      if(small%i==0 &max%i==0 )
       break;
    }
    comdiv=i;//最大公约数

    if(i!=0){
      this->above/=i;
      this->below/=i;
    }
    }
    fraction fraction::makeCommond(fraction frac)
    {
    int b1=this->below,b2=frac.below, m,s;
    if(b1>b2){
      m=b1%b2;
      s=b2;
    }
    else{
      m=b2%b1;
      s=b1;
    }
     
    while(m>0){
      int res=s%m;
      s=m,m=res;
    }
     

    int small=(b1*b2)/s;
    this->above=this->above*(small/this->below);
    frac.above=frac.above*(small/frac.below);
    this->below=small;
    frac.below=small;
    return frac;
    }

    fraction fraction::add(fraction fr)
    {
    fraction myFraction;
    myFraction.above=this->above*fr.below+fr.above*this->below;
    myFraction.below=this->below*fr.below;
     
    myFraction.reduction();

    return myFraction;
    }
    fraction fraction::sub(fraction fr)
    {
    fraction myFraction;
    myFraction.above=this->above*fr.below-fr.above*this->below;
    myFraction.below=this->below*fr.below;
     
    myFraction.reduction();

    return myFraction;
    }

    fraction fraction::mul(fraction fr)
    {
    fraction myFraction;
     
    myFraction.above=this->above*fr.above;
    myFraction.below=this->below*fr.below;
     
    myFraction.reduction();

    return myFraction;
    }
    fraction fraction::div(fraction fr)
    {
    fraction myFraction;
     
    myFraction.above=this->above*fr.below;
    myFraction.below=this->below*fr.above;
     
    myFraction.reduction();

    return myFraction;
    }

    fraction fraction::reciprocal()
    {
    fraction myFraction(this->above,this->below);
    if(this->above!=0){
      int temp=myFraction.above;
      myFraction.above=myFraction.below;
      myFraction.below=temp;
    }
    return myFraction;
    }

    bool fraction::equal(fraction frac)       //等于运算
    {
    bool result=false;
    if(this->sub(frac).above==0)
      result=true;

    return result;
    }
    bool fraction::greaterThan(fraction frac) //大于运算
    {
    bool result=false;
    if(this->sub(frac).above>0)
      result=true;
    return result;

    }
    bool fraction::lessThan(fraction frac)     //小于运算
    {
    bool result=false;

    if(this->sub(frac).above<0)
      result=true;

    return result;

    }

    void fraction::display()
    {
    cout<<this->above<<endl<<"---"<<endl<<this->below<<endl<<endl<<endl;
    }
    void fraction::input()              //输入分数
    {
      cout<<"请输入分数的分子: ";
      cin>>this->above;
    while(true)
    {
      cout<<"请输入分数的分母(不等于零): ";
      cin>>this->below;
      if(this->below==0)
      {
       cout<<"分母不能为零!";
      }
      else
       break;
    };

    }

    int main()
    {
    //fraction frac(5,24),frac2(7,16);
    //fraction frac(7,9),frac2(8,11);
    fraction frac(5,20),frac2(50,200);
    frac.input();
    frac2.input();

    frac.display();
    frac2.display();
    cout<<"分数加法"<<endl;
    frac.add(frac2).display();
     
    cout<<"分数减法"<<endl;
    frac.sub(frac2).display();

    cout<<"分数乘法"<<endl;
    frac.mul(frac2).display();

    cout<<"分数除法"<<endl;
    frac.div(frac2).display();

    cout<<"分数倒数"<<endl;
    frac.reciprocal().display();


    char *str;

    cout<<"分数相等比较: ";
    if(frac.equal(frac2))
      str="相等";
    else
      str="不相等";
    cout<<str<<endl<<endl;

    cout<<"分数大于比较: ";
    if(frac.greaterThan(frac2))
      str="大";
    else
      str="小";
    cout<<str<<endl<<endl;

    cout<<"分数小于比较:";
    if(frac.lessThan(frac2))
      str="小";
    else
      str="大";
    cout<<str<<endl<<endl;


    return 0;
    }

  • 相关阅读:
    图片处理中的Dithering技术
    网络I/O模型
    并发编程(二)
    并发编程(一)
    socket编程(二)
    socket编程(一)
    异常处理
    软件开发规范
    面向对象进阶
    多态与封装
  • 原文地址:https://www.cnblogs.com/joe62/p/1684971.html
Copyright © 2020-2023  润新知