-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
#include <iostream>
using namespace std;
class CFraction
{
public:
CFraction(int nu=0,int de=1); //构造函数,初始化用
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
void output(int style=0); //输出:以8/6为例,style为0时,输出8/6;
//style为1时,输出4/3;
//style为2时,输出1(1/3),表示一又三分之一;
//不给出参数和非1、2,认为是方式0
private:
int find_factor();//找出最大公约数
int nume; // 分子
int deno; // 分母
int j_nume;
int j_deno;
char ch;
};
CFraction::CFraction(int nu, int de)//构造函数
{
nume = nu;
deno = de;
}
void CFraction::Set(int nu, int de)//设置值
{
if (de == 0)
{
cout << "您的输入有误!" << endl;
exit(0);
}
nume = nu;
deno = de;
}
void CFraction::input()//输入
{
cout << "请输入分数(nu/de):" << endl;
cin >> nume >> ch >> deno;
if (deno == 0)
{
cout << "您的输入有误!" << endl;
exit(0);
}
}
void CFraction::Simplify()//化简
{
int fac;
fac = find_factor();
j_nume = nume / fac;
j_deno = deno / fac;
}
void CFraction::amplify(int n)//放大n倍
{
nume = n * nume;
j_nume = n * j_nume;
cout << "分数已放大" << n << "倍。" << endl;
}
void CFraction::output(int style)//输出
{
switch(style)
{
case 1:
cout << "以4/3的形式输出为:" << j_nume << "/" << j_deno << endl;
break;
case 2:
if (! (j_nume%j_deno))
cout << "以1(1/3)的形式输出为:" << j_nume/j_deno << endl;
else
cout << "以1(1/3)的形式输出为:" << j_nume/j_deno << "(" << j_nume % j_deno << "/" << j_deno << ")" << endl;
break;
default :
case 0:
cout << "以8/6的形式输出为:" << nume << "/" << deno << endl;
break;
}
}
int CFraction::find_factor()//找最大公约数
{
int temp, max, min;
if (deno > nume)
{
max = deno;
min = nume;
}
else
{
max = nume;
min = deno;
}
do{
temp = min;
min = max % min;
max = temp;
}while(min != 0);
return max;
}
void main()
{
CFraction cf;//定义一个分数对象(初值为:nu=0,de=1)
cf.Set(72,36);
cf.Simplify();
cf.amplify(3);
cf.output(0);
cf.output(1);
cf.output(2);
cout << endl;
cf.input();
cf.Simplify();
cf.output();
cf.output(1);
cf.output(2);
cf.amplify(3);
cf.Simplify();
cf.output(10);
cf.output(1);
cf.output(2);
}