分数类的雏形

来源:互联网 发布:飞机晚点查询软件 编辑:程序博客网 时间:2024/06/05 01:56
/*
 Copyright(c)2016,烟台大学计算机与控制工程学院
 All rights reserced
 文件名称:test.cpp
 作    者:高玉杰
 完成日期:2016年5月25日
 版 本 号:v1.0
 问题描述:编写基于对象的程序,对分数进行一些简单的操作
 输入描述:输入一个分数
 程序输出:

*/

#include<iostream>#include<Cmath>#include<cstdlib>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);};CFraction::CFraction(int nu,int de){    if (de!=0)    {        nume=nu;        deno=de;    }    else    {        cerr<<"初始化中发生错误,程序退出\n";    }}void CFraction::set(int nu,int de){    if (de!=0)    {        nume=nu;        deno=de;    }}void CFraction::input() //按照"nu/de"的格式,如"5/2"的形式输入{    int nu,de;    char c;    while(1)    {        cout<<"输入分数(nu/de): ";        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;}// 求m,n的最大公约数int gcd(int m, int n){    int r;    if (m==0)    {        return n;    }    while(r=m%n)  // 求m,n的最大公约数    {        m=n;        n=r;    }    return n;}void CFraction::amplify(int n)  //放大n倍,如2/3放大5倍为10/3{    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,c2(8,6);    cout<<"关于c1: "<<endl;    c1.output(0);    cout<<"改变c1: "<<endl;   //测试set函数    c1.set(2,7);    c1.output();    cout<<"输入c1: "<<endl;//测试input函数    c1.input();    c1.output(0);    cout<<"关于c2: "<<endl;//测试output函数    c2.output(0);    c2.output(1);    c2.output(2);    c2.output(3);    c2.output();    cout<<"将c2化简: "<<endl;//测试simplify函数    c2.simplify();    c2.output(0);    cout<<"将c2放大倍: "<<endl;//测试amplify函数    c2.amplify(5);    c2.output(0);    c2.output(1);    return 0;}

感想:

       自己在做的时候,有很多东西感觉自己会,但就是写不出来,得参考老师的答案做出来。

0 0
原创粉丝点击