13周 项目一(1)
2016-06-07 21:17
239 查看
/* *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; }
相关文章推荐
- C/C++指针与数组的关系
- 使用Tomcat搭建服务器并配置项目
- 产品版本、软件版本、文档版本定义
- 1572: [Usaco2009 Open]工作安排Job
- XML.一个简单的文档类型定义.DTD
- 解读struts2的原始默认配置文件struts2-default.xml
- 拾遗系列(一)之UIView
- IE 9 ,IE 10 jquery ajax 缓存问题
- iOS单元测试(作用及入门提升)
- C/C++运算符重载实现字符串相加
- Java Map遍历方式方式及性能测试
- 判断函数是否存在
- html 杂烩 持续更新
- vc6.0 调试程序,终止调试时程序却无法退出
- 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
- map2Xml
- LaTeX教程文档
- ajaxfileupload 控件IE9 上传变下载JSON问题
- C/C++ 虚函数
- leetcode-java-5. Longest Palindromic Substring