第三周项目2——分数类的雏形

来源:互联网 发布:java多线程实现方法 编辑:程序博客网 时间:2024/05/03 22:48

问题及代码:

/* *Copyright (c)2015,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:data.cpp *作    者:赵敏 *完成日期:2015年4月1日 *版 本 号:v1.0 * *问题描述:C++中提供了多种基本的数据类型。实际上,这些远不能满足我们的需求,如复数(第10章的例子大多是处理复数),再如分数。我们可以自定义类支持这些数据类型。  本任务将设计一个简单的分数类,完成对分数的几个运算。一则巩固基于对象编程的方法,二则也为运算符重载等积累些感性认识。*/#include <iostream>#include <cmath>#include <cstdio>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    int gcd(int,int);    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;    }}void CFraction::set(int nu,int de){    if(de!=0)    {        nume=nu;        deno=de;    }}void CFraction::input(){    char c;    while(1)    {        cout<<"输入分数:";        cin>>nume>>c>>deno;        if(c!='/')            cout<<"输入格式错误!"<<endl;        if(deno==0)            cout<<"输入错误!"<<endl;    }}void CFraction::simplify(){    int a=gcd(nume,deno);    nume=nume/a;    deno=deno/a;}int CFraction::gcd(int m, int n){    int r;    do    {        r=m%n;        m=n;        n=r;    }while(r!=0);    return m;}void CFraction::amplify(int n){    nume=nume*n;}void CFraction::output(int style){    int b;    switch(style)    {    case 0:        cout<<"分数:"<<nume<<'/'<<deno<<endl;    case 1 :        b=gcd(nume,deno);        cout<<"化简后:"<<nume/b<<'/'<<deno/b<<endl;        case 2:          cout<<"化简:"<<nume/deno<<'('<<nume%deno<<'/'<<deno<<')'<<endl;        case  3:          cout<<"小数:"<<nume/double(deno) <<endl;          break;        default:            cout<<"原样:" <<nume<<'/'<<deno<<endl;    }}int main(){  CFraction d1,d2(5,6);  d1.output();  cout <<"d2的数值:";  d2.output();  cout<<"将d2加倍:";  d2.amplify(3);  d2.output();  return 0;}


运行结果:

学习心得:

      main函数定义错了,导致输出不正确。

 

0 0