/*
*文件名称:2017.cpp
*作者:宋永智
*完成时间:2017年5月8日
*版本号:1.0
*任务求解描述部分:
*输入描述:略
*问题描述:略
*程序输出:略
*问题分析:略
*算法分析:略
*/#include <iostream>
using namespace std;
class CFraction
{private:
int nume; // 分子
int deno; // 分母
public:
CFraction(int nu=0,int de=1);
void Set(int nu=0,int de=1);
void input();
void Simplify();
void amplify(int n);
void output(int style=0);
};
int main ()
{
CFraction CF;
int style,x;
CF.input();
cout<<"请输入要放大的倍数:"<<endl;
cin>>x;
CF.amplify(x);
cout<<"选择输出形式(以8/6为例,style为0时,输出8/6;style为1时,输出4/3;style为2时,输出1(1/3),表示一又三分之一;不给出参数和非1、2,认为是方式0)"<<endl;
cin>>style;
CF.output(style);
CF.Set();
return 0;
}
CFraction::CFraction(int nu,int de)
{
nume=nu;
deno=de;
}
void CFraction::Set(int nu,int de)
{
nume=nu;
deno=de;
}
void CFraction:: input()
{
int x,y;
char ch1;
while(1)
{
cout<<"请输入分数(格式为 */*):"<<endl;
cin>>x>>ch1>>y;
if (ch1!='/')
cout<<"输入错误,请重新输入"<<endl;
else
break;
}
nume=x;
deno=y;
}
void CFraction::Simplify()
{
int m,n;
n=nume,m=deno;
for(int i=2;n>=i;i++)
{
if(n%i==0 && m%i==0)
{
n/=i;
m/=i;
i--;
}
}
cout<<n<<"/"<<m<<endl;
}
void CFraction::amplify(int x)
{
int m,n;
n=nume,m=deno;
for(int i=2;n>=i;i++)
{
if(n%i==0 && m%i==0)
{
n/=i;
m/=i;
i--;
}
}
n=n*x;
cout<<n<<"/"<<m<<endl;
}
void CFraction::output(int style)
{
int n,m,x;
n=nume,m=deno;
switch(style)
{
case 1:
{
for(int i=2;n>=i;i++)
{
if(n%i==0 && m%i==0)
{
n/=i;
m/=i;
i--;
}
}cout<<n<<"/"<<m<<endl;
};break;
case 2:
{
cout<<"约分后结果为:";
for(int i=2;n>=i;i++)
{
if(n%i==0 && m%i==0)
{
n/=i;
m/=i;
i--;
}
};
if(n<=m)
{
cout<<n<<"/"<<m<<endl;
}
else if (n%m==0)
{
x=n/m;
n=n%m;
cout<<x<<endl;
}
else
{
x=n/m;
n=n%m;
cout<<x<<'('<<n<<'/'<<m<<')'<<endl;
}
};break;
default:cout<<n<<"/"<<m<<endl;break;
}
}
第二部分:运行结果
第四部分::知识点总结
略