第八周项目3-分数类中的运算符重载
2014-04-15 17:46
363 查看
/* *程序的版权和版本声明部分: *Copyright(c)2014,烟台大学计算机学院学生 *All rights reserved. *文件名称: *作者:田成琳 *完成日期:2014 年 4 月 15 日 *版本号:v1.0 *对任务及求解方法的描述部分: *输入描述:无 *问题描述:实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、 比较(6种关系)的运算 *程序输出:- - *问题分析: *算法设计: */ #include<iostream> using namespace std; class CFraction { private: int nume; // 分子 int deno; // 分母 public: CFraction(int n=0,int d=0); void set(int n,int d); bool operator > (CFraction &a); bool operator < (CFraction &a); bool operator >= (CFraction &a); bool operator <= (CFraction &a); bool operator == (CFraction &a); bool operator != (CFraction &a); CFraction operator + (CFraction &a); CFraction operator - (CFraction &a); CFraction operator * (CFraction &a); CFraction operator / (CFraction &a); void output(); void setfy(); int gongbeis(int,int); }; CFraction::CFraction(int n,int d) { nume=n; deno=d; } void CFraction::set(int n,int d) { nume=n; deno=d; } void CFraction::output() { cout<<nume<<"/"<<deno<<endl; } bool CFraction::operator > (CFraction &a) { int c=gongbeis(deno,a.deno); nume*=(c/deno); deno=c; a.nume*=(c/a.deno); a.deno=c; if(nume>a.nume) return true; else return false; } bool CFraction::operator < (CFraction &a) { int c=gongbeis(deno,a.deno); nume*=(c/deno); deno=c; a.nume*=(c/a.deno); a.deno=c; if(nume>a.nume) return false; else return true; } bool CFraction::operator >= (CFraction &a) { int c=gongbeis(deno,a.deno); nume*=(c/deno); deno=c; a.nume*=(c/a.deno); a.deno=c; if(nume>=a.nume) return true; else return false; } bool CFraction::operator <= (CFraction &a) { int c=gongbeis(deno,a.deno); nume*=(c/deno); deno=c; a.nume*=(c/a.deno); a.deno=c; if(nume<=a.nume) return true; else return false;} bool CFraction::operator == (CFraction&a) { int c=gongbeis(deno,a.deno); nume*=(c/deno); deno=c; a.nume*=(c/a.deno); a.deno=c; if(nume==a.nume) return true; else return false; } bool CFraction::operator != (CFraction &a) { int c=gongbeis(deno,a.deno); nume*=(c/deno); deno=c; a.nume*=(c/a.deno); a.deno=c; if(nume!=a.nume) return true; else return false; } CFraction CFraction::operator + (CFraction &a) { int c=gongbeis(deno,a.deno); nume*=(c/deno); deno=c; a.nume*=(c/a.deno); a.deno=c; nume+=a.nume; setfy(); CFraction t(nume,deno); return t; } CFraction CFraction::operator - (CFraction &a) { int c=gongbeis(deno,a.deno); nume*=(c/deno); deno=c; a.nume*=(c/a.deno); a.deno=c; nume-=a.nume; setfy(); CFraction t(nume,deno); return t; } CFraction CFraction::operator * (CFraction &a) { int c=gongbeis(deno,a.deno); deno=c; a.deno=c; nume*=a.nume; setfy(); CFraction t(nume,deno); return t; } CFraction CFraction::operator / (CFraction &a) { int z; z=a.nume; a.nume=a.deno; a.deno=z; int c=gongbeis(deno,a.deno); deno=c; a.deno=c; nume*=a.nume; setfy(); CFraction t(nume,deno); return t; } int main() { CFraction t,t1(4,5),t2(3,5),t3(4,15),t4(9,5),t5(-3,2),t6(6,11); CFraction t7(5,16),t8(1,3); cout<<"t1="; t1.output(); cout<<"t2="; t2.output(); cout<<"下面比较两个分数大小:\n"; if (t1>t2) cout<<"t1>t2"<<endl; if (t1<t2) cout<<"t1<t2"<<endl; if (t1==t2) cout<<"t1=t2"<<endl; if (t1!=t2) cout<<"t1≠t2"<<endl; if (t1>=t2) cout<<"t1≥t2"<<endl; if (t1<=t2) cout<<"t1≤t2"<<endl; cout<<endl; cout<<"t1+t2="; t=t1+t2; t.output(); cout<<"t3-t4="; t=t3-t4; t.output(); cout<<"t5*t6="; t=t5*t6; t.output(); cout<<"t7/t8="; t=t7/t8; t.output(); return 0; } int CFraction::gongbeis(int a,int b) { int i; for(i=1; i<=a*b; i++) if(i%a==0&&i%b==0) break; return i; } void CFraction::setfy() { int i,t; if(nume>deno) t=nume; else t=deno; for(i=2; i<=t; i++) { while(nume%i==0&&deno%i==0) { nume/=i; deno/=i; } } }
运行结果:
心得体会:繁琐。
相关文章推荐
- 第八周项目三(1):分数类中的运算符重载
- 第八周项目三 分数类中的运算符重载 (2)
- 第八周上机实践项目3-分数类中的运算符重载(分数与分数、分数与整数)
- 第八周项目三 分数类中的运算符重载1
- 2015年第八周项目三:分数类中的运算符重载(1)
- 第八周——运算符重载——项目三(2)分数类
- 第八周项目三——分数类中的运算符重载
- 第八周 项目3 分数类中的运算符重载
- 第八周项目三分数类中的运算符重载(1)
- 第八周项目3-分数类中的运算符重载
- 第八周项目三 分数类中的运算符重载 2
- 第八周项目三-分数类中的运算符重载
- 第八周项目3-分数类中的运算符重载
- 第八周上机实践项目3——分数类的运算符重载(1)
- 第八周项目三--分数类中的运算符重载(2)
- 第八周 【项目3-分数类中的运算符重载】(2)
- 第八周 项目3-分数类中的运算符重载(2)
- 第八周项目3 分数类中的运算符重载
- 2015年第八周项目三:分数类中的运算符重载(2)
- 第八周项目三——分数类中的运算符重载(2)