《第九周任务三》定义分数类中《和》运算符重载,实现分数的输入输出,改造源程序中对运算结果显示方式,使程序读起来更自然
2012-04-16 19:11
736 查看
/*
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:定义分数类中《和》运算符重载,实现分数的输入输出,改造源程序中对运算结果显示方式,使程序读起来更自然
* 作 者: 张启立
* 完成日期: 2012年 4 月 16 日
* 版 本 号: 9-3-1
* 对任务及求解方法的描述部分
* 代码实现
#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 定义分数类中<<和>>运算符重载,实现分数的输入输出,改造原程序中对运算结果显示方式,使程序读起来更自然。
- 定义分数类中<<和>>运算符重载,实现分数的输入输出,改造原程序中对运算结果显示方式,使程序读起来更自然。
- 《第九周任务二》定义Time类中的<<和>>运算符的重载,实现时间输入输出,改造源程序中对运算结果的显示方式,使程序读起来更自然
- 定义分数类中<<和>>运算符重载,实现分数的输入输出,改造原程序中对运算结果显示方式,使程序读起来更自然。
- 第九周实验报告任务 1 定义Time类中的<<和>>运算符重载,实现时间的输入输出,改造原程序中对运算结果显示方式,使程序读起来更自然。
- 《第九周任务一》定义Complex类中的《《和》》运算符的重载,实现输入和输出,改造原程序中对运算结果显示方式,使程序读起来更自然
- 第九周实验报告 任务2 定义Complex类中的<<和>>运算符的重载,实现输入和输出,改造原程序中对运算结果显示方式,使程序读起来更自然。
- 定义分数类中<<和>>运算符重载,实现分数的输入输出,改造原程序中对运算结果显示方式,使程序读起来更自然。
- 第九周【项目1】在第8周项1的基础上(1)再定义一目运算符 -,-c相当于0-c(2)定义Complex类中的<<和>>运算符的重载,实现输入和输出,改造原程序中对运算结果显示方式,使程序读起来更自然
- 第九周任务三--定义分数类中<<和>>运算符重载,实现分数的输入输出,使程序读起来更自然。
- 《C++第九周实验报告3-1》----接第8周任务3,定义分数类中<<和>>运算符重载,实现分数的输入输出
- 第九周任务三之定义分数类中<<和>>运算符重载,实现分数的输入输出
- C++第九周【任务三】定义分数类中<<和>>运算符重载,实现分数的输入输出
- 第九周实验任务二--定义Complex类中的<<和>>运算符的重载,实现输入和输出,使程序读起来更自然
- 第九周 任务2 定义TIME类中的《和》运算重载,实现分数的输入输出。
- 第九周C++任务三。定义分数类中<<和>>运算符重载,实现分数的输入输出
- 第八周任务三实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、求反、比较(6种关系)的运算。
- 第8章-任务4-实现分数类中的运算符重载(分数与整数运算)
- 第八周实验任务三--实现分数类中的运算符重载并可以完成分数的加减乘除、求反、比较的运算