C++程序设计实验报告(五十九)---第九周任务3
来源:互联网 发布:dc电影 知乎 编辑:程序博客网 时间:2024/06/04 18:48
/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2012, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:流运算符重载运算符(分数类)
* 作 者: 刘镇
* 完成日期: 2012 年 4 月 15 日
* 版 本 号: 1.055
* 对任务及求解方法的描述部分
* 输入描述: 分数
* 问题描述: 分数流运算符重载
* 程序输出: ......
* 程序头部的注释结束
*/
#include<iostream> using namespace std; class CFraction { private: int nume; // 分子 int deno; // 分母 int gcd(int nu, int de); public: //重载流运算符friend istream & operator >> (istream &, CFraction &);friend ostream & operator << (ostream &, CFraction &);//构造函数及运算符重载的函数声明 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); friend CFraction operator + (CFraction c, int s); friend CFraction operator - (CFraction c, int s); friend CFraction operator * (CFraction c, int s); friend CFraction operator / (CFraction c, int s); friend CFraction operator + (int s, CFraction c); friend CFraction operator - (int s, CFraction c); friend CFraction operator * (int s, CFraction c); friend CFraction operator / (int s, 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(); //化简(使分子分母没有公因子) void display(); }; //重载流插入运算符istream & operator >> (istream & in, CFraction & c){char c1;cout << "请输入分数值:(形式:nume / deno)" << endl;while(1){in >> c.nume >> c1 >> c.deno;if(c1 != '/'){cout << "格式不正确!请重新输入:" << endl;}else if(c.deno == 0){cout << "分母非法!重新输入:" << endl;}else{break;}}return in;}//重载流提取运算符ostream & operator << (ostream & out, CFraction & c){out << c.nume << "/" << c.deno << endl;return out;}//重载函数的实现及用于测试的main()函数 void CFraction::Simplify() { int n ; if(nume < 0) { n = gcd(-nume, deno); } else { 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; } void CFraction::display() { cout << nume << "/" << deno << endl; } 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; } } CFraction operator + (CFraction c, int s) { CFraction c2 = c; c2.nume = c.nume + s * c.deno; return c2; } CFraction operator - (CFraction c, int s) { CFraction c2 = c; c2.nume = c.nume - s * c.deno; return c2; } CFraction operator * (CFraction c, int s) { CFraction c2 = c; c2.nume = c.nume * s; return c2; } CFraction operator / (CFraction c, int s) { CFraction c2 = c; c2.deno = c.deno * s; return c2; } CFraction operator + (int s, CFraction c) { CFraction c2 = c; c2.nume = c.nume + s * c.deno; return c2; } CFraction operator - (int s, CFraction c) { CFraction c2 = c; c2.nume = s * c.deno - c.nume; return c2; } CFraction operator * (int s, CFraction c) { CFraction c2 = c; c2.nume = s * c.nume; return c2; } CFraction operator / (int s, CFraction c) { CFraction c2 = c; c2.nume = s * c.deno; c2.deno = c.nume; return c2; } void main() { CFraction c1(3, 5), c2(2, 3), c; cin >> c1 >> c2;c1.Simplify(); c2.Simplify(); cout << "c1 =" << c1;cout << "c2 =" << c2;c = c1 + c2; c.Simplify(); cout << "c1 + c2 =" << c;c = c1 - c2; c.Simplify(); cout << "c1 - c2 =" << c;c = c1 * c2; c.Simplify(); cout << "c1 * c2 =" << c;c = c1 / c2; c.Simplify(); cout << "c1 / c2 =" << c;c = c1 + 2; c.Simplify(); cout << "c1 + 2 =" << c; c = 2 - c2; c.Simplify(); cout << "2 - c2 =" << c; c = c1 * 2; c.Simplify(); cout << "c1 * 2 =" << c; c = 2 / c2; c.Simplify(); cout << "2 / c2 =" << c;c = - c1; cout << "-c1 =" << c; 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"); }
运行结果:
- C++程序设计实验报告(五十九)---第九周任务3
- C++程序设计实验报告(五十七)---第九周任务1
- C++程序设计实验报告(五十八)---第九周任务2
- 第九周实验报告(任务3)
- C++程序设计实验报告(六十一)---第九周任务5
- C++程序设计实验报告(六十)---第九周任务4
- 《第九周实验报告任务3》
- 第九周实验报告(任务1)
- 第九周实验报告(任务2)
- 第九周实验报告(任务5)
- 第九次C程序设计实验报告
- C程序设计课程第九次实验任务
- 第九周实验报告(任务四)【一元一次方程类】
- 第九周实验报告(任务五)【二维数组】
- 第九周实验报告任务1
- 第九周实验报告任务5
- 《第九周实验报告任务1》
- 《第九周实验报告任务2》
- PE格式之千里追踪输入表
- 遍历文件夹下文件
- (9) iphone 开发 AppSettings , 系统setting与应用程序setting间的数据控制
- 解决ie developer toolbar 不能用
- Android获取屏幕分辨率及DisplayMetrics
- C++程序设计实验报告(五十九)---第九周任务3
- android dp sp px区别,android获取屏幕尺寸、密度
- 用户进程与windows操作系统回收资源
- jdk
- 第九周任务一
- CUDA下的GPU编程--线程和变量
- hibernate中identity和increment区别
- 甲骨文(Oracle)这十年
- How:Java中引用类型作为形参