C++ 分數類

來源:互聯網
上載者:User

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.