第五週實驗報告(二)分數化簡

/* (程序頭部註釋開始)
* 程序的版權和版本聲明部分
* Copyright (c) 2011, 煙臺大學計算機學院學生 
* All rights reserved.
* 文件名稱:                              
* 作    者:  晁陽                            
* 完成日期:  2012       年   03   月   20 日
* 版 本 號:t 1.0         

#include < iostream>

using namespace std;

class CFraction
{private:
	int nume;  // 分子
	int deno;// 分母
	//int i;
 public:
	 CFraction(int nu=0,int de=1):deno(de),nume(nu){};   //構造函數,初始化用
	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爲2時,輸出1(1/3),表示一又三分之一;
							//不給出參數和非1、2,認爲是方式0
};

void CFraction::input()				//按照"nu/de"的格式,如"5/2"的形式輸入
{
	char c1;
	cout <<"請輸入一個分數(格式nu/de):";
	while(1)
	{
		cin >> nume >> c1 >> deno;
		if ( c1 !='/' )
		{
			cout << "輸入格式不正確,請重新輸入!";
		}
		else
			break;
	}
}

void CFraction::Simplify()		//化簡(使分子分母沒有公因子)
{  int i; 
	if( deno < nume )
		i = deno;
	else
		i = nume;
	for( ; i > 0; --i)//大於0啊,早晚讓它折磨死!!!!!!!!
	{
		if ( nume % i == 0 && deno % i == 0 )
		{
			nume = nume/i;
			deno = deno/i;
			break;
		}
	}
}

void CFraction::amplify(int n)			//放大n倍,如2/3放大5倍爲10/3
{
	nume = nume * n;
}

void CFraction::output(int style)	//輸出:以8/6爲例,style爲0時,輸出8/6;
{  
	switch ( style )
	{
case 0://不給出參數和非1、2,認爲是方式0
    cout<<nume<<"/"<<deno<<endl;break;
	
case 1://style爲1時,輸出4/3;
		Simplify();
		cout<<nume<< "/" << deno <<endl;break;
		
case 2://style爲2時,輸出1(1/3),表示一又三分之一;
			cout<<nume/deno<< "(" << nume%deno<<"/"<<deno<<")"<<endl;break;
	}
			
}

void main()
{
	CFraction CF;
	CF.input();
	CF.output(); 
	CF.amplify(2);
	CF.Simplify();
    CF.output();
	CF.output(1);
	CF.output(2);
	system("PAUSE");
}



                                       
							            
							            
							            

發佈了55 篇原創文章 · 獲贊 4 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章