/*
*Copyright (c)2016,烟台大学计算机与控制工程学院
*All rights reserved.
*文件名称:main.cpp
*作 者:郭永恒
*完成日期:2016年4月1日
*版 本 号:v1.0
*
*问题描述:编写一个分数类的雏形
*/
#include <iostream>
using namespace std;
class CFraction
{
private:
int nume;//分子
int deno;//分母
int simplify_nume;//化简后的分子
int simplify_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);//扩大n倍
//style = 0,原样输出;style = 1,输出化简后的形式;style = 2,输出带分数形式;style = 3,输出小数。
void output(int style = 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()
{
char temp;
cin >> nume >> temp >> deno;
}
void CFraction::simplify()
{
int temp;
int nu = nume;
int de = deno;
while(nu%de)
{
temp = nu%de;
nu = de;
de = temp;
}
simplify_nume = nume/de;
simplify_deno = deno/de;
}
void CFraction::amplify(int n)
{
deno *= n;
nume *= n;
}
void CFraction::output(int style)
{
if(style == 0)
cout << nume << "/" << deno << endl;
else if(style == 1)
cout << simplify_nume << "/" << simplify_deno << endl;
else if(style == 2)
if((float)nume/(float)deno < 1.0)
cout << nume << "/" << deno << endl;
else if((float)nume/(float)deno == 1.0)
cout << nume/deno << endl;
else
cout << nume/deno << "(" << nume%deno << "/" << deno << ")" << endl;
else
cout << nume/deno << endl;
}
int main()
{
CFraction demo(8,6);//初始化
demo.simplify();//化简
demo.output(0);
demo.output(1);
demo.output(2);
demo.output(3);
demo.amplify(2);//扩大n倍
demo.output(0);
demo.set(5,2);//置值
demo.output(0);
demo.input();//输入
demo.output(0);
return 0;
}
运行结果: