分子运算2013第八周上机任务【项目3-分数类中的运算符重载】
PS:今天上午,非常郁闷,有很多简单基础的题问搞得我有些迷茫,哎,代码几天不写就忘。目前又不当COO,还是得用心记代码哦!
/* * Copyright (c) 2013, 烟台大学盘算机学院 * All rights reserved. * 文件名称:test.cpp * 作者:樊露露 * 完成日期:2013 年 4 月 24 日 * 版本号:v1.0 * * 入输描述:无 * 题问描述: * 程序输出: * 题问分析: * 法算计划:略 */ #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){} void simplify();//化简 void display(); CFraction operator + (CFraction &t); CFraction operator - (CFraction &t); CFraction operator * (CFraction &t); CFraction operator / (CFraction &t); 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 m,n,r; m=fabs(deno); n=fabs(nume); while(r=m%n) { m=n; n=r; } nume/=n; deno/=n; if (deno<0) // 将分母转化为正数 { deno=-deno; nume=-nume; } } void CFraction::display() { cout<<"("<<nume<<"/"<<deno<<")"; } CFraction CFraction::operator +(CFraction &t) { CFraction c; c.nume=nume*t.deno+t.nume*deno; c.deno=deno*t.deno; c.simplify(); return c; } CFraction CFraction::operator -(CFraction &t) { CFraction c; c.nume=nume*t.deno-t.nume*deno; c.deno=deno*t.deno; c.simplify(); return c; } CFraction CFraction::operator *(CFraction &t) { CFraction c; c.nume=nume*t.nume; c.deno=deno*t.deno; c.simplify(); return c; } CFraction CFraction::operator /(CFraction &t) { CFraction c; c.nume=nume*t.deno; c.deno=deno*t.nume; c.simplify(); return c; } // 分数取正号 CFraction CFraction:: operator+() { return *this; } // 分数取负号 CFraction CFraction:: operator-() { CFraction x; x.nume=-nume; x.deno=-deno; return x; } // 分数比拟小大 bool CFraction::operator>(const CFraction &c) { int this_nume,c_nume,common_deno; this_nume=nume*c.deno; // 盘算分数通分后的分子,同分母为deno*c.deno c_nume=c.nume*deno; common_deno=deno*c.deno; //if (this_nume>c_nume) return true; 法无对应common_deno<0的形情 //上面的语句更练简的一种写法if ((this_nume-c_nume)*common_deno>0) return true; if ((this_nume>c_nume&&common_deno>0)||(this_nume<c_nume&&common_deno<0)) return true; // 将通分后的分子比拟小大 return false; } // 分数比拟小大 bool CFraction::operator<(const CFraction &c) { int this_nume,c_nume,common_deno; this_nume=nume*c.deno; c_nume=c.nume*deno; common_deno=deno*c.deno; if ((this_nume-c_nume)*common_deno<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 || *this<c) 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(2,5),y(-5,8),s; cout<<"分数x=2/5 y=-5/8"<<endl; s=x+y; cout<<"x+y="; s.display(); cout<<endl; s=x-y; cout<<"x-y="; s.display(); cout<<endl; s=x*y; cout<<"x*y="; s.display(); cout<<endl; s=x/y; cout<<"x/y="; s.display(); cout<<endl; y=+y; x.display(); if (x>y) cout<<"大于"; if (x<y) cout<<"小于"; if (x==y) cout<<"即是"; y.display(); cout<<endl; return 0; }
文章结束给大家分享下程序员的一些笑话语录: 警告
有一个小伙子在一个办公大楼的门口抽着烟,一个妇女路过他身边,并对他 说, “你知道不知道这个东西会危害你的健康?我是说, 你有没有注意到香烟 盒上的那个警告(Warning)?”
小伙子说,“没事儿,我是一个程序员”。
那妇女说,“这又怎样?”
程序员说,“我们从来不关心 Warning,只关心 Error”