关闭

《第五周任务二》设计分数类,完成对分数的运算

276人阅读 评论(0) 收藏 举报
 实验报告模板1. 本学期的报告均发到csdn博客。周一上机,周四前要完成本周上机任务并发布博文。

2. 本学期起程序头部的注释请自行加入,从本学期起不再统一给出。这是一个程序员良好习惯中的一部分,养成这个习惯。这也是展示个人专业品质的一个重要途径。另外,在程序中需要的地方,也请加注释。下面是我们一直在用的注释模板。

(程序头部注释开始)

* 程序的版权和版本声明部分

* Copyright (c) 2011, 烟台大学计算机学院学生

* All rights reserved.* 文件名称:

* 作 者: 张斌

* 完成日期:2012年3月26日

* 版 本 号: 5-2-1

* 对任务及求解方法的描述部分

* 输入描述: 设计分数类,完成对分数的运算

* 问题描述:

* 程序输出:

 * 程序头部的注释结束

#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 nume;
	int deno;
	int gcd(int , int );
	bool is_CF(int n, int d) ;
};

CFraction::CFraction(int nu, int de):nume(nu),deno(de){}

int main()
{
	CFraction cf;

	cf.Set(5, 6);

	cf.input();

	cout << "化简后的值是:" << endl;
	
	cf.Simplify() ;

	cf.output(0);

	cout << "再扩大四倍后是:" << endl;

	cf.amplify(4);

	cf.output(0);

	system("PAUSE");

	return 0;
}

void CFraction::Set(int nu, int de)
{
	nume = nu;

	deno = de;
}

void CFraction::input()
{
	char c;

	cout << "输入分数:(格式:nu/de)" << endl;

	while(1)  
	{  
		cin >> nume >> c >> deno;  

		if(c != '/')  
		{  
			cout << "格式不正确,请重新输入!" << endl;  
		}  

		else if(! is_CF(nume, deno))  
		{  
			cout << "数字非法,请重新输入!" << endl;  
		}  

		else  
		{  
			break;  
		}  
	}   
}

bool CFraction::is_CF(int n, int d)  
{  
	if(n < 0 || d <= 0)  
	{  
		return false;  
	}  

	return true;  
}  

void CFraction::Simplify()
{
	nume = nume / gcd(nume, deno);

	deno = deno / gcd(nume, deno);

}

int CFraction::gcd(int nu, int de)  
{  
    int t, r, a, b; 
	
	a = nu;

	b = de;

    if (a < b)     
    {  
        t = a;  
        a = b;                                   
        b = t;  
    }   

    while (b != 0)  
    {  
        r = a % b;  
        a = b;  
        b = r;  
    }  

    return a;  
}

void CFraction::amplify(int n)
{
	nume *= n;
}
 
void CFraction::output(int style)
{
	switch(style)
	{
	case(0):
		cout << nume << "/" << deno << endl;

		break;
	case(1):
		Simplify();

		cout << nume << "/" << deno << endl;

		break;
	case(2):
		Simplify();

		if(nume > deno)
		{
			int add;

			add = nume / deno;

			if(nume % deno == 0)
			{
				cout << add << endl;
			}

			else
			{
				cout << add << "(" << nume % deno << "/" << deno << ")" << endl;
			}
		}

		break;
	default:
		cout << nume << "/" << deno << endl;

		break;
	}
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:74487次
    • 积分:1229
    • 等级:
    • 排名:千里之外
    • 原创:48篇
    • 转载:0篇
    • 译文:0篇
    • 评论:11条
    文章分类