第九周项目三——分数类中的运算符重载(利用输入输出运算符重载)
2013-04-26 16:24
381 查看
/* * 程序的版权和版本声明部分 * Copyright (c)2013, 烟台大学计算机学院学生 * All rightsreserved. * 作 者: 杨晨 * 完成日期: 2013 年 4 月 26 日 * 版本号: v1.0 * 输入描述: * 问题描述: * 输出: */ #include<iostream> using namespace std; int gcd(int m, int n); class CFraction {private: int nume; // 分子 int deno; // 分母 public: CFraction(int nu=0,int de=1); //构造函数,初始化用 void set(int nu=0,int de=1); //置值,改变值时用 void simplify(); friend ostream& operator <<(ostream&,CFraction&); friend istream& operator >>(istream&,CFraction&); CFraction operator+(CFraction &c); CFraction operator-(CFraction &c); CFraction operator*(CFraction &c); CFraction operator/(CFraction &c); CFraction operator-(); //求反 bool operator>(CFraction &c); bool operator<(CFraction &c); bool operator==(CFraction &c); }; CFraction::CFraction(int nu,int de) { nume=nu; deno=de; } ostream& operator <<(ostream& output,CFraction& c) { output<<c.nume<<"/"<<c.deno<<endl; return output; } istream& operator >>(istream& input,CFraction& c) { char sign; input>>c.nume>>sign>>c.deno; return input; } void CFraction::set(int nu,int de) { nume=nu; deno=de; } void CFraction::simplify() { int m=gcd(nume,deno); deno/=m; nume/=m; } // 求m,n的最大公约数 int gcd(int m, int n) { int min; if(m<n) { for(min=m;min>0;--min) { if(m%min==0&&n%min==0) return min; } } else { for(min=n;min>0;--min) { if(m%min==0&&n%min==0) return min; } } } CFraction CFraction::operator+(CFraction &c) { return CFraction(nume*c.deno+deno*c.nume,deno*c.deno); } CFraction CFraction::operator-(CFraction &c) { return CFraction(nume*c.deno-deno*c.nume,deno*c.deno); } CFraction CFraction::operator*(CFraction &c) { return CFraction(nume*c.nume,deno*c.deno); } CFraction CFraction::operator/(CFraction &c) { return CFraction(nume*c.deno,deno*c.nume); } CFraction CFraction::operator-() { return CFraction(deno,nume); } bool CFraction::operator>(CFraction &c) { if(nume*c.deno>deno*c.nume) return true; else return false; } bool CFraction::operator<(CFraction &c) { if(nume*c.deno<deno*c.nume) return true; else return false; } bool CFraction::operator==(CFraction &c) { if(nume*c.deno==deno*c.nume) return true; else return false; } int main() { CFraction c1,c2,c3; cout<<"请输入c1的值:"; cin>>c1; cout<<"c1= "<<c1; c1.simplify(); cout<<"请输入c2的值:"; cin>>c2; cout<<"c2= "<<c2; c2.simplify(); c3=c1+c2; c3.simplify(); cout<<"c1+c2= "<<c3; c3=c1-c2; cout<<"c1-c2= "<<c3; c3=c1*c2; c3.simplify(); cout<<"c1*c2= "<<c3; c3=c1/c2; c3.simplify(); cout<<"c1/c2= "<<c3; c3=-c1; cout<<"c1求反为:"<<c3; cout<<"下面比较两个分数大小:\n"; if(c1>c2) cout<<"c1>c2"<<endl; if(c1<c2) cout<<"c1<c2"<<endl; if(c1==c2) cout<<"c1=c2"<<endl; return 0; }
输出结果:
相关文章推荐
- 第九周项目二——Time类中的运算符重载(利用输入输出运算符重载)
- 第九周项目一——Complex类(利用输入输出运算符重载)
- 第九周 项目三-分数类中的运算符重载(续)
- 第九周上机项目3 分数类中的运算符重载(续)
- 第九周-项目3-分数类的运算符重载
- 第九周项目三分数类中的运算符重载(续)(2)
- 2015年第九周项目三:分数类中的运算符重载(续)(1)
- 第九周 项目3-分数类中的运算符重载(1)
- 第九周项目三 分数类中的运算符重载(续)
- 第九周 项目三:定义分数类中的<<和>>运算符重载
- 第九周--项目3-分数类中的运算符重载
- 《第九周任务三》定义分数类中《和》运算符重载,实现分数的输入输出,改造源程序中对运算结果显示方式,使程序读起来更自然
- 第九周任务三之定义分数类中<<和>>运算符重载,实现分数的输入输出
- 《C++第九周实验报告3-1》----接第8周任务3,定义分数类中<<和>>运算符重载,实现分数的输入输出
- 2015年第九周项目三:分数类中的运算符重载(续)(2)
- 第九周 项目三--分数类中的运算符重载(续)
- 第九周上机实践项目3——分数类中的运算符重载(续)
- 第九周实验报告任务3 定义分数类中<<和>>运算符重载,实现分数的输入输出,改造原程序中对运算结果显示方式,使程序读起来更自然。
- 《第九周任务三》定义分数类中《和》运算符重载,实现分数的输入输出,改造源程序中对运算结果显示方式,使程序读起来更自然
- C++第九周【任务三】定义分数类中<<和>>运算符重载,实现分数的输入输出