第六周项目一-分数类的雏形

来源:互联网 发布:windows phone刷机特点 编辑:程序博客网 时间:2024/06/07 00:54

问题及代码:

/**烟台大学计算机学院*文件名称:xiangmu1.cpp*作    者:闫安*完成日期:2016年4月15日*版 本 号:codeblocks 16.01**问题描述:设计一个简单的分数类,完成对分数的几种运算。*程序输出:*程序输入:*/#include<iostream>#include<Cmath>#include<cstdlib>using namespace std;int fac(int b,int a);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;    }    else    {        cerr<<"初始化中发生错误,程序退出\n";        exit(0);    }}void CFraction::set(int nu,int de){    if (de!=0)    {        nume=nu;        deno=de;    }}void CFraction::simplify(){    int y;    y=fac(nume,deno);    if(y!=0)    {        nume=nume/y;        deno=deno/y;    }}void CFraction::amplify(int n){    nume=n*nume;}void CFraction::input(){    char c;    cout<<"请输入分数,形如m/n:";    cin>>nume>>c>>deno;}void CFraction::output(int style){    char c='/';    switch(style)    {    case 0:        cout<<"原样:"<<nume<<c<<deno<<endl;        break;    case 1:        int b;        b=fac(nume,deno);        cout<<"化简后:"<<(nume/b)<<c<<(deno/b)<<endl;        break;    case 2:        int a,d,nu;        a=nume/deno;        nu=nume%deno;        d=fac(nume,deno);        cout<<"带分数形式:"<<a<<"("<<nu/d<<c<<deno/d<<")"<<endl;        break;    case 3:        float shang;        shang=1.0*nume/deno;        cout<<"近似值:"<<shang<<endl;    default:        cout<<"默认原样:" <<nume<<c<<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;}int fac(int b,int a){if(b%a==0)return a;    elsereturn fac(a,b%a);}

运行结果:

知识点总结:

       巩固基于对象编程的方法

学习心得:

       开始时,在定义CFraction(int nu,int de)时,错写成了CFraction(int nu=0,int de=1)  导致程序出现错误

0 0
原创粉丝点击