#include<stdlib.h>
#include<iostream>
using namespace std;
int M=1;
class CFraction
{
private:
int nume;
int deno;
public:
CFraction (int n=1,int d=1):nume(n),deno(d){}
CFraction operator+(CFraction &c);
CFraction operator-(CFraction &c);
CFraction operator*(CFraction &c);
CFraction operator/(CFraction &c);
CFraction operator+(int c);
CFraction operator-(int c);
CFraction operator*(int c);
CFraction operator/(int c);
CFraction operator-();
bool operator>(CFraction &c);
CFraction simply(CFraction &c);
friend int divisor(CFraction &c);
friend int multiple(CFraction &c);
void display();
int min(int,int);
};
CFraction CFraction::operator+(CFraction &c)
{
CFraction a;
a.deno=deno*c.deno;
a.nume=nume*c.deno+c.nume*deno;
a=simply(a);
return a;
}
CFraction CFraction::operator+(int c)
{
CFraction a;
a.deno=deno;
a.nume=nume+c*deno;
a=simply(a);
return a;
}
CFraction CFraction::operator-(CFraction &c)
{
CFraction a;
a.deno=deno*c.deno;
a.nume=nume*c.deno-c.nume*deno;
a=simply(a);
return a;
}
CFraction CFraction::operator-(int c)
{
CFraction a;
a.deno=deno;
if(nume>c*deno)
{
a.nume=nume-c*deno;
}else{
M=0;
a.nume=c*deno-nume;
}
a=simply(a);
return a;
}
CFraction CFraction::operator*(CFraction &c)
{
CFraction a;
a.deno=deno*c.deno;
a.nume=nume*c.nume;
a=simply(a);
return a;
}
CFraction CFraction::operator*(int c)
{
CFraction a;
a.deno=deno;
a.nume=nume*c;
a=simply(a);
return a;
}
CFraction CFraction::operator/(CFraction &c)
{
CFraction a;
a.nume=nume*c.deno;
a.deno=deno*c.nume;
a=simply(a);
return a;
}
CFraction CFraction::operator/(int c)
{
CFraction a;
a.deno=deno*c;
a.nume=nume;
a=simply(a);
return a;
}
CFraction CFraction::operator-()
{
CFraction a;
a.deno=nume;
a.nume=deno;
a=simply(a);
return a;
}
bool CFraction::operator>(CFraction &c)
{
if(nume/deno>c.nume/c.deno)
return true;
else{
return false;
}
}
CFraction CFraction::simply(CFraction &c) //化简
{
CFraction a;
int b=divisor(c);
a.nume=c.nume/b;
a.deno=c.deno/b;
return a;
}
int CFraction::min(int n ,int m)
{
if(deno<nume) return deno;
else return nume;
}
int divisor(CFraction &c) //求最大公约数
{
int n=min(c.deno,c.nume);
for(int i=n;i>=0;i--)
{
if(c.deno%i==0 && c.nume%i==0)
{
return i;
break;
}
}
}
void CFraction::display()
{
cout<<"("<<nume<<"/"<<deno<<")";
}
int main()
{
int m,p,o,i;
CFraction t(2,9),t1(3,4),t2(3,2),t3,t4,t5,t6,t7;
cout<<"第一个分数为:";
t1.display();
cout<<endl<<"第二个分数为:";
t2.display();
cout<<endl;
cout<<endl<<"t1+t2=";
t3=t1+t2;
t3.display();
cout<<endl<<"t2-t1=";
t3=t2-t1;
t3.display();
cout<<endl<<"t1*t2=";
t3=t1*t2;
t3.display();
cout<<endl<<"t1/t2=";
t3=t1/t2;
t3.display();
cout<<endl<<"去倒数";
t3=-t1;
t3.display();
if(t1>t2){
cout<<endl<<"t1>t2"<<endl;
}else{
cout<<endl<<"t1<t2"<<endl;
}
cout<<"请输入您想在t1的基础上加上个整数:"<<endl;
cin>>m;
t4=t1+m;
t1.display();
cout<<"+"<<m<<"=";
t4.display();
cout<<endl<<"请输入您想在t1的基础上减个整数:"<<endl;
cin>>p;
t5=t1-p;
t1.display();
cout<<"-"<<m<<"=";
if(M==0) cout<<"-";
t5.display();
cout<<endl<<"请输入您想在t1的基础上乘个整数:"<<endl;
cin>>o;
t6=t1*o;
t1.display();
cout<<"*"<<m<<"=";
t6.display();
cout<<endl<<"请输入您想在t的基础上除个整数:"<<endl;
cin>>i;
t7=t/i;
t.display();
cout<<"/"<<i<<"=";
t7.display();
cout<<endl;
system("pause");
return 0;
}
输出结果:
心得体会:
自己写的代码和老师的相比,真的很逊。