Unit9-problem-分数类

来源:互联网 发布:java开源社区有哪些 编辑:程序博客网 时间:2024/04/30 09:12
/*Univercity:烟台大学*@Class</A>计134~4*@Author:薛富磊*@Time:2014-4-28*@Function:(1)定义分数的一目运算+和-,分别代表分数取正和求反,                将“按位取反运算符”~重载为分数的求倒数运算。           (2)定义分数类中<<和>>运算符重载,实现分数的输入输出,                改造原程序中对运算结果显示方式,使程序读起来更自然*@Args:*@Return:*/#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!=0         void simplify();   //分数化简        //输入输出的重载        friend istream &operator>>(istream &cin,CFraction &x);        friend ostream &operator<<(ostream &cout,CFraction x);        CFraction operator+(const CFraction &c);  //两个分数相加,结果要化简        CFraction operator-(const CFraction &c);  //两个分数相减,结果要化简        CFraction operator*(const CFraction &c);  //两个分数相乘,结果要化简        CFraction operator/(const CFraction &c);  //两个分数相除,结果要化简        CFraction operator+();  //取正一目运算        CFraction operator-();  //取反一目运算        CFraction operator~();  //取倒数一目运算        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);};void CFraction::simplify(){    int a,b,c;    //数学函数:fabs   原型:extern float fabs(float x);       //用法:#include <math.h>   功能:求浮点数x的绝对值    //说明:计算|x|, 当x不为负时返回x,否则返回-x      a=fabs(nume);    b=fabs(deno);    //求最大公约数    while(c=a%b)    {        a=b;        b=c;    }    nume=nume/b;    deno=deno/b;    if(deno<0)    {        nume=-nume;        deno=-deno;    }}//重载运算符"友元"istream &operator>>(istream &cin,CFraction &x){    char ch;    while(1)    {        cin>>x.nume>>ch>>x.deno;        if(ch!='/')        cout<<"输入格式错误,重新输入\n";        else if(x.deno==0)        cout<<"分母为0,重新输入\n";        else break;    }   return cin;}ostream &operator<<(ostream &cout,CFraction x){    cout<<x.nume<<"/"<<x.deno<<endl;    return cout;}//两个分数相加CFraction CFraction::operator+(const CFraction &c){    CFraction s;    s.nume=nume*c.deno+c.nume*deno;    s.deno=deno*c.deno;    s.simplify();    return s;}//两个分数相减CFraction CFraction::operator-(const CFraction &c){    CFraction s;    s.nume=nume*c.deno-c.nume*deno;    s.deno=deno*c.deno;    s.simplify();    return s;}//两个分数相乘CFraction CFraction::operator*(const CFraction &c){    CFraction s;    s.nume=nume*c.nume;    s.deno=deno*c.deno;    s.simplify();    return s;}//两个分数相除CFraction CFraction::operator/(const CFraction &c){    CFraction s;    s.nume=nume*c.deno;    s.deno=deno*c.nume;    s.simplify();    return s;}CFraction CFraction::operator+(){    return *this;}CFraction CFraction::operator-(){    CFraction t;    t.nume=-nume;    t.deno=deno;    return t;}CFraction CFraction::operator~(){    CFraction t;    t.nume=deno;    t.deno=nume;    if(t.deno<0)    {        t.deno=-t.deno;        t.nume=-t.nume;    }    return t;}bool CFraction::operator>(const CFraction &c){    int a,b;    a=nume*c.deno;    b=c.nume*deno;    if((a-b)>0) return true;    return false;}bool CFraction::operator<(const CFraction &c){    int a,b;    a=nume*c.deno;    b=c.nume*deno;    if ((a-b)<0) return true;    return false;}bool CFraction::operator==(const CFraction &c){    if(*this==c)return true;    return false;}bool CFraction::operator!=(const CFraction &c){    int a,b;    a=nume*c.deno;    b=c.nume*deno;    if ((a-b)!=0) return true;    return false;}bool CFraction::operator>=(const CFraction &c){    if (*this<c) return false;    return true;}// 分数比较大小bool CFraction::operator<=(const CFraction &c){    if (*this>c) return false;    return true;}int main(){    CFraction x,y,z;    cout<<"输入x: ";    cin>>x;    cout<<"输入y: ";    cin>>y;    z=x+y;    cout<<"x+y="<<z<<endl;    z=x-y;    cout<<"x-y="<<z<<endl;    z=x*y;    cout<<"x*y="<<z<<endl;    z=x/y;    cout<<"x/y="<<z<<endl;    cout<<"-x="<<-x<<endl;    cout<<"+x="<<+x<<endl;    cout<<"x的倒数: "<<~x<<endl;    if (x>y) cout<<x<<"大于"<<y<<endl;    if (x<y) cout<<x<<"小于"<<y<<endl;    if (x==y)cout<<x<<"等于"<<y<<endl;    return 0;}/*心得体会:           假期漫漫           无聊之极           骚年努力!!!!*/

0 0
原创粉丝点击