第八週實驗報告(任務3)

程序頭部註釋開始
* 程序的版權和版本聲明部分
* Copyright (c) 2011, 煙臺大學計算機學院學生
* All rights reserved.
* 文件名稱: 分數的四則運算    
* 作    者:     郭廣建                       
* 完成日期:  2012年    04  月   10    日
* 版 本 號:  1.0

源程序:

#include <iostream>   
  
using namespace std;  
  
class CFraction  
{  
private:  
    int nume;  // 分子 
  
    int deno;  // 分母 
  
 public: 

	 CFraction(int nu = 0, int de = 1);   //構造函數,初始化用

	 CFraction operator+(CFraction &c2);       //運算符的重載

	 CFraction operator-(CFraction &c2);

	 CFraction operator*(CFraction &c2);

	 CFraction operator/(CFraction &c2);

	 void Simplify();                             //化簡

	 void Output();
};
int gcd(int de1,int de2);           //求最大公約數

CFraction::CFraction(int nu , int de)
{
	if(de != 0)
	{
		nume = nu;

		deno = de;
	}
	else
	{
		cout << "輸入錯誤!" <<endl;

		exit(0);
	}
}
CFraction CFraction::operator+(CFraction &c2)
{
	CFraction c;

	int Max_r = gcd(deno, c2.deno);

	c.deno = (deno / Max_r) * (c2.deno / Max_r);

	c.nume = (nume * (c.deno / deno)) + (c2.nume * (c.deno / c2.deno));

	return c;
}

CFraction CFraction::operator-(CFraction &c2)
{
	CFraction c;

	int Max_r = gcd(deno, c2.deno);

	c.deno = (deno / Max_r) * (c2.deno / Max_r);

	c.nume = (nume * (c.deno / deno)) - (c2.nume * (c.deno / c2.deno));

	return c;
}



CFraction CFraction::operator*(CFraction &c2)
{
	return CFraction(nume * c2.nume , deno * c2.deno);
}

CFraction CFraction::operator/(CFraction &c2)
{
	return CFraction(nume * c2.deno , deno * c2.nume);
}

void CFraction::Simplify() 
{
	int m, n, r;

	m = abs(nume);

	n = abs(deno);

	r = gcd(m, n);

	deno /= r;

	nume /= r;

	if(deno < 0)
	{
		deno = -deno;

		nume = -nume;
	}
}

void CFraction::Output()  
{
	cout << nume << '/' << deno <<endl;
}

void main()
{

	CFraction c1(3,5), c2(2,8),c3;

	cout << "c1 =  " ;

	c1.Output();

	cout << "c2 = " ;

	c2.Output();

	c2.Simplify();

	cout << "c2化簡得:";

	c2.Output();


	c3 = c1 + c2;

	cout << "c1 + c2 = " ;

	c3.Output();

	c3 = c1 - c2;

	cout << "c1 - c2 = " ;

	c3.Output();

	c3 = c1 * c2;

	cout << "c1 * c2 = " ;

	c3.Output();

	c3 = c1 / c2;

	cout << "c1 / c2 = " ;

	c3.Output();


	system("pause");
}





int gcd(int de1,int de2)
{
	int r;

	if(de1 < de2)
	{
		r = de1; de1 = de2; de2 = r;
	}

	while(r = de1 % de2)
	{
		de1 = de2;

		de2 = r;
	}

	return de2;
}


運行結果:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章