任务三

/*
* 程序的版权和版本声明部分
* Copyright (c)2013, 烟台大学计算机学院学生
* All rightsreserved.
* 文件名称:score.cpp                           
* 作    者:   刘元龙                         
* 完成日期: 2013 年4 月  3 日
* 版本号: v1.0      
* 输入描述:
* 问题描述:
* 输出:
*/
#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);		//输出:以8/6为例,style为0时,原样输出8/6;
								//style为1时,输出化简后形式4/3;
								//style为3时,用小数形式输出,如1.3333;
								//不给出参数和非1、2,认为是方式0
};


CFraction::CFraction(int nu,int de)
{
    nume=nu;
	deno=de;
}
void CFraction::set(int nu,int de)
{
    if(de!=0)
    {
	nume=nu;
	deno=de;
	
	}

}
void CFraction::input()
{
  int x,y;
  char z;
  cout<<"请输入分数:"<<endl;
  cin>>x>>z>>y;
  if(z!='/')
	  cout<<"您输入的分数格式不对:"<<endl;
  else if(deno==0)	  
  {
	  cout<<"分数的分母不能为0:";
  }
     nume=x;
	 deno=y;
}

void CFraction::simplify()//化简
{    
    int i,j;  
    if(nume>deno)  
    {  
        j=deno;  
        deno=nume;  
        nume=j;  
    }  
    for(i=deno;i>0;--i)  
        if(deno%i==0&&nume%i==0)  
           deno/=i;
		   nume/=i;
}
void CFraction::amplify(int n)
{
   deno*=n;
   nume*=n;
}
//输出:以8/6为例,style为0时,原样输出8/6;
	//style为1时,输出化简后形式4/3;
		//style为2时,输出1(1/3)形式,表示一又三分之一;
	    //style为3时,用小数形式输出,如1.3333;
		//不给出参数和非1、2,认为是方式0
void CFraction::output(int style)
{
  switch(style)
  {
  case 0:
	  cout<<"分数原样为:"<<"    "<<nume<<'/'<<deno;
	  break;
  case 1:
      simplify();
	  cout<<"化简后的分数为:"<<"   "<<nume<<'/'<<deno;
	  break;
  case 2:
	  cout<<"真分数为:"<<"   "<<(nume%deno)<<(nume/deno)<<deno;
	  break;
  case 3:
	  cout<<"小数为:"<<"   "<<double(nume)/double(deno);
	  break;
  default :
	  cout<<"默认为原样:"<<nume<<'/'<<deno;
	  break;
  }
}
int main()
{
  CFraction c1,c2(12,16);

  cout<<"输出c1";
  c1.output(0);
  cout<<endl;
  cout<<"输出c2";
  c2.output(0);
  cout<<endl;
  c2.output(1);
  cout<<endl;
  c2.output(2);
  cout<<endl;
  c2.output(3);
  cout<<endl;
  return 0;
}		

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值