`
txf2004
  • 浏览: 6820208 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

《第五周实验报告2-1》---设计一个简单的分数类,完成对分数的几个运算

 
阅读更多
/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生 
* All rights reserved.
* 文件名称:   CFraction.cpp        
* 作    者:    计114-3 王兴锋   
* 完成日期:     2012    年   3  月   19  日
* 版 本 号:     V 1.0

* 对任务及求解方法的描述部分
* 输入描述: 设计一个简单的分数类,完成对分数的几个运算
* 问题描述: 调用各成员函数,完成基本的测试
* 程序输出: 按程序要求输出
* 程序头部的注释结束
*/
#include <iostream>

using namespace std;

class CFraction
{
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为2时,输出1(1/3),表示一又三分之一;
									//不给出参数和非1、2,认为是方式0
	
private:
	int find_factor();//找出最大公约数
	int nume;  // 分子
	int deno;  // 分母
	int j_nume;
	int j_deno;
	char ch;
};

CFraction::CFraction(int nu, int de)//构造函数
{
	nume = nu;
	deno = de;
}
void CFraction::Set(int nu, int de)//设置值
{
	if (de == 0)
	{
		cout << "您的输入有误!" << endl;
		exit(0);
	}

	nume = nu;
	deno = de;	
}
void CFraction::input()//输入
{
	cout << "请输入分数(nu/de):" << endl;
	cin >> nume >> ch >> deno;

	if (deno == 0)
	{
		cout << "您的输入有误!" << endl;
		exit(0);
	}
}
void CFraction::Simplify()//化简
{
	int fac;

	fac = find_factor();
	
	j_nume = nume / fac;
	j_deno = deno / fac;
}
void CFraction::amplify(int n)//放大n倍
{
	nume = n * nume;
	j_nume = n * j_nume;

	cout << "分数已放大" << n << "倍。" << endl;
}
void CFraction::output(int style)//输出
{
	switch(style)
	{	
		case 1:
			cout << "以4/3的形式输出为:" << j_nume << "/" << j_deno << endl;
			break;
		case 2:
			if (! (j_nume%j_deno))
				cout << "以1(1/3)的形式输出为:" << j_nume/j_deno << endl;
			else
				cout << "以1(1/3)的形式输出为:" << j_nume/j_deno << "(" << j_nume % j_deno << "/" << j_deno << ")" << endl;
			break;

		default :
		case 0:
		cout << "以8/6的形式输出为:" << nume << "/" << deno << endl;
		break;
	}
}
int CFraction::find_factor()//找最大公约数
{
	int temp, max, min;
	if (deno > nume)
	{
		max = deno;
		min = nume;
	}
	else
	{
		max = nume;
		min = deno;
	}

	do{
		temp = min;
		min = max % min;
		max = temp;
	}while(min != 0);

	return max;
}


void main()
{
	CFraction cf;//定义一个分数对象(初值为:nu=0,de=1)

	cf.Set(72,36);
	cf.Simplify();
	cf.amplify(3);
	cf.output(0);
	cf.output(1);
	cf.output(2);
	
	cout << endl;
	cf.input();
	cf.Simplify();
	cf.output();
	cf.output(1);
	cf.output(2);
	cf.amplify(3);
	cf.Simplify();
	cf.output(10);
	cf.output(1);
	cf.output(2);

}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics