#include <iostream>
#include<cstdlib>
using namespace std;
class CFraction
{
public:
CFraction(int nu=0,int de=1);
void output(int style=0); //输出多种方式
void set(int nu=0,int de=1); //置值,改变值时用
void input(); //按照"nu/de"的格式,如"5/2"的形式输入
void simplify(); //化简(使分子分母没有公因子)
void amplify(int n); //放大n倍,如2/3放大5倍为10/3
int gys(int nu,int de); //找寻最大公约数
private:
int nume; // 分子
int deno; // 分母
};
CFraction::CFraction(int nu,int de)
{
if (de!=0) //没考虑到分母不为0
{
nume=nu;
deno=de;
}
else
{
cerr<<"初始化中发生错误,程序退出\n";
exit(0);
}
}
void CFraction::output(int style)
{
int n;
switch(style)//注释的太不好看了
{
case 0:
cout<<"原样:"<<nume<<'/'<<deno<<endl;
break;
case 1:
n=gys(nume,deno);
cout<<"化简形式: "<<nume/n<<'/'<<deno/n<<endl;
break;
case 2:
simplify();
cout<<"带分数形式:" <<nume/deno<<'('<<nume%deno<<'/'<<deno<<')'<<endl;
break;
case 3:
cout<<"近似值:" <<nume/double(deno)<<endl;
break;
default:
cout<<"默认原样:" <<nume<<'/'<<deno<<endl;
}
/*if(style==0)
{cout<<nume<<"/"<<deno<<endl;}
if(style==1)
{simplify();
cout<<nume<<"/"<<deno<<endl;}
if(style==2)
{simplify();
cout<<nume/deno<<'('<<nume%deno<<'/'<<deno<<')'<<endl; }
if(style==3)
{
cout<<(1.0*nume)/deno<<endl;}*/
}
void CFraction::set(int nu,int de)
{
nume=nu;
deno=de;
}
void CFraction::input()
{
char a;
cout<<"请输入分子/分母:";
while(1)
{
cin>>nume>>a>>deno;
if(a!='/')
cout<<"格式不正确,请重新输入"<<endl;
else if (deno==0) //这步写漏了
cout<<"分母不能为零!\n ";
else
break;
}
}
void CFraction::simplify()
{
int n=gys(nume,deno);
nume/=n;
deno/=n;
}
void CFraction::amplify(int n)
{
nume*=n;
}
int CFraction::gys(int nu,int de)
{
int k,i;
k=nume<deno?nume:deno;
for(i=k;i>0;i--)
{
if(nume%i==0&&deno%i==0)
break;
}
return i;
}
int main()
{
CFraction c;
c.input();
c.output();
c.output(1);
c.output(2);
c.output(3);
return 0;
}
心得:代码写多了才有不一样的体会。