补作业 第五次实验 项目5

本文介绍了一个简单的C++分数类的设计与实现过程。该类支持分数的基本运算,并包括了分数的输入、输出、简化等功能。通过实例演示了如何使用这个分数类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、问题及代码

/*
* 文件名称:分数类.cpp
* 作    者:赖豪运
* 完成日期:2017 年 5 月 7 日
* 版 本 号:v1.0
* 对任务及求解方法的描述部分:
* 输入描述:无
* 问题描述:  C++中提供了多种基本的数据类型。实际上,这些远不能满足我们的需求,如分数。我们可以自定义类支持这些数据类型。
  本任务将设计一个简单的分数类,完成对分数的几个运算
* 程序输出:略
* 问题分析:略
* 算法设计:略
*/
#include<iostream>  
#include<Cmath>  
using namespace std;
int gcd(int m, int n);
class CFraction
{
private:
	int nume;  // 分子  
	int deno;  // 分母  
public:
	CFraction(int nu = 0, int de = 1);
	void set(int nu = 0, int de = 1);
	void input();
	void simplify();
	void amplify(int n);
	void output(int style = 0);
};
CFraction::CFraction(int nu, int de)
{
	if (de != 0)
	{
		nume = nu;
		deno = de;
	}
	else
	{
		cerr << "初始化中发生错误,程序退出\n";
		system("pause");
		exit(0);
	}
}

void CFraction::set(int nu, int de)
{
	if (de != 0)
	{
		nume = nu;
		deno = de;
	}
}
void CFraction::input()
{
	int nu, de;
	char c;
	while (1)
	{
		cout << "输入分数(m/n): ";
		cin >> nu >> c >> de;
		if (c != '/')
			cout << "输入格式错误!\n ";
		else if (de == 0)
			cout << "分母不能为零!\n ";
		else
			break;
	}
	nume = nu;
	deno = de;
}
void CFraction::simplify()
{
	int n = gcd(deno, nume);
	deno /= n;
	nume /= n;
}
int gcd(int m, int n)
{
	int r;
	if (m<n) { r = m; m = n; n = r; }
	while (r = m%n)
	{
		m = n;
		n = r;
	}
	return n;
}
void CFraction::amplify(int n)
{
	nume *= n;
}
void CFraction::output(int style)
{
	int n;
	switch (style)
	{
	case 0:
		cout << "原样:" << nume << '/' << deno << endl;break;
	case 1:
		n = gcd(deno, nume);
		cout << "化简形式: " << nume / n << '/' << deno / n << endl;break;
	case 2:
		cout << "带分数形式:" << nume / deno << '(' << nume%deno << '/' << deno << ')' << endl;break;
	case 3:
		cout << "近似值:" << nume / double(deno) << endl;break;
	default:
		cout << "默认原样:" << nume << '/' << deno << endl;
	}
}
int main()
{
	CFraction c1, c2(8, 6);
	cout << "关于c1: " << endl;
	c1.output(0);
	cout << "改变c1: " << endl;
	c1.set(2, 7);
	c1.output();
	cout << "输入c1: " << endl;
	c1.input();
	c1.output(0);
	cout << "关于c2: " << endl;
	c2.output(0);
	c2.output(1);
	c2.output(3);
	c2.output(3);
	c2.output();
	cout << "将c2化简: " << endl;
	c2.simplify();
	c2.output(0);
	cout << "将c2放大倍: " << endl;
	c2.amplify(5);
	c2.output(0);
	c2.output(1);
	system("pause");
	return 0;
}

二、运行结果


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值