第八周【项目3-分数类中的运算符重载】
来源:互联网 发布:hello树先生知乎 编辑:程序博客网 时间:2024/05/28 16:06
问题及代码:
/* *Copyright (c) 2014,烟台大学计算机学院 *ALL right reserved *文件名:分数类的雏形 *作者;童宇 *完成日期:2015年3月31日 *版本号v1.0 *问题描述:设计一个简单的分数类,完成对分数的几个运算 *输入描述: *程序输出: */#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 output(); CFraction friend operator+(const CFraction &a,const CFraction &b); CFraction friend operator-(const CFraction &a,const CFraction &b); CFraction friend operator*(const CFraction &a,const CFraction &b); CFraction friend operator/(const CFraction &a,const CFraction &b); bool friend operator>(const CFraction &d,const CFraction &c); bool friend operator<(const CFraction &d,const CFraction &c); bool friend operator==(const CFraction &d,const CFraction &c); bool friend operator!=(const CFraction &d,const CFraction &c); bool friend operator>=(const CFraction &d,const CFraction &c); bool friend operator<=(const CFraction &d,const CFraction &c);};bool operator>(const CFraction &d,const CFraction &c){ int this_nume,c_nume,common_deno; this_nume=d.nume*c.deno; // 计算分数通分后的分子,同分母为deno*c.deno c_nume=c.nume*d.deno; common_deno=d.deno*c.deno; if ((this_nume-c_nume)*common_deno>0) return true; return false;}bool operator<(const CFraction &d,const CFraction &c){ int this_nume,c_nume,common_deno; this_nume=d.nume*c.deno; c_nume=c.nume*d.deno; common_deno=d.deno*c.deno; if ((this_nume-c_nume)*common_deno<0) return true; return false;}bool operator==(const CFraction &d,const CFraction &c){ if (d!=c) return false; return true;}bool operator!=(const CFraction &d,const CFraction &c){ if (d>c || d<c) return true; return false;}bool operator>=(const CFraction &d,const CFraction &c){ if (d<c) return false; return true;}bool operator<=(const CFraction &d,const CFraction &c){ if (d>c) return false; return true;}CFraction operator+(const CFraction &a,const CFraction &b){ CFraction c(a.nume*b.deno+b.nume*a.deno,a.deno*b.deno); c.simplify(); return c;}CFraction operator-(const CFraction &a,const CFraction &b){ CFraction c(a.nume*b.deno-b.nume*a.deno,a.deno*b.deno); c.simplify(); return c;}CFraction operator*(const CFraction &a,const CFraction &b){ CFraction c(a.nume*b.nume,a.deno*b.deno); c.simplify(); return c;}CFraction operator/(const CFraction &a,const CFraction &b){ CFraction c(b.deno,b.nume); CFraction d=a*c; c.simplify(); return d;}
void CFraction::simplify() //化简(使分子分母没有公因子){ int a,b=nume,c=deno; while(b%c!=0) { a=b%c; b=c; c=a; } nume/=c; deno/=c; if (deno<0) // 将分母转化为正数 { deno=-deno; nume=-nume; }}void CFraction::output(){ cout<<"("<<nume<<"/"<<deno<<")"<<endl;}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(); s=x-y; cout<<"x-y="; s.output(); s=x*y; cout<<"x*y="; s.output(); s=x/y; cout<<"x/y="; s.output(); x.output(); if (x>y) cout<<"大于"<<endl; if (x<y) cout<<"小于"<<endl; if (x==y) cout<<"等于"<<endl; y.output(); cout<<endl; return 0;}
运行结果:
学习心得:
面对这样一个大的项目,一开始有点心烦,不过慢慢做下来还是能发现自己的许多的不足,收货很大。
0 0
- 第八周 项目3 分数类中的运算符重载
- 第八周【项目3-分数类中的运算符重载】
- 第八周项目3-分数类中的运算符重载
- 第八周 项目3 分数类中的运算符重载
- 第八周项目3-分数类中的运算符重载
- 第八周【项目3-分数类中的运算符重载】
- 第八周【项目3-分数类中的运算符重载】
- 第八周项目3 分数类中的运算符重载
- 第八周项目3-分数类中的运算符重载
- 第八周项目3-分数类中的运算符重载
- 第八周项目3-分数类中的运算符重载
- 第八周项目三----分数类中的运算符重载
- 第八周 项目三:分数类中的运算符重载
- 第八周项目三 分数类中的运算符重载
- 第八周项目三--分数类中的运算符重载
- 第八周项目三-分数类中的运算符重载
- 第八周上机实践项目3-分数类中的运算符重载(分数与分数、分数与整数)
- 第八周项目3--分数类运算符重载
- JDBC工具类
- 网站常见错误代码解释
- iOS7 禁止某一个界面手势放回
- 消除类游戏案例:Sushi Crush(三)
- UML系列图--用例图
- 第八周【项目3-分数类中的运算符重载】
- Android版:验证手机号码的正则表达式
- Handler和HandlerThread
- uva818(暴力枚举)
- 疯狂Java之学习笔记(23)-----------枚举类
- java nio
- 五个编程谬论
- [LeetCode]-005-Longest Palindromic Substring
- JavaScript:Day one