分数计算器

// 分数计算器.cpp : Defines the entry point for the console application.
//


#include "stdafx.h"


#ifndef _TGR_FRACTIONS_H
#define _TGR_FRACTIONS_H
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<iostream.h>


class fraction//分数类定义
{
public:
fraction();//默认的构造函数
fraction(int initn,int initd);//重载构造函数
int numerator() const;//取分子,const成员函数,不能修改数据成员
int denominator() const;//取分母
double decimal() const;//将分数转换为对应小数
fraction absval() const;//分数的绝对值
void setnum(int newnum);//用整数设置分子
void setden(int newden);//用整数设置分母
void simplify();//约分化简分数
void recip();//分子分母转置
    fraction & operator+=(int rhs);//重载分数与整数运算符+=
private:
int n;//分数的分子numerator
int d;//分数的分母denominator
};//全局函数
int GCF(int x,int y);//求x,y的最大公因子
fraction operator+(const fraction &lhs,const fraction &rhs);
fraction operator+(const fraction &lhs,int rhs);
fraction operator-(const fraction &lhs,const fraction &rhs);
fraction operator-(const fraction &lhs,int rhs);
fraction operator*(const fraction &lhs,const fraction &rhs);
fraction operator*(const fraction &lhs,int rhs);
fraction operator/(const fraction &lhs,const fraction &rhs);
fraction operator/(const fraction &lhs,int rhs);
fraction operator^(const fraction &base,int exp);
bool operator==(const fraction &lhs,const fraction &rhs);
bool operator!=(const fraction &lhs,const fraction &rhs);
bool operator>=(const fraction &lhs,const fraction &rhs);
bool operator<=(const fraction &lhs,const fraction &rhs);
bool operator> (const fraction &lhs,const fraction &rhs);
bool operator< (const fraction &lhs,const fraction &rhs);
bool operator==(const fraction &lhs,int rhs);
bool operator!=(const fraction &lhs,int rhs);
bool operator>=(const fraction &lhs,int rhs);
bool operator<=(const fraction &lhs,int rhs);
bool operator> (const fraction &lhs,int rhs);
bool operator< (const fraction &lhs,int rhs);
ostream & operator<<(ostream &os,const fraction &f);
istream & operator>>(istream &is,fraction &f);
void PrintAsMixed(ostream &os,const fraction &f);
#endif




fraction::fraction():n(0),d(1){}
fraction::fraction(int initn ,int initd):n(initn),d(initd)
{


}
int fraction ::numerator()const
{
return n;
}
int fraction::denominator() const
{
return d;
}
double fraction::decimal() const
{
return double(n)/double(d);
}
fraction fraction ::absval()const
{
fraction returnValue(abs(n),abs(d));
return returnValue;
}
void fraction::setnum(int newnum)
{
if(newnum!=0)
n=newnum;
else
{
cout<<"Error:Attemeted to set denominator to zero!\n"
<<"Press any key to terminate";
getch();
abort();
}
}


void fraction::setden(int newden)//用整数设置分母
{
   if(newden!=0)
d=newden;
else
{
cout<<"Error:Attemeted to set denominator to zero!\n"
<<"Press any key to terminate";
getch();
abort();
}


}




void fraction::simplify()
{
int r=GCF(n,d);
n/=r;
d/=r;
}
void fraction::recip()
{
int temp=n;
n=d;
d=temp;
}
fraction & fraction::operator +=(int rhs)
{
fraction newrhs(rhs,d);//??????
    fraction newrhs1;
newrhs1=*this + newrhs;
return *this;
}
int GCF(int x,int y)
{
int r=x%y;
if(r==0)
return y;
else
return GCF(y,r);
}
fraction operator+(const fraction & lhs,const fraction & rhs)
{
fraction sum;
int newnum=(lhs.numerator()*rhs.denominator())
+(rhs.numerator()*lhs.denominator());
int newden=(lhs.denominator()*rhs.denominator());
sum.setnum(newnum);
sum.setden(newden);
sum.simplify();
return sum;
}
fraction operator+(const fraction & lhs,int rhs)
{
fraction newrhs(rhs,lhs.denominator() );
return lhs+newrhs;
}
fraction operator-(const fraction &lhs,const fraction & rhs)
{
fraction newrhs=rhs;
newrhs.setnum(-rhs.numerator());
return lhs+newrhs;
}
fraction operator-(const fraction &lhs,int  rhs)
{
fraction newrhs(rhs,-1);
return lhs+newrhs;
}
fraction operator *(const fraction &lhs,const fraction & rhs)
{
fraction product;
int newnum=lhs.numerator()*rhs.numerator();
int newden=lhs.denominator()*rhs.denominator();
product.setnum(newnum);
product.setden(newden);
product.simplify();
return product;
}


