第9周实验报告3
2012-04-18 21:13
441 查看
/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称:分数类改 * 作 者:张旭 * 完成日期: 2012 年 4 月 19 日 * 版 本 号:略 * 对任务及求解方法的描述部分 * 输入描述:略 * 问题描述:略 * 程序输出:略 * 程序头部的注释结束 */ #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 simplify(); void display(); CFraction operator+(const CFraction &c); //两个分数相加,结果要化简 CFraction operator-(const CFraction &c); //两个分数相减,结果要化简 CFraction operator*(const CFraction &c); //两个分数相乘,结果要化简 CFraction operator/(const CFraction &c); //两个分数相除,结果要化简 CFraction operator+(); //取正一目运算 CFraction operator-(); //取反一目运算 bool operator>(const CFraction &c); bool operator<(const CFraction &c); bool operator==(const CFraction &c); bool operator!=(const CFraction &c); bool operator>=(const CFraction &c); bool operator<=(const CFraction &c); friend istream &operator>>(istream &input, CFraction &d); friend ostream &operator<<(ostream &output, CFraction &d); }; // 分数化简 void CFraction::simplify() { int m, n, r; m=abs(deno); n=abs(nume); while(r=m%n) { m=n; n=r; } deno /= n; nume /= n; if (deno < 0) { deno =- deno; nume =- nume; } } void CFraction::display() { cout << "(" << nume << "/" << deno << ")" << endl; } CFraction CFraction::operator+ (const CFraction &c) { CFraction t; t.nume = nume * c.deno + c.nume * deno; t.deno = deno * c.deno; t.simplify(); return t; } CFraction CFraction:: operator- (const CFraction &c) { CFraction t; t.nume = nume * c.deno - c.nume * deno; t.deno = deno * c.deno; t.simplify(); return t; } CFraction CFraction:: operator* (const CFraction &c) { CFraction t; t.nume = nume * c.nume; t.deno = deno * c.deno; t.simplify(); return t; } CFraction CFraction:: operator/(const CFraction &c) { CFraction t; if (!c.nume) { return *this; } t.nume = nume * c.deno; t.deno = deno * c.nume; t.simplify(); return t; } CFraction CFraction:: operator+() { return *this; } CFraction CFraction:: operator-() { CFraction x; x.nume = -nume; x.deno = deno; return x; } bool CFraction::operator>(const CFraction &c) { int n, a, d; n = nume * c.deno; a = c.nume * deno; d = deno * c.deno; if (n > a && d > 0 || n < a && d < 0) { return true; } return false; } bool CFraction::operator<(const CFraction &c) { int n, a, d; n = nume * c.deno; a = c.nume * deno; d = deno * c.deno; if ((n - a) * d < 0) { return true; } else { return false; } } bool CFraction::operator==(const CFraction &c) { if (*this!=c) { return false; } else { return true; } } bool CFraction::operator!=(const CFraction &c) { if (*this > c || *this < c) { return true; } else { return false; } } bool CFraction::operator>=(const CFraction &c) { if (*this<c) { return false; } else { return true; } } bool CFraction::operator<=(const CFraction &c) { if (*this > c) { return false; } else { return true; } } //改函数 istream &operator>>(istream &input, CFraction &d) { char c; input >> d.nume; cin >> c; input >> d.deno; return input; } ostream &operator << (ostream &output, CFraction &d) { char c = '/'; output << d.nume << c << d.deno; return output; } int main() { CFraction x(1,3),y(-5,10),s; cin >> s; cout << x << endl << y << endl << s << endl; system("pause"); return 0; }