13周 项目一(1)
来源:互联网 发布:sql语句教程 pdf 编辑:程序博客网 时间:2024/06/05 10:55
/**Copyright (c)2016,烟台大学计算机与控制工程学院*All rights reserved.*文件名称:main.cpp*作 者:肖雪*完成日期:2016年6.7*版 本 号:v1.0*问题描述:实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、比较(6种关系)的运算。*/#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(); //输入输出的重载 friend istream &operator>>(istream &in,CFraction &x); friend ostream &operator<<(ostream &out,CFraction x); CFraction operator+(const CFraction &c); CFraction operator-(const CFraction &c); CFraction operator*(const CFraction &c); CFraction 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; n=fabs(deno); m=fabs(nume); while(r=m%n) { m=n; n=r; } deno/=n; nume/=n; if (deno<0) { deno=-deno; nume=-nume; }}// 重载输入运算符>>istream &operator>>(istream &in,CFraction &x){ char ch; while(1) { cin>>x.nume>>ch>>x.deno; if (x.deno==0) cerr<<"分母为0, 请重新输入\n"; else if(ch!='/') cerr<<"格式错误(形如m/n)! 请重新输入\n"; else break; } return cin;}// 重载输出运算符<<ostream &operator<<(ostream &out,CFraction x){ cout<<x.nume<<'/'<<x.deno; return cout;}// 分数相加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; if (!c.nume) return *this; //除法无效(除数为)时,这种情况需要考虑,但这种处理仍不算合理 t.nume=nume*c.deno; t.deno=deno*c.nume; t.simplify(); return t;}// 分数比较大小bool CFraction::operator>(const CFraction &c){ if (nume*c.deno>c.nume*deno) return true; else return false;}bool CFraction::operator<(const CFraction &c){ if (nume*c.deno<c.nume*deno) return true; else return false;}bool CFraction::operator==(const CFraction &c){ if (nume*c.deno==c.nume*deno) return true; else return false;}int main(){ CFraction x,y,s; cout<<"x: "; cin>>x; cout<<"y: "; cin>>y; s=x+y; cout<<"x+y="<<s<<endl; s=x-y; cout<<"x-y="<<s<<endl; s=x*y; cout<<"x*y="<<s<<endl; s=x/y; cout<<"x/y="<<s<<endl; if (x>y) cout<<"x大于y"; if (x<y) cout<<"x小于y"; if (x==y) cout<<"x等于y"; return 0;}
0 0
- 13周 项目一(1)
- 13周项目一
- 13周项目一(2)
- 十二周项目一(1-1)
- 第五周项目一(1)
- 第六周项目一(1)
- 17周项目一(1)
- 第五周项目一(1)
- 第12周项目一(1)
- 第九周项目一(1)
- 第十周项目一(1)
- 第10周项目一(1)
- 第十二周项目一(1)a
- 第十二周项目一(1)b
- 第十二周项目一(1-2)
- 第十二周项目一(1)
- 第十二周项目一(3-1)
- 第十三周 项目一:(1)
- C_basic_summary--各种类型数据所占字节数
- Android的APPT工具会优化PNG吗?
- [Android]inflate方法与 findViewById 方法区别 | LayoutInflater的inflate函数用法详解
- 键盘事件
- php中根据一组数组输出第一个数是最大的,第二个数是最小的 ,第三个数是第二大,第四个数是第二小...以此类推。。。。
- 13周 项目一(1)
- 不使用Cygwin,在eclipse中快速开发JNI,一键生成C头文件.h,以及一键使用NDK交叉编译
- nyoj 520 最大素因子(打表)
- Dagger2基础以及在MVP框架中的使用
- 【Ubuntu14.04安装】网络初始化配置
- 华为2015机试题一
- LaTeX技巧如何拆分源文件并且分别编译
- hjr教程-Android(五):下载tomcat服务器文件
- bzoj4589 Hard Nim