⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tt.cpp

📁 能够计算出整数和分数分数的加、减、乘法
💻 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 + -