分数类中的运算符重载
2014-04-22 13:25
176 查看
/* * 程序的版权和版本声明部分 * Copyright (c)2014, 烟台大学计算机学院学生 * All rightsreserved. * 文件名称: fibnacci.cpp * 作 者:高古尊 * 完成日期:2014年3月27日 * 版本号: v1.0 * * 输入描述: * 问题描述: * 程序输出: * 问题分析: */ #include <iostream> using namespace std; class CFraction { private: int nume; // 分子 int deno; // 分母 public: CFraction(int nu=0,int de=1); //构造函数,初始化用 void set(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 output(int style=0);//输出:以8/6为例,style为0时,原样输出8/6; friend CFraction operator+(CFraction&,CFraction&); friend CFraction operator-(CFraction&,CFraction&); friend CFraction operator*(CFraction&,CFraction&); friend CFraction operator/(CFraction&,CFraction&); friend bool operator>(CFraction&,CFraction&); friend bool operator<(CFraction&,CFraction&); friend bool operator<=(CFraction&,CFraction&); friend bool operator>=(CFraction&,CFraction&); friend bool operator==(CFraction&,CFraction&); friend bool operator!=(CFraction&,CFraction&); void display(); }; int main() { CFraction x(1,3),y(-5,10),s; cout<<"分数x=1/3 y=-5/10"<<endl; s=x+y; cout<<"x+y="; s.simplify(); s.display(); s=x-y; cout<<"x-y="; s.simplify(); s.display(); s=x*y; cout<<"x*y="; s.simplify(); s.display(); s=x/y; cout<<"x/y="; s.simplify(); s.display(); x.simplify(); x.display(); if (x>y) cout<<"大于"<<endl; if (x<y) cout<<"小于"<<endl; if (x==y) cout<<"等于"<<endl; y.simplify(); y.display(); cout<<endl; return 0; } CFraction::CFraction(int nu,int de ) { nume=nu; deno=de; return ; } void CFraction::set(int nu,int de) { nume=nu; deno=de; } void CFraction::input() { char ch; cin>>nume>>ch>>deno; } void CFraction::simplify() { int n,n1,n2; n1=(nume>=0)?nume:-nume; n2=(deno>=0)?deno:-deno; n=(n1>n2)?n1:n2; for(; n>1; n--) { if(nume%n==0&&deno%n==0) { nume/=n; deno/=n; } } } void CFraction::amplify(int n) { nume*=n; } void CFraction::output(int style) { switch(style) { case 0: cout<<nume<<'/'<<deno<<endl; case 1: simplify(); cout<<nume<<'/'<<deno<<endl; case 2: int n,m; n=nume/deno; m=nume%deno; if(m==0) { m=1; } cout<<n<<'('<<m<<'/'<<deno<<')'<<endl; case 3: cout<<(double)nume/deno<<endl;; } } CFraction operator+(CFraction &n1,CFraction &n2) { CFraction n; n.deno=n1.deno*n2.deno; n.nume=n1.nume*n2.deno+n2.nume*n1.deno; //n.simplify(); return n; } CFraction operator-(CFraction&n1,CFraction&n2) { CFraction n; n.deno=n1.deno*n2.deno; n.nume=n1.nume*n2.deno-n2.nume*n1.deno; //n.simplify(); return n; } CFraction operator*(CFraction&n1,CFraction&n2) { CFraction n; n.deno=n1.deno*n2.deno; n.nume=n1.nume*n2.nume; n.simplify(); return n; } CFraction operator/(CFraction&n1,CFraction&n2) { CFraction n; n.deno=n1.deno*n2.nume; n.nume=n1.nume*n2.deno; //n.simplify(); return n; } bool operator>(CFraction&n1,CFraction&n2) { return(n1.nume*n2.deno>n2.nume*n1.deno)?true:false; } bool operator<(CFraction&n1,CFraction&n2) { return(n1.nume*n2.deno<n2.nume*n1.deno)?true:false; } bool operator<=(CFraction&n1,CFraction&n2) { return(n1<n2||n1==n2)?true:false; } bool operator>=(CFraction&n1,CFraction&n2) { return(n1>n2||n1==n2)?true:false; } bool operator==(CFraction&n1,CFraction&n2) { return(n1.nume*n2.deno==n2.nume*n1.deno)?true:false; } bool operator!=(CFraction&n1,CFraction&n2) { return(n1==n2)?false:true; } void CFraction::display() { cout<<nume<<'/'<<deno<<endl; }
相关文章推荐
- 第八周任务3:实现分数类中的运算符重载
- 《第九周任务三》定义分数类中《和》运算符重载,实现分数的输入输出,改造源程序中对运算结果显示方式,使程序读起来更自然
- 分数类中的运算符重载
- 项目3-分数类中的运算符重载
- 项目3~~分数类的运算符重载
- 第八周(项目三1)——分数类中的运算符重载.
- 第九周 项目3 实现分数类中的运算符重载
- 第八周——分数类中的运算符重载
- 第八周项目3(1)——分数类中的运算符重载
- 第八周 项目3-分数类中的运算符重载(1)加减乘除和6种比较关系
- 第8周项目3-分数类中的运算符重载(2)
- 第十周上机项目3分数类中的运算符重载
- 第九周项目3-分数类中的运算符重载(续)
- 第九周 项目三--分数类中的运算符重载(续)
- 第十三周项目58-分数类中的运算符重载
- 第13周项目1:分数类中的运算符重载(2)
- 第十三周上机实践项目1(4):分数类中的运算符重载
- 第十三周项目:分数类中的运算符重载
- 第八周任务三实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、求反、比较(6种关系)的运算。
- 第八周实验任务三--实现分数类中的运算符重载并可以完成分数的加减乘除、求反、比较的运算