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

原创 2012年03月26日 18:24:45
 实验报告模板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;
	}
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

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

/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称: CFr...

第五周任务二之分数类

源程序: /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称:...

第五周任务二(分数类)

* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称: 分数...

第五周任务二 分数

/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称:  ...

第五周任务2:构造分数“类”

#include using namespace std; int gcd(int,int); class CFraction {private: int nume; // 分子 ...

C++中提供了多种基本的数据类型。实际上,这些远不能满足我们的需求,如复数(第10章的例子大多是处理虚数的),再如分数。本任务将设计一个简单的分数类,完成对分数的几个运算。一则巩固基于对象编程的方法,

#include using namespace std; class CFraction {private: int nume; // 分子 int deno; // 分...

任务二:设计一个简单的分数类

/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称: ...

第十五周实验报告(任务二)【程序窗口设计之分数类】

/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称:窗口...

第十五周任务二 MFC 分数的运算

Fraction.h class Fraction { private: int nume; // 分子 int deno; // 分母 public: Fractio...

C++第八周【任务四】分数类中的对象可以和整型数进行四则运算,且运算符合交换律。

/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称 :C++第八...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)