分数类

/*    

*程序的版权和版本声明部分          

* Copyright (c)2013, 烟台大学计算机学院学        

* All rightsreserved.         

* 文件名称:CFraction.cpp       

* 作    者:  田凤        

*完成日期:2013年4月7日      

* 版本号: v1.0                 

* 输入描述: 输入分数 

* 问题描述:化简,求近似值

* 输出:输出各种形式的分数值

*代码:

#include<iostream>
#include <Cmath>   
using namespace std; 
int m=1; 
class CFraction
{
private:
 int nume;//分子
 int deno;//分母
public:
 CFraction(int nu=0,int de=1); //构造函数,初始化用
 void set(int nu=0,int de=1); //置值,改变值时用
 bool 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;
};
CFraction::CFraction(int nu,int de)//构造函数,初始化用
{
 if (de!=0)
  {
   deno=de;
   nume=nu;
  }else{
   cout<<"格式不正确!"<<endl;
  }
 }
bool CFraction::input()//按照"nu/de"的格式,如"5/2"的形式输入
{
 int nu,de;
 char c;
 cout<<"请按照此格式进行输入(2/5):"<<endl;
 cin>>nu>>c>>de;
 if(c!='/')
 {
  cout<<"输入格式错误!"<<endl;
  return false;
 }else{
 if(de==0)
 {
  cout<<"分母不能为零!"<<endl;
  return false;
 }else if (nu == 0){
  cout << "0" << endl;
  return false;
 }else{  
        nume=nu;  
        deno=de;  
    }  
 }
 return true;
}
void CFraction::simplify()//化简
{
 int min=deno;  
    if(deno>nume)
 {  
        min=nume;  
    }  
    while(1)  
    {  
        if(deno%min==0&&nume%min==0)  
        {  
            m=min;  
            break;  
  }else  
        {  
            min--;  
        }  
    }  
}
void CFraction::amplify(int n)//放大n倍,如2/3放大5倍为10/3;
{
 nume*=n;
}
void CFraction::output(int style)//输出:以8/6为例,style为0时,原样输出8/6;
{ 
    switch(style)  
    {  
    case 0:  
        cout<<"原样输出为:" <<nume<<'/'<<deno<<endl;   
        break;  
    case 1:
        simplify();
        cout<<"化简形式: "<<nume/m<<'/'<<deno/m<<endl; //输出化简形式,并不是要化简   
        break;  
    case 2:
  simplify();
        cout<<"带分数形式为:" <<(nume/m)/(deno/m)<<"("<<(nume/m)-(deno/m)*((nume/m)/(deno/m))<<"/"<<deno/m<<")"<<endl;
  break;  
    case 3:  
        cout<<"近似值为:" <<nume/double(deno)<<endl;   
        break;  
    default:  
        cout<<"默认输出为:" <<nume<<'/'<<deno<<endl;      
    }  
}
int main()
{ 
    CFraction s(8,6);  
    cout<<"您的分数测试为:"<<endl;  
    s.output(0);  
    s.output(1);  
    s.output(2);  
    s.output(3);  
    cout<<"输入分数: "<<endl;  
    bool is = s.input();  
 if (is)
 {
  s.output(0);  
  s.output(1);  
  s.output(2);  
  s.output(3);  
 }
    return 0;  
}

*运行结果:

                          

*心得体会:好晕啊~~感觉有错误!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值