fraction operator *(const fraction &lhs,int rhs)
{
fraction prod(lhs.numerator() * rhs,lhs.denominator());
prod.simplify();
return prod;
}
fraction operator/(const fraction&lhs,const fraction&rhs)
{
if(rhs==0)
{
cout<<"Error:Division by zero attempted!\n"
<<"Press any key to terminate";
getch();
abort();
}
fraction newrhs=rhs;
newrhs.recip();
return lhs*newrhs;
}
fraction operator/(const fraction &lhs,int rhs)
{
if(rhs==0)
{
cout<<"Error:Division by zero attempted!\n"
<<"Press any key to terminate";
getch();
abort();
}
fraction quot(lhs.numerator(),lhs.denominator() * rhs);
quot.simplify();
return quot;
}
fraction operator^(const fraction &base,int exp)
{
fraction returnValue;
returnValue.setnum(int(pow(base.numerator(),exp)));
returnValue.setden(int(pow(base.denominator(),exp)));
return returnValue;
}
bool operator==(const fraction &lhs,const fraction &rhs)
{return lhs.decimal()==rhs.decimal();}
bool operator!=(const fraction &lhs,const fraction &rhs)
{return lhs.decimal()!=rhs.decimal();}
bool operator>=(const fraction &lhs,const fraction &rhs)
{return lhs.decimal()>=rhs.decimal();}
bool operator<=(const fraction &lhs,const fraction &rhs)
{return lhs.decimal()<=rhs.decimal();}
bool operator>(const fraction &lhs,const fraction &rhs)
{return lhs.decimal()>rhs.decimal();}
bool operator<(const fraction &lhs,const fraction &rhs)
{return lhs.decimal()<rhs.decimal();}
bool operator==(const fraction &lhs,int rhs)
{return lhs.decimal()==rhs;}
bool operator!=(const fraction &lhs,int rhs)
{return lhs.decimal()!=rhs;}
bool operator>=(const fraction &lhs,int rhs)
{return lhs.decimal()>=rhs;}
bool operator<=(const fraction &lhs,int rhs)
{return lhs.decimal()<=rhs;}
bool operator>(const fraction &lhs,int rhs)
{return lhs.decimal()>rhs;}
bool operator<(const fraction &lhs,int rhs)
{return lhs.decimal()<rhs;}
ostream&operator<<(ostream&os,const fraction &f)
{
fraction temp=f.absval();
int numer=f.numerator();
int denom=f.denominator();
if((!((numer>0&&denom>0)||(numer<0&&denom<0)))&&f!=0)
os<<'-';
if(temp.numerator()==0||temp.denominator()==1)
os<<temp.numerator();
else
os<<temp.numerator()<<'/'<<temp.denominator();
return os;
}
istream & operator>>(istream&is,fraction&f)
{
int newnum,newden;
char slash=' ';
do
{
is>>newnum>>slash>>newden;
}while(slash!='/');
f.setnum(newnum);
f.setden(newden);
return is;
}
void PrintAsMixed(ostream&os,const fraction&f)
{
int wholePart=f.numerator()/f.denominator();
fraction fracPart=f-wholePart;
if(wholePart!=0)
cout<<wholePart<<" ";
if(fracPart!=0)
cout<<fracPart;
}
int main()
{
fraction f1;
fraction f2;
int i;
cout<<"First fraction:\n";
cin>>f1;
cout<<"\nSecond fraction:\n";
cin>>f2;
cout<<"\nEnter an integer:\n";
cin>>i;
f1.simplify();
f2.simplify();
fraction sum=f1+f2;
fraction diff=f1-f2;
fraction prod=f1*f2;
fraction quot;
if(f2!=0)
quot=f1/f2;
cout<<f1<<"in decimal form is"<<f1.decimal()<<'\n';
cout<<f2<<"in decimal form is"<<f2.decimal()<<'\n\n';
cout<<f1<<"+"<<f2<<"="<<sum<<"("<<sum.decimal()<<")\n";
cout<<f1<<"-"<<f2<<"="<<diff<<"("<<diff.decimal()<<")\n";
cout<<f1<<"*"<<f2<<"="<<prod<<"("<<prod.decimal()<<")\n";
cout<<f1<<"+"<<f2<<"=";
if(f2!=0)
cout<<quot<<"("<<quot.decimal()<<")\n\n";
else
cout<<"Undefined!\n\n";
cout<<f1<<"+"<<i<<"="<<f1+i<<"\n";
cout<<f1<<"-"<<i<<"="<<f1-i<<"\n";
cout<<f1<<"*"<<i<<"="<<f1*i<<"\n";
cout<<f1<<"/"<<i<<"=";
if(i!=0)
cout<<f1/i<<"\n\n";
else
cout<<"Undefined!\n\n";
cout<<"Boolean operator tests(1=true,0=false)\n";
cout<<f1<<"=="<<f2<<":"<<(f1==f2)<<'\n';
cout<<f1<<"!="<<f2<<":"<<(f1!=f2)<<'\n';
cout<<f1<<">="<<f2<<":"<<(f1>=f2)<<'\n';
cout<<f1<<"<="<<f2<<":"<<(f1<=f2)<<'\n';
cout<<f1<<">"<<f2<<":"<<(f1>f2)<<'\n';
cout<<f1<<"<"<<f2<<":"<<(f1<f2)<<'\n';
double dec1=f1.decimal();
double dec2=f2.decimal();
if(dec1>1&&(int(dec1)!=dec1))
{
cout<<f1<<"as a mixed number is";
PrintAsMixed(cout,f1);
cout<<'\n';
}
if(dec2>1&&(int(dec2)!=dec2))
{
cout<<f2<<"as a mixed number is";
PrintAsMixed(cout,f2);
}
getch();
return 0;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值