c++第五次实验-分数类

来源:互联网 发布:网络医生兼职 编辑:程序博客网 时间:2024/06/14 09:00

一、问题及代码

/* 文件名称:项目.cpp    * 作    者:严明远    * 完成日期:2017 年 5 月 26 日    * 版 本 号:v1.0    * 对任务及求解方法的描述部分:    * 输入描述:无    * 问题描述: 五、分数类    C++中提供了多种基本的数据类型。实际上,这些远不能满足我们的需求,如分数。我们可以自定义类支持这些数据类型。  本任务将设计一个简单的分数类,完成对分数的几个运算。一则巩固基于对象编程的方法,二则也为运算符重载等积累些感性认识。  分数类的声明为:  项目要求:完成分数类的设计,并在main()函数中自行定义对象,调用各成员函数,完成基本的测试。 实践策略:(1)不建议一次实现所有成员函数后再调试,而是实现一个,测试一个;(2)本项目的实现及测试顺序可以是:先构造函数和输出output函数(可以先只实现一种输出方式),再set函数,再input函数,等等* 算法设计:略    */ #include<iostream>using namespace std;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);void display0();//输出:以8/6为例,style为0时,原样输出8/6;      void display1();            //style为1时,输出化简后形式4/3;      void display2();            //style为2时,输出1(1/3)形式,表示一又三分之一;      void display3();            //style为3时,用小数形式输出,如1.3333;                                  //默认方式0  }; void CFraction::display0(){cout<<nume<<'/'<<deno<<endl;}void CFraction::display1(){simplify();}void CFraction::display2(){int m,n;if(nume>deno){m=nume/deno;n=nume%deno;cout<<m<<"("<<n<<"/"<<deno<<")"<<endl;}}void CFraction::display3(){float sun;sun=(float)nume/deno;cout<<sun<<endl;}CFraction::CFraction(int nu,int de){nume=nu;deno=de;}void CFraction::set(int nu,int de){nume=nu;deno=de;}void CFraction::input(){char h;while(1){cout<<"按照\"nu/de\"的格式输入"<<endl;cin>>nume>>h>>deno;if(h!='/'){cout<<"输入格式错误,请重新输入!"<<endl;continue;}else if(deno==0){cout<<"deno"<<"不能为0"<<endl;continue;}else break;}}void CFraction::simplify(){int num=1;int min,max;if(nume>deno){max=nume;min=deno;}else{max=deno;min=nume;}for(int i=2;i<=min;i++){if((deno%i==0)&&(nume%i==0)){num*=i;deno/=i;nume/=i;i--;continue;}}cout<<"最大公约数是:"<<num<<endl;cout<<"约分之后:"<<nume<<'/'<<deno<<endl;}void CFraction::amplify(int n){cout<<"放大"<<n<<"倍:";cout<<(nume=(nume*n))<<"/"<<deno<<endl;}void CFraction::output(int style){switch(style){case 0:display0();break;case 1:display1();break;case 2:display2();break;case 3:display3();break;}}int main(){CFraction t(7,3);t.input();                   t.simplify();              t.amplify(5);            t.output(0);t.output(1);t.output(2);t.output(3);return 0;}

二、运行结果




原创粉丝点击