📄 tt.cpp
字号:
#include<iostream>
#include<cstdlib>
#include<cmath>
#include<string>
using namespace std;
class CFraction //分数类定义
{
private:
int nNume; //分子
int nDeno; //分母
char AnyChar; //定义一个字符变量
public:
CFration(); //构造函数
CFration(int nume,int deno); //构造函数
int Getnume()const; //返回分子,const成员函数,不能修改数据成员
int Getdeno()const; //返回分母
double Decimal()const; //将分数转换为对应的小数
CFraction Absval()const; //返回分数的绝对值
void Setnume(int newnume); //设置分子
void Setdeno(int newdeno); //设置分母
void Simplify(); //约分
void Recip(); //分子分母置换
const CFraction&operator+=(int num); //重载+=运算符
const CFraction&operator-=(int num);
const CFraction&operator*=(int num);
CFraction(){ nNume=0; nDeno=1;} //默认构造函数(=0/1)
CFraction(int nume,int deno){nNume=nume;nDeno=deno;}
};
int GCF(int x,int y); //求x、y的最大公因子
CFraction operator+(const CFraction&leftfra,const CFraction&rightfra);
CFraction operator+(const CFraction&leftfra,int rightnum);
CFraction operator-(const CFraction&leftfra,const CFraction&rightfra);
CFraction operator-(const CFraction&leftfra,int rightnum);
CFraction operator*(const CFraction&leftfra,const CFraction&rightfra);
CFraction operator*(const CFraction&leftfra,int rightnum);
CFraction operator^(const CFraction&basetra,int exp); //(幂)运算符重载
bool operator==(const CFraction&leftfra,const CFraction&rightfra); //逻辑运算符
bool operator!=(const CFraction&leftfra,const CFraction&rightfra);
bool operator>=(const CFraction&leftfra,const CFraction&rightfra);
ostream&operator<<(ostream&os,const CFraction&fra); //输出运算符重载
istream&operator>>(istream&is,CFraction&fra); //输入运算符重载
int CFraction::Getnume()const{return nNume;}
int CFraction::Getdeno()const{return nDeno;}
double CFraction::Decimal()const{return double(nNume)/double(nDeno);}
CFraction CFraction::Absval()const
{ CFraction returnValue(abs(nNume),abs(nDeno));
return returnValue;
}
void CFraction::Setnume(int newnume){nNume=newnume;}
void CFraction::Setdeno(int newdeno)
{ if(newdeno!=0)
nDeno=newdeno;
else
{ cout<<"错误:分母不可以为0 !\n"<<"按任意键继续";
cin>>AnyChar;
abort();
}
}
void CFraction::Simplify()
{ int r=GCF(nNume,nDeno);
nNume/=r;
nDeno/=r;
}
void CFraction::Recip()
{ int temp=nNume;
nNume=nDeno;
nDeno=temp;
}
const CFraction& CFraction::operator+=(int rightnum)
{ CFraction newrhs(rightnum,1);
return(*this+newrhs);
}
const CFraction& CFraction::operator-=(int rightnum)
{ CFraction newrhs(rightnum,1);
return(*this-newrhs);
}
const CFraction& CFraction::operator*=(int rightnum)
{ CFraction newrhs(rightnum,1);
return(*this*newrhs);
}
int GCF(int x,int y) //辗转相除求x、y的最大公约数
{ int r=x%y;
if(r==0)
return y;
else
return GCF(y,r);
}
CFraction operator+(const CFraction&leftfra,const CFraction&rightfra)
{ CFraction sum;
int newnum=(leftfra.Getnume()*rightfra.Getdeno())+(rightfra.Getnume()*leftfra.Getdeno());
int newden=(leftfra.Getdeno()*rightfra.Getdeno());
sum.Setnume(newnum);
sum.Setdeno(newden);
sum.Simplify();
return sum;
}
CFraction operator+(const CFraction&leftfra,int rightnum)
{ CFraction newrhs(rightnum,1);
return leftfra+newrhs;
}
CFraction operator-(const CFraction&leftfra,const CFraction&rightfra)
{ CFraction cha;
int newnum=(leftfra.Getnume()*rightfra.Getdeno())-(rightfra.Getnume()*leftfra.Getdeno());
int newden=(leftfra.Getdeno()*rightfra.Getdeno());
cha.Setnume(newnum);
cha.Setdeno(newden);
cha.Simplify();
return cha;
}
CFraction operator-(const CFraction&leftfra,int rightnum)
{ CFraction newrhs(rightnum,1);
return leftfra-newrhs;
}
CFraction operator*(const CFraction&leftfra,const CFraction&rightfra)
{ CFraction ji;
int newnum=(leftfra.Getnume()*rightfra.Getnume());
int newden=(leftfra.Getdeno()*rightfra.Getdeno());
ji.Setnume(newnum);
ji.Setdeno(newden);
ji.Simplify();
return ji;
}
CFraction operator*(const CFraction&leftfra,int rightnum)
{ CFraction newrhs(rightnum,1);
return leftfra*newrhs;
}
CFraction operator^(const CFraction&basefra,int exp)
{ CFraction returnValue;
returnValue.Setnume(pow(basefra.Getnume(),exp));
returnValue.Setdeno(pow(basefra.Getdeno(),exp));
return returnValue;
}
bool operator==(const CFraction&leftfra,const CFraction&rightfra)
{ return leftfra.Decimal()==rightfra.Decimal();
}
bool operator!=(const CFraction&leftfra,const CFraction&rightfra)
{ return leftfra.Decimal()!=rightfra.Decimal();
}
bool operator!=(const CFraction&leftfra,int rightnum)
{ return leftfra.Decimal()!=rightnum;
}
bool operator>=(const CFraction&leftfra,const CFraction&rightfra)
{ return leftfra.Decimal()>=rightfra.Decimal();
}
ostream&operator<<(ostream&os,const CFraction&fra)
{ CFraction temp=fra.Absval();
int numer=fra.Getnume();
int denom=fra.Getdeno();
if((!((numer>0&&denom>0)||(numer<0&&denom<0)))&&fra!=0)
os<<'-';
if(temp.Getnume()==0||temp.Getdeno()==1)
os<<temp.Getnume();
else
os<<temp.Getnume()<<'/'<<temp.Getdeno();
return os;
}
istream&operator>>(istream&is, CFraction&fra)//is为输入流,fra为待输入的分数
{ int newnum,newden;
char slash=' ';
do
{ is>>newnum>>slash>>newden;
} while(slash!='/');
fra.Setnume(newnum);
fra.Setdeno(newden);
return is;
}//*********************************************//
int main()
{ CFraction f1;
CFraction f2;
int i,x=1,y=1,z=1;
while(x!=0)
{
cout<<"********按数字选择功能********\n";
cout<<"[1]四则运算&幂运算\n";
cout<<"[2]逻辑运算\n";
cout<<"[0]退出程序\n\n";
cin>>x;
y=1;
while(x==1&&y!=0)
{ cout<<"********按数字选择功能********\n";
cout<<"[1]加法\n";
cout<<"[2]减法\n";
cout<<"[3]乘法\n";
cout<<"[4]除法\n";
cout<<"[5]乘方\n";
cout<<"[0]返回上一级\n\n";
cin>>y;
if(y==1||y==2||y==3||y==4)
{ cout<<"********按数字选择功能********\n";
cout<<"[1]两个分数\n";
cout<<"[2]分数与整数\n";
cout<<"[0]返回上一级 \n\n";
cin>>z;
if(z==1)
{ cout<<"输入第1个分数:\t";
cin>>f1;
cout<<"\n输入第2个分数:\t";
cin>>f2;
f1.Simplify();
f2.Simplify();
cout<<'\n'<<f1<<"的小数形式为"<<f1.Decimal()<<'\n';
cout<<f2<<"的小数形式为"<<f2.Decimal()<<"\n\n";
if(y==1){CFraction sum=f1+f2;cout<<f1<<"+"<<f2<<"="<<sum
<<"("<<sum.Decimal()<<"\n\n";}
if(y==2){CFraction cha=f1-f2;cout<<f1<<"-"<<f2<<"="<<cha
<<"("<<cha.Decimal()<<"\n\n";}
if(y==3){CFraction ji=f1*f2;cout<<f1<<"*"<<f2<<"="<<ji
<<"("<<ji.Decimal()<<"\n\n";}
if(y==4){cout<<"\n对不起,我不会做,请您编程!\n";}
}
if(z==2)
{ cout<<"输入分数:\t";
cin>>f1;
cout<<"\n输入整数:\t";
cin>>i;
f1.Simplify();
if(y==1)cout<<f1<<"+"<<i<<"="<<f1+i<<"\n\n";
if(y==2){cout<<f1<<"-"<<i<<"="<<f1-i<<"\n\n";}
if(y==3){cout<<f1<<"*"<<i<<"="<<f1*i<<"\n\n";}
if(y==4){cout<<"\n对不起,我不会做,请您编程!\n";}
}
}
if(y==5)
{ cout<<"输入分数:\t";
cin>>f1;
cout<<"\n输入幂数:\t";
cin>>i;
f1.Simplify();
CFraction exp=f1^i;
cout<<"\n"<<f1<<"~"<<i<<"=="<<exp<<"\n\n";
}
}
if(x==2)
{ cout<<"输入第1个分数:\t";
cin>>f1;
cout<<"\n输入第2个分数:\t";
cin>>f2;
f1.Simplify();
f2.Simplify();
cout<<"\n用布尔型变量表示,1为真,0为假\n\n";
cout<<f1<<"=="<<f2<<";\t"<<(f1==f2)<<"\n\n";
cout<<f1<<"!="<<f2<<";\t"<<(f1!=f2)<<"\n\n";
if(f1>=f2)
cout<<f1<<">="<<f2<<"\n\n";
else
cout<<f1<<"<="<<f2<<"\n\n";
}
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -