现在的位置: 首页 > 综合 > 正文

第五周实验报告(二)分数化简

2013年04月16日 ⁄ 综合 ⁄ 共 1431字 ⁄ 字号 评论关闭

/* (程序头部注释开始)
* 程序的版权和版本声明部分
* 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");
}



                                       
							            
							            
							            

抱歉!评论已关闭.