第9周任务3
来源:互联网 发布:js文件编写格式 编辑:程序博客网 时间:2024/05/20 04:50
/*
实验内容:定义分数类中<<和>>运算符重载
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称: 定义分数类中<<和>>运算符重载
* 作 者:付文杰
* 完成日期: 2012 年 4 月 17 日
* 版 本号: x1.0
*/
//【任务3】接第8周任务3,定义分数类中<<和>>运算符重载,实现分数的输入输出,改造原程序中对运算结果显示方式,使程序读起来更自然。 #include<iostream> using namespace std; class CFraction { private: int nume; // 分子 int deno; // 分母 public: CFraction(int nu = 0, int de = 1) : nume(nu), deno(de){}; //构造函数,初始化用 void output1(); friend ostream& operator << (ostream &,CFraction &); friend istream& operator >> (istream &,CFraction &); CFraction operator+(CFraction &c1); CFraction operator-(CFraction &c1); CFraction operator*(CFraction &c1); CFraction operator/(CFraction &c1); CFraction operator-();//取反 //比较运算符(二目)的重载 bool operator > (CFraction &c1); bool operator < (CFraction &c1); bool operator >= (CFraction &c1); bool operator <= (CFraction &c1); bool operator == (CFraction &c1); bool operator != (CFraction &c1); }; ostream& operator << (ostream &ouput, CFraction &c) { int i; if(c.deno == 0) cout<<"error"<<endl; if(c.nume >= 0) { if(c.deno < c.nume)i = c.deno; else i = c.nume; for(; i > 0; --i) { if(c.nume % i == 0 && c.deno % i == 0) { c.nume = c.nume / i; c.deno = c.deno / i; break; } } ouput << c.nume << "/" << c.deno << endl; } else { c.nume = -c.nume; if(c.deno < c.nume)i = c.deno; else i = c.nume; for(; i > 0; --i) { if(c.nume % i == 0 && c.deno % i == 0) { c.nume = c.nume / i; c.deno = c.deno / i; break; } } ouput << -c.nume << "/" << c.deno << endl; } return ouput; } istream& operator >> (istream &input, CFraction &c) { char c1; cout << "请输入一个分数(格式:x/y):"; input >> c.nume >> c1 >> c.deno; do { if(c1 == '/')break; else { cout << "格式错误,请重新输入一个分数(格式:x/y):"; input >> c.nume >> c1 >> c.deno; } }while(1); return input; } CFraction CFraction :: operator+(CFraction &c1) { CFraction c2; c2.deno = deno * c1.deno; c2.nume = nume * c1.deno + c1.nume * deno; return c2; } CFraction CFraction :: operator-(CFraction &c1) { CFraction c2; c2.deno = deno * c1.deno; c2.nume = nume * c1.deno - c1.nume * deno; return c2; } CFraction CFraction :: operator*(CFraction &c1) { CFraction c2; c2.deno = deno * c1.deno; c2.nume = nume * c1.nume; return c2; } CFraction CFraction :: operator/(CFraction &c1) { CFraction c2; c2.deno = deno * c1.nume; c2.nume = nume * c1.deno; return c2; } CFraction CFraction :: operator-()//取反 { CFraction c2; c2.nume = -nume; c2.deno = deno; return c2; } void CFraction :: output1() { cout << nume << "/" << deno << endl; } //比较运算符(二目)的重载 bool CFraction :: operator > (CFraction &c1) { CFraction c2, c3; c2.nume = nume * c1.deno; c3.nume = c1.nume * deno; if(c2.nume > c3.nume)return true; else return false; } bool CFraction :: operator < (CFraction &c1) { CFraction c2, c3; c2.nume = nume * c1.deno; c3.nume = c1.nume * deno; if(c2.nume < c3.nume)return true; else return false; } bool CFraction :: operator >= (CFraction &c1) { CFraction c2, c3; c2.nume = nume * c1.deno; c3.nume = c1.nume * deno; if(c2.nume < c3.nume)return false; else return true; } bool CFraction :: operator <= (CFraction &c1) { CFraction c2, c3; c2.nume = nume * c1.deno; c3.nume = c1.nume * deno; if(c2.nume > c3.nume)return false; else return true; } bool CFraction :: operator == (CFraction &c1) { CFraction c2, c3; c2.nume = nume * c1.deno; c3.nume = c1.nume * deno; if((c2.nume >= c3.nume) && (c2.nume <= c3.nume))return true; else return false; } bool CFraction :: operator != (CFraction &c1) { CFraction c2, c3; c2.nume = nume * c1.deno; c3.nume = c1.nume * deno; if((c2.nume > c3.nume) || (c2.nume < c3.nume))return true; else return false; } void main() { CFraction c1, c2, c3; cin >> c1 >> c2; cout <<"c1 = "; c1.output1(); cout <<"c2 = "; c2.output1(); c3 = c1 + c2; cout << "c1 + c2 = " << c3; c3 = c1 - c2; cout << "c1 - c2 = " << c3; c3 = c1 * c2; cout << "c1 * c2 = " << c3; c3 = c1 / c2; cout << "c1 / c2 = " << c3; c3 = -c1; cout << "-c1 = " << c3; cout << endl; cout<<"下面比较两个分数的大小:\n"; 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; cout<<endl; system("pause"); }
运行结果:
- 第9周任务3
- 第9周任务3
- 第9周任务
- 第9周任务1
- 第9周任务2
- 第9周任务1
- 第9周任务2
- 第9周任务2
- 第9周任务5
- 第9周任务4
- 第4周任务3
- 第6周任务3
- 第7周任务3
- 第13周任务3
- 第13周任务3
- 第16周任务3
- 第9周-任务5- 一元一次方程类
- 第9周任务2-个人所得税计算器
- 使用internal(com.android.internal)和hidden(@hide)APIs – Part 4
- JAVA 十进制 转换成 三进制
- ios字体
- 使用internal(com.android.internal)和hidden(@hide)APIs – Part 5
- GCD和块对象介绍
- 第9周任务3
- 使用internal(com.android.internal)和hidden(@hide)APIs – Part 2
- 使用internal(com.android.internal)和hidden(@hide)APIs – Part 1
- 字面量格式的字符串转化为正在表达式工具函数
- Hadoop 学习总结之一:HDFS简介
- PHP中PDO数据访问对象处理LIMIT子句的一处BUG
- Spring入门概念
- Linux HA集群部署(基于Heartbeat与pacemaker)
- 你坐在我身旁,我确感觉远在天涯···