项目18--分数类的雏形

来源:互联网 发布:工程进度表制作软件 编辑:程序博客网 时间:2024/06/03 21:51
#include <iostream>using namespace std;int gcd(int m,int n);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();               //按照"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)形式,表示一又三分之一;                            //style为3时,用小数形式输出,如1.3333;                            //默认方式0};CFraction::CFraction(int nu,int de){    if(de!=0)    {        nume=nu;        deno=de;    }}void CFraction::set(int nu,int de){    nume=nu;    deno=de;}void CFraction::input(){    int nu,de;    char c;    cout<<"请输入分数,格式:分子/分母"<<endl;    cin>>nu>>c>>de;    if(c!='/')        cout<<"格式错误!";    else if(de==0)        cout<<"分母不能为0";    nume=nu;    deno=de;}void CFraction::simplify(){    int gMax;    gMax=gcd(deno,nume);    deno/=gMax;    nume/=gMax;}int gcd(int m,int n){    int i;    if(m==0)        return n;    while(i=m%n)    {        m=n;        n=i;    }    return n;}void CFraction::amplify(int n){    nume*=n;}void CFraction::output(int style){    int n=gcd(nume,deno);    switch(style)    {    case 0:        cout<<"原样:" <<nume<<'/'<<deno<<endl;        break;    case 1:        cout<<"化简形式: "<<nume/n<<'/'<<deno/n<<endl;        break;    case 2:        cout<<"带分数形式:" <<nume/deno<<'('<<(nume/n)%(deno/n)<<'/'<<deno/n<<')'<<endl;        break;    case 3:        cout<<"近似值:" <<nume/double(deno)<<endl;        break;    default:        cout<<"放大形式:" <<nume<<'/'<<deno<<endl;    }}int main(){    CFraction c1;    c1.set(10,6);    c1.output(0);    c1.output(1);    c1.output(2);    c1.output(3);    c1.amplify(2);    c1.output(6);    return 0;}

运行结果:


0 0