您的位置:首页 > 其它

补做- 第五次实验-项目五

2017-05-08 13:16 190 查看
4000

一、问题及代码

[cpp] view
plain copy

/* 

* 文件名称:Exbz5-5.cpp 

* 作    者:程家琦 

* 完成日期:2017 年 5 月 8 日 

* 版 本 号:v1.0 

* 对任务及求解方法的描述部分: 

* 输入描述:

* 问题描述:C++中提供了多种基本的数据类型。实际上,这些远不能满足我们的需求,如分数。我们可以自定义类支持这些数据类型。 

  本任务将设计一个简单的分数类,完成对分数的几个运算 

* 程序输出:略 

* 问题分析:略 

* 算法设计:略 

*/  

#include<iostream>    

#include<Cmath>    

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();  

    void simplify();  

    void amplify(int n);  

    void output(int style = 0);  

};  

CFraction::CFraction(int nu, int de)  

{  

    if (de != 0)  

    {  

        nume = nu;  

        deno = de;  

    }  

    else  

    {  

        cerr << "初始化中发生错误,程序退出\n";  

        system("pause");  

        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;  

}  

int gcd(int m, int n)  

{  

    int r;  

    if (m<n) { r = m; m = n; n = r; }  

    while (r = m%n)  

    {  

        m = n;  

        n = r;  

    }  

    return n;  

}  

void CFraction::amplify(int n)  

{  

    nume *= n;  

}  

void CFraction::output(int style)  

{  

    int n;  

    switch (style)  

    {  

    case 0:  

        cout << "原样:" << nume << '/' << deno << endl;break;  

    case 1:  

        n = gcd(deno, nume);  

        cout << "化简形式: " << nume / n << '/' << deno / n << endl;break;  

    case 2:  

        cout << "带分数形式:" << nume / deno << '(' << nume%deno << '/' << deno << ')' << endl;break;  

    case 3:  

        cout << "近似值:" << nume / double(deno) << endl;break;  

    default:  

        cout << "默认原样:" << nume << '/' << deno << endl;  

    }  

}  

int main()  

{  

    CFraction c1, c2(8, 6);  

    cout << "关于c1: " << endl;  

    c1.output(0);  

    cout << "改变c1: " << endl;  

    c1.set(2, 7);  

    c1.output();  

    cout << "输入c1: " << endl;  

    c1.input();  

    c1.output(0);  

    cout << "关于c2: " << endl;  

    c2.output(0);  

    c2.output(1);  

    c2.output(3);  

    c2.output(3);  

    c2.output();  

    cout << "将c2化简: " << endl;  

    c2.simplify();  

    c2.output(0);  

    cout << "将c2放大倍: " << endl;  

    c2.amplify(5);  

    c2.output(0);  

    c2.output(1);  

    system("pause");  

    return 0;  

}  

二、运行结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: