第六周项目1-分数类雏形(改进)

来源:互联网 发布:数据挖掘常用方法 编辑:程序博客网 时间:2024/06/05 08:26

问题及代码:

/* *Copyright(c)2016,烟台大学计算机与控制工程学院 *All right reserved. *文件名称:77.cpp *作    者:董凯琦 *完成日期:2016年4月5日 *版 本 号:v1.0 * *问题描述:设计一个简单的分数类,完成对分数的几个运算
 *输入描述:无 *程序输出: */#include<iostream>#include<Cmath>#include<Cstdlib>using namespace std;class CFraction{private:    int nume;  // 分子    int deno;  // 分母public:    CFraction(int nu=0,int de=1);   //构造函数,初始化用    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 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    int gcd(int m,int n); // 求m,n的最大公约数};CFraction::CFraction(int nu,int de){    if (de!=0)    {        nume=nu;        deno=de;    }    else    {        cout<<"初始化中发生错误,程序退出\n";        exit(0);    }}void CFraction::set(int nu,int de){    if (de!=0)    {        nume=nu;        deno=de;    }}void CFraction::input(){    int nu,de;    char c;    while(1)    {        cout<<"输入分数(m/n): ";        cin>>nu>>c>>de;        if(c!='/')            cout<<"输入格式错误!\n ";        else if (de==0)            cout<<"分母不能为零!\n ";        else            break;    }    nume=nu;    deno=de;}void CFraction::simplify(){    int n=gcd(deno,nume);    deno/=n;    nume/=n;}void CFraction::amplify(int n){     nume*=n;}int CFraction::gcd(int m, int n){    int r;    if (m==0)    {        return n;    }    while(r=m%n)    {        m=n;        n=r;    }    return n;}void CFraction::output(int style){    //输出:以8/6为例,style为0时,原样输出8/6;                            //style为1时,输出化简后形式4/3;                            //style为2时,输出1(1/3)形式,表示一又三分之一;                            //style为3时,用小数形式输出,如1.3333;                            //默认方式0    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,c2(8,6);    cout<<"About c1:"<<endl;    c1.input();    c1.output(0);    c1.output(1);    c1.output(2);    c1.output(3);    cout<<"改变c1: "<<endl;    c1.set(2,7);    c1.output(0);    cout<<"将c1化简: "<<endl;    c1.simplify();    c1.output(0);    cout<<"将c1放大倍: "<<endl;    c1.amplify(5);    c1.output(1);    cout<<"About c2:"<<endl;    c2.output(0);    c2.output(1);    c2.output(2);    c2.output(3);    cout<<"改变c2: "<<endl;    c2.input();    c2.output(0);    cout<<"将c2化简: "<<endl;    c2.simplify();    c2.output(0);    cout<<"将c2放大倍: "<<endl;    c2.amplify(5);    c2.output(1);    return 0;}


运行结果:

知识点总结:

从这个程序中我们进一步了解到了成员函数的实现。

学习心得:

稳而不燥,冷静分析。

0 0