第五周项目二

来源:互联网 发布:狸窝转换器 mac 编辑:程序博客网 时间:2024/04/29 22:28
/*     * 程序的版权和版本声明部分     * Copyright (c)2012, 烟台大学计算机学院学生     * All rightsreserved.     * 文件名称:cf.cpp     * 作者:王立强  * 完成日期: 2013年4月3 日     * 版本号: v1.0     * 输入描述:略    * 问题描述:略     * 程序输出:略    */          #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();               //按照"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";          system("pause");          exit(0);      }  }    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<<"输入分数(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;  }    // 求m,n的最大公约数  int gcd(int m, int n) //这个函数可以定义为类的成员函数,也可以为一般函数  {      int r;      if (m<n){r=m;m=n;n=r;}      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;  }  //输出分数:以/6为例  //style为0时,原样输出8/6;  //style为1时,输出化简后形式4/3;  //style为2时,输出1(1/3)形式,表示一又三分之一;  //style为3时,用小数形式输出,如1.3333;  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;  }