9-3分数类 运算符重载
来源:互联网 发布:淘宝客服权重分流 编辑:程序博客网 时间:2024/06/06 08:38
/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称: 分数类中的运算符重载
* 作 者: 张传新
* 完成日期: 2012 年 04 月 14 日
* 版 本 号: V.1.0
* 对任务及求解方法的描述部分
* 问题描述:实现分数类中的运算符重载,在分数类中可以完成分数的
* 加减乘除(运算后再化简)、求反、比较(6种关系)的运算。
* 程序头部的注释结束
#include<iostream> using namespace std; class CFraction { private: int nume; // 分子 int deno; // 分母 public: CFraction(int nu = 1,int de = 2); //构造函数,初始化用 friend istream& operator >> (istream&,CFraction&);//声明重载运算符“>>”函数 friend ostream& operator << (ostream&,CFraction&);//声明重载运算符“<<”函数 void Simplify(); //化简(使分子分母没有公因子) void S_Simplify(); //化简(以4/3为例,输出1(1/3),表示一又三分之一) void output(int style); //输出:以8/6为例,style为0时,输出8/6; //style为1时,输出4/3; //style为2时,输出1(1/3),表示一又三分之一; //不给出参数和非1、2,认为是方式0 CFraction operator+(CFraction &CF2); //定义分数加法 CFraction operator-(CFraction &CF2); //定义分数减法 CFraction operator*(CFraction &CF2); //定义分数乘法 CFraction operator/(CFraction &CF2); //定义分数除法 CFraction operator-();//取反 //比较大小 bool operator > (CFraction &CF2); bool operator < (CFraction &CF2); bool operator >= (CFraction &CF2); bool operator <= (CFraction &CF2); bool operator == (CFraction &CF2); bool operator != (CFraction &CF2); }; //构造函数,初始化用 CFraction::CFraction(int nu,int de) { nume = nu; deno = de; } //输出分数 ostream& operator << (ostream& output,CFraction& CF){ cout << CF.nume << "/" << CF.deno;return output;} //按照"nu/de"的格式,如"5/2"的形式输入 istream& operator >> (istream& input,CFraction& CF){ char b; cout << "请输入分数(按照“a/b”形式输入):" << endl; input >> CF.nume >> b >> CF.deno; return input;} //化简(使分子分母没有公因子) void CFraction::Simplify() { for(int i = 2;i <= nume && i <= deno;i++) { if(nume % i == 0 && deno % i == 0) { nume = nume/i; deno = deno/i; i--; } } cout << (*this) << endl; } //化简(以4/3为例,输出1(1/3),表示一又三分之一) void CFraction::S_Simplify() { for(int i = 2;i <= nume && i <= deno;i++) { if(nume % i == 0 && deno % i == 0) { nume = nume/i; deno = deno/i; i--; } } if(nume >= deno) { int n; n = nume / deno; nume = nume % deno; cout << n << "(" << (*this) << ")" << endl; } else { cout << (*this); } } //输出:以8/6为例,style为0时,输出8/6; //style为1时,输出4/3; //style为2时,输出1(1/3),表示一又三分之一; //不给出参数和非1、2,认为是方式0 void CFraction::output(int style) { if(style == 1) { CFraction::Simplify(); } else if(style == 2) { CFraction::S_Simplify(); } else { cout << (*this) << endl; } } //定义分数加法 CFraction CFraction::operator+(CFraction &CF2) { nume = nume * CF2.deno + CF2.nume * deno; deno = deno * CF2.deno; return (*this); } //定义分数减法 CFraction CFraction::operator-(CFraction &CF2) { nume = nume * CF2.deno - CF2.nume * deno; deno = deno * CF2.deno; return (*this); } //定义分数乘法 CFraction CFraction::operator*(CFraction &CF2) { nume = nume * CF2.nume; deno = deno * CF2.deno; return (*this); } //定义分数除法 CFraction CFraction::operator/(CFraction &CF2) { nume = nume * CF2.deno; deno = deno * CF2.nume; return (*this); } //取反 CFraction CFraction::operator-() { nume = - nume; deno = deno; return (*this); } //比较大小 bool CFraction::operator > (CFraction &CF2) { nume = nume * CF2.deno; CF2.nume = CF2.nume * deno; if( nume > CF2.nume ) { return true; } else { return false; } } bool CFraction::operator < (CFraction &CF2) { nume = nume * CF2.deno; CF2.nume = CF2.nume * deno; if( nume < CF2.nume ) { return true; } else { return false; } } bool CFraction::operator >= (CFraction &CF2) { nume = nume * CF2.deno; CF2.nume = CF2.nume * deno; if( nume >= CF2.nume ) { return true; } else { return false; } } bool CFraction::operator <= (CFraction &CF2) { nume = nume * CF2.deno; CF2.nume = CF2.nume * deno; if( nume <= CF2.nume ) { return true; } else { return false; } } bool CFraction::operator == (CFraction &CF2) { nume = nume * CF2.deno; CF2.nume = CF2.nume * deno; if( nume == CF2.nume ) { return true; } else { return false; } } bool CFraction::operator != (CFraction &CF2) { nume = nume * CF2.deno; CF2.nume = CF2.nume * deno; if( nume != CF2.nume ) { return true; } else { return false; } } void main() { CFraction CF1, CF2; cin >> CF1; CF1.output(1); cin >> CF2; CF2.output(2); cout << endl; CFraction CF3(3,4), CF4(1,4),CF5; cout << "CF3为:" ; cout << CF3 << endl; cout << "CF4为:" ; cout << CF4 << endl; CF5 = CF3; CF5 = CF5 + CF4; cout << "CF3 + CF4 = "; cout << CF5 << endl; cout << "化简后得:"; CF5.Simplify(); CF5 = CF3; CF5 = CF5 - CF4; cout << "CF3 - CF4 = "; cout << CF5 << endl; cout << "化简后得:"; CF5.Simplify(); CF5 = CF3; CF5 = CF5 * CF4; cout << "CF3 * CF4 = "; cout << CF5 << endl; cout << "化简后得:"; CF5.Simplify(); CF5 = CF3; CF5 = CF5 / CF4; cout << "CF3 / CF4 = "; cout << CF5 << endl; cout << "化简后得:"; CF5.Simplify(); CF5 = CF3; CF5 = - CF5; cout << "-CF3 = "; cout << CF5 << endl; cout << "比较两个分数大小:" << endl; if (CF3 > CF4) cout << "CF3 > CF4" << endl; if (CF3 < CF4) cout << "CF3 < CF4" << endl; if (CF3 >= CF4) cout << "CF3 >= CF4" << endl; if (CF3 <= CF4) cout << "CF3 <= CF4" << endl; if (CF3 == CF4) cout << "CF3 == CF4" << endl; if (CF3 != CF4) cout << "CF3 != CF4" << endl; system("pause"); }
运行结果:
感言:C++,效率挺高的啊。。。???
- 9-3分数类 运算符重载
- 分数类--运算符重载
- 运算符重载 分数类
- 第八周上机实践项目3-分数类中的运算符重载(分数与分数、分数与整数)
- 8-3 实现分数类中的运算符重载
- 项目3-分数类中的运算符重载
- 8-3 分数类中的运算符重载
- /项目3-分数类中的运算符重载
- 项目3-分数类中的运算符重载
- 第九周--项目3-分数类中的运算符重载
- 第八周 项目3 分数类中的运算符重载
- 项目3~~分数类的运算符重载
- 第八周【项目3-分数类中的运算符重载】
- 项目3~~分数类的运算符重载(扩展)
- 第八周项目3-分数类中的运算符重载
- 项目3-分数类中的运算符重载
- 第八周 项目3 分数类中的运算符重载
- 八周 项目3 分数类中的运算符重载
- Android开发真机测试方法
- 程序员的进化
- poj3126 - Prime Path
- 通过build.prop修改手机信息
- Perl 最佳实践(节选) --- 14
- 9-3分数类 运算符重载
- INODE的破解相关的东西,随记下!
- dp 与 sp 区别
- String与StringBuffer详解
- SPFA的两个优化
- 到底在哪用cascade="..."?
- HashTable工作原理
- 利用Python定时按日期备份MySQL数据并压缩
- Android: get IP address of device