编号及代码:
/*
*Copyright(c)2015,烟台大学计算机与工程学院
*All rights reserved;
*文件名称:score.cpp
*作者:范星月
*完成日期:2015年5月10日
*版本号:v1.0
*
*问题描述:分数类中的一目运算符分别代表分数的取正和取反,将~重载为分数的求倒运算,实现分数的输入与输出
*问题输入:有
*问题输出:
*/
#include <iostream>
using namespace std;
class Cfraction
{
private:
int nume;
int deno;
public:
Cfraction(int n=0,int d=1):nume(n),deno(d) {}
void simplify();
friend istream&operator>>(istream&input,Cfraction &c);
friend ostream&operator<<(ostream&output,Cfraction&c);
bool operator>(const Cfraction&c);
bool operator<(const Cfraction&c);
bool operator>=(const Cfraction&c);
bool operator<=(const Cfraction&c);
bool operator==(const Cfraction&c);
bool operator!=(const Cfraction&c);
Cfraction operator+();
Cfraction operator-();
Cfraction operator~();
Cfraction operator+(const Cfraction &c);
Cfraction operator-(const Cfraction &c);
Cfraction operator*(const Cfraction &c);
Cfraction operator/(const Cfraction &c);
};
ostream&operator<<(ostream&output,Cfraction &c)
{
output<<c.nume<<"/"<<c.deno;
return output;
}
istream&operator>>(istream&input,Cfraction &c)
{
char ch;
while(1)
{
cin>>c.nume>>ch>>c.deno;
if(ch!='/')
cerr<<"格式不正确,请重新输入:"<<endl;
if(c.deno==0)
cerr<<"分母不能为零,请重新输入:"<<endl;
else
break;
}
return input;
}
void Cfraction::simplify()
{
int m,n,r;
if(m<n)
{
int t;
t=m;
m=n;
n=t;
}
while(r!=0)
{
r=m%n;
m=n;
n=r;
}
deno/=n;
nume/=n;
}
bool Cfraction::operator>(const Cfraction&c)
{
int this_nume,c_nume,common_deno;
common_deno=deno*c.deno;
this_nume=nume*c.deno;
c_nume=c.nume*deno;
if((this_nume-c_nume)*common_deno>0)
return true;
else
return false;
}
bool Cfraction::operator<(const Cfraction&c)
{
int this_nume,c_nume,common_deno;
common_deno=deno*c.deno;
this_nume=nume*c.deno;
c_nume=c.nume*deno;
if((this_nume-c_nume)*common_deno<0)
return true;
else return false;
}
bool Cfraction::operator>=(const Cfraction&c)
{
if(*this<c)
return false;
else
return true;
}
bool Cfraction::operator<=(const Cfraction&c)
{
if(*this>c)
return false;
else
return true;
}
bool Cfraction::operator==(const Cfraction&c)
{
if(*this>c||*this<c)
return false;
else
return true;
}
bool Cfraction::operator!=(const Cfraction&c)
{
if(*this==c)
return false;
else
return true;
}
Cfraction Cfraction::operator+()
{
return *this;
}
Cfraction Cfraction::operator-()
{
Cfraction c;
c.nume=-nume;
c.deno=-deno;
return c;
}
Cfraction Cfraction::operator~()
{
this->nume=this->deno;
this->deno=this->nume;
return *this;
}
Cfraction Cfraction::operator+(const Cfraction &c)
{
Cfraction t;
t.nume=nume*c.deno+c.nume*deno;
t.deno=deno*c.deno;
t.simplify();
return t;
}
Cfraction Cfraction::operator-(const Cfraction &c)
{
Cfraction t;
t.nume=nume*c.deno-c.nume*deno;
t.deno=deno*c.deno;
t.simplify();
return t;
}
Cfraction Cfraction::operator*(const Cfraction &c)
{
Cfraction t;
t.nume=nume*c.nume;
t.deno=deno*c.deno;
t.simplify();
return t;
}
Cfraction Cfraction::operator/(const Cfraction &c)
{
Cfraction t;
t.nume=nume*c.deno;
t.deno=deno*c.nume;
t.simplify();
return t;
}
int main()
{
Cfraction a,b,c;
cout<<"输入a:"<<endl;
cin>>a;
cout<<"输入b:"<<endl;
cin>>b;
cout<<"a="<<a<<" b="<<b<<endl;
cout<<"+a="<<a<<endl;
if(a>b)cout<<"a>b"<<endl;
if(a<b)cout<<"a<b"<<endl;
if(a!=b)cout<<"a!=b"<<endl;
if(a>=b)cout<<"a>=b"<<endl;
c=a+b;
cout<<"+a+b="<<c<<endl;
c=a-b;
cout<<"+a-b="<<c<<endl;
return 0;
}