第9周项目3-分数类中的运算符重载续(2)
来源:互联网 发布:学生赚软件下载 编辑:程序博客网 时间:2024/05/22 05:33
/*。*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: friend istream& operator>>(istream &,CFraction &); friend ostream& operator<<(ostream &,const CFraction &); 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;}istream &operator>>(istream &in,CFraction &x){ char ch; while(1) { cin>>x.nume>>ch>>x.deno; if (x.deno==0) cerr<<"分母为0, 请重新输入\n"; else if(ch!='/') cerr<<"格式错误(形如m/n)! 请重新输入\n"; else break; } return cin;}ostream& operator<<(ostream &out,const CFraction &x){ out<<x.nume<<"/"<<x.deno<<endl; return out;}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;}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,y,s; cin>>x>>y; s=x+y; cout<<"x+y="; cout<<s; s=x-y; cout<<"x-y="; cout<<s; s=x*y; cout<<"x*y="; cout<<s; s=x/y; cout<<"x/y="; cout<<s; cout<<x; if (x>y) cout<<"大于"<<endl; if (x<y) cout<<"小于"<<endl; if (x==y) cout<<"等于"<<endl; cout<<y; cout<<endl; s=+y; cout<<"y取正为:"; cout<<s; s=-y; cout<<"y的相反数为:"; cout<<s; s=~x; cout<<"x的倒数为:"; cout<<s; return 0;}
运行结果:
0 0
- 第9周项目3-分数类中的运算符重载续(2)
- 第9周项目3-分数类中的运算符重载(续)
- 第9周项目3-分数类中的运算符重载续(1)
- 第9周项目3 分数类中的运算符重载(续)
- 第8周-项目3-分数类中的运算符重载(续)-++、--、>>、<<
- 第8周项目3-分数类中的运算符重载(续)
- 第7周-项目3-分数类中的运算符重载-拓展分数的加减乘除(分数与整型 )
- 第7周-项目3-分数类中的运算符重载-分数的加减乘除
- 第9周项目3分数类的运算符重载(续)
- C++第9周项目3 - 实现分数类中的运算符重载
- 第9周项目3分数类中的运算符重载
- 第8周项目3-分数类中的运算符重载(2)
- 第13周实践项目1分数类中的运算符重载(3)
- 第13周-项目1-分数类中的运算符重载(3)
- 第13周项目1—分数类中的运算符重载 (3)
- 第13周项目1:分数类中的运算符重载(3)
- 第7周项目4-分数类中的运算符重载(2)
- 第13周实践项目1分数类中的运算符重载(2)
- mfc C++类型转换
- javaScript高级程序设计阅读总结
- 格式转换说明符scanf,printf格式%大全/格式化输入输出
- Java面向对象之封装
- python的迭代器
- 第9周项目3-分数类中的运算符重载续(2)
- 第九周上机项目5 方程也是类
- MVC3 自带数据验证
- HBase 系统架构
- JAVA 反射 总结 之 初级 (一)
- 用matlab程序实现求解三次样条插值
- android 笔记
- Count and Say
- Tomcat Maven插件持续快捷部署Web项目