《第九周实验报告任务3》
来源:互联网 发布:linux init 服务 启动 编辑:程序博客网 时间:2024/05/16 15:52
/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称: 分数类中运算符的重载
* 作 者: 刘江波
* 完成日期: 2012 年 04 月 16 日
* 版 本 号: v.04163
* 对任务及求解方法的描述部分
* 问题描述:
定义分数类中<<和>>运算符重载,实现分数的输入输出,改造原程序中对运算结果显示方式,使程序读起来更自然。
* 程序头部的注释结束
*/
#include<iostream>using namespace std;class CFraction{private:int nume; // 分子int deno; // 分母int gcd(int nu, int de);public://构造函数及运算符重载的函数声明CFraction(int nu = 0, int de = 1):nume(nu), deno(de){}; //构造函数,初始化用 friend CFraction operator + (CFraction &c1,CFraction &c2); friend CFraction operator - (CFraction &c1,CFraction &c2);friend CFraction operator * (CFraction &c1,CFraction &c2);friend CFraction operator / (CFraction &c1,CFraction &c2); friend CFraction operator - (CFraction &c);bool operator > (CFraction &t);bool operator < (CFraction &t);bool operator >= (CFraction &t);bool operator <= (CFraction &t);bool operator == (CFraction &t);bool operator != (CFraction &t);void Simplify(); //化简函数(使分子分母没有公因子)friend ostream& operator << (ostream&,CFraction&);friend istream& operator >> (istream&,CFraction&);};//重载函数的实现及用于测试的main()函数ostream& operator << (ostream&output,CFraction&f){ output << f.nume << "/" << f.deno;return output;}istream& operator >> (istream&input,CFraction&f){char c;do{input >> f.nume >> c >> f.deno;}while(c != '/');return input;}void CFraction::Simplify() //化简函数(使分子分母没有公因子){ int n ;if(nume < 0 && deno > 0){n = gcd(-nume, deno);}else if(nume > 0 && deno > 0){n = gcd(nume, deno);}else if(nume > 0 && deno < 0){n = gcd(nume, -deno);}else if(nume < 0 && deno < 0){n = -gcd(-nume, -deno);}nume = nume / n; deno = deno / n; } int CFraction::gcd(int nu, int de) //辗转相除法,求最大公约数 { int t, r, a, b; a = nu; b = de; if (a < b) { t = a; a = b; b = t; } while (b != 0) { r = a % b; a = b; b = r; } return a; }CFraction operator + (CFraction &c1,CFraction &c2){CFraction c;//先通分,再相加c.nume = c1.nume * c2.deno + c2.nume * c1.deno;c.deno = c1.deno * c2.deno;return c;}CFraction operator - (CFraction &c1,CFraction &c2){CFraction c;//先通分,再相减c.nume = c1.nume * c2.deno - c2.nume * c1.deno;c.deno = c1.deno * c2.deno;return c;}CFraction operator * (CFraction &c1,CFraction &c2){CFraction c;//分子分母分别相乘c.nume = c1.nume * c2.nume;c.deno = c1.deno * c2.deno;return c;}CFraction operator / (CFraction &c1,CFraction &c2){CFraction c;//相除即乘以倒数c.nume = c1.nume * c2.deno;c.deno = c1.deno * c2.nume;return c;}CFraction operator - (CFraction &c){c.nume = 0 - c.nume;return c;}bool CFraction::operator > (CFraction &t){if(nume * t.deno > t.nume * deno)//先通分,在比较{return true;}else{return false;}}bool CFraction::operator < (CFraction &t){if(nume * t.deno < t.nume * deno)//先通分,在比较{return true;}else{return false;}}bool CFraction::operator >= (CFraction &t){if(nume * t.deno >= t.nume * deno)//先通分,在比较{return true;}else{return false;}}bool CFraction::operator <= (CFraction &t){if(nume * t.deno <= t.nume * deno)//先通分,在比较{return true;}else{return false;}}bool CFraction::operator == (CFraction &t){if(nume * t.deno == t.nume * deno)//先通分,在比较{return true;}else{return false;}}bool CFraction::operator != (CFraction &t){if(nume * t.deno != t.nume * deno)//先通分,在比较{return true;}else{return false;}}void main(){CFraction c1, c2, c;cout << "请输入你要输入的分数:(例:3/7)" <<endl;cin >> c1 >>c2 ;c1.Simplify();cout << "c1 =" << c1 << endl;c2.Simplify();cout << "c2 =" << c2 << endl;c = c1 + c2;c.Simplify();cout << "c1 + c2 =" << c <<endl;c = c1 - c2;c.Simplify();cout << "c1 - c2 =" << c <<endl;c = c1 * c2;c.Simplify();cout << "c1 * c2 =" << c <<endl;c = c1 / c2;c.Simplify();cout << "c1 / c2 =" << c << endl;c = - c1;cout << "-c1 =" << c << endl;if(c1 > c2){cout << "c1 > c2" << endl;}if(c1 < c2){cout << "c1 < c2" << endl;}if(c1 >= c2){cout << "c1 ≥ c2" << endl;}if(c1 <= c2){cout << "c1 ≤ c2" << endl;}if(c1 == c2){cout << "c1 = c2" << endl;}if(c1 != c2){cout << "c1 ≠ c2" << endl;}system("pause");}
- 《第九周实验报告任务3》
- 第九周实验报告(任务3)
- C++程序设计实验报告(五十九)---第九周任务3
- 第九周实验报告任务1
- 第九周实验报告任务5
- 《第九周实验报告任务1》
- 《第九周实验报告任务2》
- 第九周实验报告任务三
- 第九周实验报告 任务一
- 第九周实验报告 任务二
- 第九周实验报告 任务三
- 第九周实验报告 任务五
- 第九周实验报告任务二
- 第九周实验报告任务4
- 第九周实验报告任务五
- 第九周实验报告任务四
- 《第九周实验报告任务5》
- 《第九周实验报告任务4》
- 第九周实验报告2
- 第九周作业3
- trade_history
- listview嵌套
- loadrunner字符串处理函数
- 《第九周实验报告任务3》
- 关于mingw
- [moc062066]K4W kinect for Windows sdk 开发教程集合(动态更新)
- Android中解析JSON
- 在浏览器地址栏中查看cookie
- 第九周实验报告(二)定义Complex类中的<<、>>运算符的重载
- LoadRunner字符串编码转换的函数lr_convert_string_encoding
- 苹果,谷歌浏览器对设置了100%的DIV层宽度不能自适应,部分网页被隐藏,解决办法!
- Linux下多线程查看工具(pstree、ps、pstack)