第9周项目3-分数类中的运算符重载续(1)
来源:互联网 发布:学生赚软件下载 编辑:程序博客网 时间:2024/05/16 10:51
/*。*Copyright(c)2014,烟台大学计算机学院*All right reserved,*文件名:test.cpp*作者:毕玉堂*完成日期:2015年5月17日*版本号:v1.0*问题描述:*输入描述:*程序输出:*/#include <iostream>#include<Cmath>#include<cstdlib>using namespace std;int gcd(int m, int n);class CFraction{private: int nume; // 分子 int deno; // 分母public: CFraction(int nu=0,int de=1):nume(nu),deno(de){} //构造函数,初始化用 void set(int nu=0,int de=1);//置值,改变值时用 CFraction operator+(const CFraction &c); CFraction operator-(const CFraction &c); CFraction operator*(const CFraction &c); CFraction 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); bool operator<=(const CFraction &c); void input(); //按照"nu/de"的格式,如"5/2"的形式输入 void simplify(); //化简(使分子分母没有公因子) void amplify(int n); //放大n倍,如2/3放大5倍为10/3 void output(int style); //输出:以8/6为例,style为0时,原样输出8/6; //style为1时,输出化简后形式4/3; //style为2时,输出1(1/3)形式,表示一又三分之一; //style为3时,用小数形式输出,如1.3333; //默认方式0 CFraction operator+();//取正 CFraction operator-();//求反 CFraction operator~();//求倒数};void CFraction::set(int nu,int de){ if(de!=0) { nume=nu; deno=de; }}CFraction CFraction::operator+(const CFraction &c){ CFraction a; a.nume=nume*c.deno+c.nume*deno; a.deno=deno*c.deno; a.simplify(); return a;}CFraction CFraction::operator-(const CFraction &c){ CFraction a; a.nume=nume*c.deno-c.nume*deno; a.deno=deno*c.deno; a.simplify(); return a;}CFraction CFraction::operator*(const CFraction &c){ CFraction a; a.nume=nume*c.nume; a.deno=deno*c.deno; a.simplify(); return a;}CFraction CFraction::operator/(const CFraction &c){ CFraction a; a.nume=nume*c.deno; a.deno=deno*c.nume; a.simplify(); return a;}bool CFraction::operator>(const CFraction &c){ if((nume*c.deno>c.nume*deno&&deno*c.deno>0)||(nume*c.deno<c.nume*deno&&deno*c.deno<0)) return true; return false;}bool CFraction::operator<(const CFraction &c){ if((nume*c.deno<c.nume*deno&&deno*c.deno>0)||(nume*c.deno>c.nume*deno&&deno*c.deno<0)) return true; return false;}bool CFraction::operator==(const CFraction &c){ if(*this!=c) return false; return true;}bool CFraction::operator!=(const CFraction &c){ if(*this>c||*this<c) return true; return false;}bool CFraction::operator>=(const CFraction &c){ if(*this<c) return false; return true;}bool CFraction::operator<=(const CFraction &c){ if(*this>c) return false; return true;}void CFraction::input(){ int nu,de; char a; cout<<"输入分数(m/n形式)"; cin>>nu>>a>>de; if(a!='/') { cout<<"输入形式错误"; } else if(de==0) { cout<<"输入形式错误"; } nume=nu; deno=de;}void CFraction::simplify(){ int n=gcd(deno, nume); deno/=n; // 化简 nume/=n;}// 求m,n的最大公约数int gcd(int m, int n) //这个函数可以定义为类的成员函数,也可以为一般函数{ int r; while(n!=0) { r=m%n; m=n; n=r; } return m;}void CFraction::amplify(int n){ nume*=n;}void CFraction::output(int style){ int n; switch(style) { case 0: cout<<"原样:" <<nume<<'/'<<deno<<endl; break; case 1: n=gcd(deno, nume); cout<<"化简形式: "<<nume/n<<'/'<<deno/n<<endl; //输出化简形式,并不是要化简 break; case 2: cout<<"带分数形式:" <<nume/deno<<'('<<nume%deno<<'/'<<deno<<')'<<endl; break; case 3: cout<<"近似值:" <<nume/double(deno)<<endl; break; default: cout<<"默认原样:" <<nume<<'/'<<deno<<endl; }}CFraction CFraction::operator+(){ CFraction c; if(nume<0&&deno>0) { c.nume=-nume; c.deno=deno; } else if(nume>0&&deno<0) { c.nume=nume; c.deno=-deno; } else { c.nume=nume; c.deno=deno; } return c;}CFraction CFraction::operator-(){ CFraction c; c.nume=-nume; c.deno=deno; return c;}CFraction CFraction::operator~(){ CFraction c; c.nume=deno; c.deno=nume; return c;}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.output(0); s=x-y; cout<<"x-y="; s.output(0); s=x*y; cout<<"x*y="; s.output(0); s=x/y; cout<<"x/y="; s.output(0); x.output(0); if (x>y) cout<<"大于"<<endl; if (x<y) cout<<"小于"<<endl; if (x==y) cout<<"等于"<<endl; y.output(0); cout<<endl; s=+y; cout<<"y取正为:"; s.output(0); s=-y; cout<<"y的相反数为:"; s.output(0); s=~x; cout<<"x的倒数为:"; s.output(0); return 0;}
运行结果:
0 0
- 第9周项目3-分数类中的运算符重载续(1)
- 第9周项目3-分数类中的运算符重载(续)
- 第9周项目3-分数类中的运算符重载续(2)
- 第9周项目3 分数类中的运算符重载(续)
- 第8周-项目3-分数类中的运算符重载(续)-++、--、>>、<<
- 第8周项目3-分数类中的运算符重载(续)
- 第13周实践项目1分数类中的运算符重载(3)
- 第13周-项目1-分数类中的运算符重载(3)
- 第13周项目1—分数类中的运算符重载 (3)
- 第13周项目1:分数类中的运算符重载(3)
- 第7周-项目3-分数类中的运算符重载-拓展分数的加减乘除(分数与整型 )
- 第7周-项目3-分数类中的运算符重载-分数的加减乘除
- 第9周项目3分数类的运算符重载(续)
- C++第9周项目3 - 实现分数类中的运算符重载
- 第9周项目3分数类中的运算符重载
- 第8周项目3-1分数类中的运算符重载
- 第8周项目3-分数类中的运算符重载(1)
- 第8周项目3(1)分数类中的运算符重载
- 奋斗的目标
- Leetcode:Add Two Numbers
- 【Android】【Other】一些Android知识点
- 【JS总结】——Browser Object Model(BOM)
- 快速排序
- 第9周项目3-分数类中的运算符重载续(1)
- js运动-完美运动框架
- lintcode:Longest Substring Without Repeating Characters
- jquery基础之笔记(全)
- mfc C++类型转换
- javaScript高级程序设计阅读总结
- 格式转换说明符scanf,printf格式%大全/格式化输入输出
- Java面向对象之封装
- python的迭代器