第六周实践项目1————分数类的雏形

问题及代码:

/*copyright(c)2016.烟台大学计算机学院 
 * All rights reserved, 
 * 文件名称:text.Cpp 
 * 作者:吴敬超 
 * 完成日期:2016年3月27日 
 * 版本号:vc++6.0 
 * 
 * 问题描述:简单的分数类
 * 输入描述: 
 * 程序输出: 输出结果 
 */

#include<iostream>
#include<iomanip>
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();               //按照"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
    void simplar();
};
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 s;
    cin>>nume>>s>>deno;
}
void CFraction::output(int style)
{
    if(style==0)
    {
        cout<<nume<<"/"<<deno;
    }
    else if(style==1)
    {
        simplify();

    }
    else if(style==2)
    {
        simplar();
    }
    else if(style==3)
    {
        double x;
        x=(double)nume/(double)deno;
        cout<<setprecision(5)<<x<<endl;
    }
    else if(style==4)
    {
        int n;
        cin>>n;
        amplify(n);
    }
}
void CFraction::simplify()
{
    int m,n,r,a,b;
    m=nume;
    n=deno;
    if(nume<deno)
    {
        while(nume!=0)
        {
            r=deno%nume;
            deno=nume;
            nume=r;
        }
        a=m/nume;
        b=n/nume;
        cout<<a<<"/"<<b<<endl;
    }
    else if(nume>deno)
    {
        while(deno!=0)
        {
            r=nume%deno;
            nume=deno;
            deno=r;
        }
        a=m/nume;
        b=n/nume;
        cout<<a<<"/"<<b<<endl;
    }
}
void CFraction::amplify(int n)
{
    nume=nume*n;
    cout<<nume<<"/"<<deno<<endl;
}
void CFraction::simplar()
{
    int b,a;
    if(nume>deno)
    {
        b=nume/deno;
        a=nume-b*deno;
        int r,m,n,x,y;
        x=a;
        y=deno;
        while(deno!=0)
        {
            r=a%deno;
            a=deno;
            deno=r;
        }
        m=x/a;
        n=y/a;
        cout<<b<<"("<<m<<"/"<<n<<")"<<endl;
    }
    else if(nume<deno)
    {
        cout<<nume<<"/"<<deno<<endl;
    }
}
int main()
{
    CFraction fenshu(0,0);
    int style;
    fenshu.set();
    fenshu.input();
    cin>>style;
    fenshu.output(style);
    return 0;
}

运行结果:

第六周实践项目1————分数类的雏形_第1张图片

你可能感兴趣的:(第六周实践项目1————分数类的雏形)