第八周任务3:实现分数类中的运算符重载
2012-04-11 18:03
351 查看
/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:定义一个复数类重载运算符+、-、*、/,使之能用于复数的加减乘除。
* 作 者: 杨建和
* 完成日期: 2012 年 04 月 11 日
* 版 本 号: V1.0
* 对任务及求解方法的描述部分
* 输入描述:
* 问题描述:
* 程序输出:
* 程序头部的注释结束
*/
感言:上机的任务不算太难。。老师 我有一个问题请教你:比较大小的时侯能不能采取 对“—”的重载运算符。这样就可以与0比较大小从而进行判断了啊。。。。
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:定义一个复数类重载运算符+、-、*、/,使之能用于复数的加减乘除。
* 作 者: 杨建和
* 完成日期: 2012 年 04 月 11 日
* 版 本 号: V1.0
* 对任务及求解方法的描述部分
* 输入描述:
* 问题描述:
* 程序输出:
* 程序头部的注释结束
*/
#include <iostream > using namespace std; int gcd(int,int); class CFraction {private: int nume; // 分子 int deno; // 分母 public: CFraction(int nu=0,int de=1); //构造函数,初始化用 void input(); //按照"nu/de"的格式,如"5/2"的形式输入 void simplify(); //化简(使分子分母没有公因子) void amplify(int n); //放大n倍,如2/3放大5倍为10/3 void display(); //输出:以8/6为例,style为0时,输出8/6; //style为1时,输出4/3; //style为2时,输出1(1/3),表示一又三分之一; //不给出参数和非1、2,认为是方式0 CFraction operator+(const CFraction &c); CFraction operator-(const CFraction &c); CFraction operator*(const CFraction &c); CFraction operator/(const CFraction &c); 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); }; //构造函数,初始化用 CFraction::CFraction(int nu,int de) { if(de!=0) { nume = nu; deno = de; } else { cout << "分母不能为零!"; exit(0); } } //按照"nu/de"的格式,如"5/2"的形式输入 void CFraction::input() { char c; while(1) { cin >> nume >> c >> deno; if(c !='/') cout << "格式不正确,请重新输入!"; else if(deno = 0) cout << "分母不能为零"; else break; } } //化简(使分子分母没有公因子) void CFraction::simplify() { int n ; n = gcd(nume,deno); nume = nume/n; deno = deno/n; } //求最大公约数的函数 int gcd(int x,int y) { int r; while(y!=0) { r = x%y; x = y; y = r; } return x; } void CFraction::display() { cout<<"("<<nume<<"/"<<deno<<")"<<endl; } CFraction CFraction::operator+(const CFraction &c) { CFraction s; s.deno = deno*c.deno; s.nume = nume*c.deno+deno*c.nume; s.simplify(); return s; } CFraction CFraction::operator-(const CFraction &c) { CFraction s; s.deno = deno*c.deno; s.nume = nume*c.deno+deno*c.nume; s.simplify(); return s; } CFraction CFraction::operator*(const CFraction &c) { CFraction s; s.deno = deno*c.deno; s.nume = nume*c.nume; s.simplify(); return s; } CFraction CFraction::operator/(const CFraction &c) { CFraction s; s.deno = deno*c.nume; s.nume = nume*c.deno; s.simplify(); return s; } //取反一目运算 CFraction CFraction::operator-() { CFraction s; s.deno=-deno; s.nume=nume; s.simplify(); return s; } // 分数比较大小 bool CFraction::operator>(const CFraction &c) { int this_nume,c_nume,common_deno; this_nume=nume*c.deno; // 计算分数通分后的分子,同分母为deno*c.deno c_nume=c.nume*deno; common_deno=deno*c.deno; if (this_nume>c_nume&&common_deno>0||this_nume<c_nume&&common_deno<0) // 将通分后的分子比较大小 return true; else return false; } // 分数比较大小 bool CFraction::operator<(const CFraction &c) { int this_nume,c_nume,common_deno; this_nume=nume*c.deno; c_nume=c.nume*deno; common_deno=deno*c.deno; if ((this_nume-c_nume)*common_deno<0) return true; else return false; } bool CFraction::operator==(const CFraction &c) { if(*this>c||*this<c) return false; else return true; } bool CFraction::operator!=(const CFraction &c) { if(*this<c||*this>c) return false; else return true; } 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; } int main() { CFraction x(2,5),y(-3,9),s; cout<<"分数x=2/5 y=-3/9"<<endl; s=x+y; cout<<"x+y="; s.display(); s=x-y; cout<<"x-y="; s.display(); s=x*y; cout<<"x*y="; s.display(); s=x/y; cout<<"x/y="; s.display(); s=-x+y; cout<<"-x+y="; s.display(); x.display(); if (x>y) cout<<"大于"<<endl; if (x<y) cout<<"小于"<<endl; if (x==y) cout<<"等于"<<endl; y.display(); cout<<endl; system("pause"); return 0; }
感言:上机的任务不算太难。。老师 我有一个问题请教你:比较大小的时侯能不能采取 对“—”的重载运算符。这样就可以与0比较大小从而进行判断了啊。。。。
相关文章推荐
- 第八周实验任务三--实现分数类中的运算符重载并可以完成分数的加减乘除、求反、比较的运算
- 第八周任务三实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、求反、比较(6种关系)的运算。
- c++第八周【任务3】实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、求反、比较(6种关系)的运算。
- 第八周实验任务三--实现分数类中的运算符重载并可以完成分数的加减乘除、求反、比较的运算
- 第八周实验报告任务3 实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除,求反,比较6种关系的运算。
- 第八周任务三(实现分数类中的运算符重载)
- 第八周实验报告任务4 实现分数类中的运算符重载,分数类中的对象可以和整数型进行四则运算,且运算符合交换律。
- 第八周上机任务四--实现分数类中的运算符重载,分数类中的对象可以和整型数进行四则运算,且运算符合交换律
- 第八周任务三:实现分数类中的运算符重载
- 第八周任务1:实现复数类中的运算符重载
- 第八周实验报告任务1 实现复数类中的运算符重载
- 第九周任务三--定义分数类中<<和>>运算符重载,实现分数的输入输出,使程序读起来更自然。
- 《第九周任务三》定义分数类中《和》运算符重载,实现分数的输入输出,改造源程序中对运算结果显示方式,使程序读起来更自然
- 第八周实验指导任务1--实现复数类中的运算符重载
- 《第九周任务三》定义分数类中《和》运算符重载,实现分数的输入输出,改造源程序中对运算结果显示方式,使程序读起来更自然
- 《第八周任务一-2》实现复数类中的运算符重载
- 《C++第八周实验报告3-1》---实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、求反、比较(6种关系)的运算
- 分子运算2013第八周上机任务【项目3-分数类中的运算符重载】
- 第八周实验报告任务2 实现Time类中的运算符重载
- 《C++第九周实验报告3-1》----接第8周任务3,定义分数类中<<和>>运算符重载,实现分数的输入输出