第九章 怎样使用类和对象 作业

刚学完第九章,可能代码不是很漂亮,欢迎大家提意见!

建立一个分数类Fraction。分数类的数据成员包括分子和分母。成员函数包括构造函数、
复制构造函数。构造函数要对初始化数据进行必要的检查(分母不能为0)。
将分数显示成“a/b”形式的输出函数。成员函数包括约分、通分、加、减、乘、除、
求倒数、比较大小、显示和输入。完成以上所有成员函数并在主函数中进行检验。

#include<iostream>
using namespace std;
class Fraction
{
private:
	int numerator;//分子
	int denominator;//分母
public:
	Fraction() { numerator = 1; denominator = 1; };
	Fraction(int a, int b);
	Fraction(Fraction& s) { numerator = s.numerator; denominator = s.denominator; };
	~Fraction() {};
	void yuefen();
	void tongfen(Fraction m);
	void add(Fraction m);//加
	void subtract(Fraction m);//减
	void multiply(Fraction m);//乘
	void divide(Fraction m);//除
	void reciprocal();//求倒数
	void compare(Fraction m);//比较大小
	void print();
	void input();
	
};
Fraction::Fraction(int a, int b)
{
		numerator = a;
		denominator = b;
	
}
void Fraction::input()
{
	cin >> numerator >> denominator;
	if (denominator == 0)
	{
		cout << "分母为0,请重新输入" << endl;
		cin >> numerator >> denominator;
	}
	Fraction m(numerator, denominator);
}
void Fraction::yuefen()
{
	int fac;
	fac = (numerator > denominator) ? denominator : numerator;
	while ((numerator % fac != 0) || (denominator % fac != 0))
		fac--;
		numerator = numerator / fac;
		denominator = denominator / fac;

	print();
}	
void Fraction::print()
{
	cout << "结果为:" << endl;
	cout << numerator << "/" << denominator<<endl;
}
void Fraction::tongfen(Fraction m)
{
	if (denominator != m.denominator)
	{
		denominator = denominator * m.denominator;
		numerator = numerator * m.denominator;	
	}
}
void Fraction::add(Fraction m)//加
{
	/*int numb,denb, numa,dena;
	numa = numerator;
	dena = denominator;
	numb = m.numerator;
	denb = m.denominator;
	numerator = numa * denb + numb * dena;
	denominator = dena * denb;*/
	tongfen(m);//用通分步骤化简
	m.numerator = m.numerator * (denominator / m.denominator);
	numerator = numerator + m.numerator;
	yuefen();
	
}
void Fraction::subtract(Fraction m)//减
{
	/*int numb, denb, numa, dena;
	numa = numerator;
	dena = denominator;
	numb = m.numerator;
	denb = m.denominator;
	numerator = numa * denb - numb * dena;
	denominator = dena * denb;*/
	tongfen(m);//用通分步骤化简
	m.numerator = m.numerator * (denominator / m.denominator);
	numerator = numerator - m.numerator;
	yuefen();
	
}
void Fraction::multiply(Fraction m)//乘
{
	int numb, denb, numa, dena;
	numa = numerator;
	dena = denominator;
	numb = m.numerator;
	denb = m.denominator;
	numerator = numa *  numb;
	denominator = dena * denb;
	//或者直接计算
	/*numerator = numerator * m.numerator;
	denominator = m.denominator;*/
	yuefen();
	
}
void Fraction::reciprocal()//倒数
{
	int numa, dena;
	numa = numerator;
	dena = denominator;
	denominator = numa;
	numerator = dena;
}
void Fraction::divide(Fraction m)//除
{
	int numb, denb, numa, dena;
	m.reciprocal();
	numerator = numerator * m.numerator;
	denominator = denominator * m.denominator;
	yuefen();
}
void Fraction::compare(Fraction m)//比较大小
{
	tongfen(m);
	m.numerator= m.numerator * (denominator / m.denominator);
	if (numerator == m.numerator)
		cout << "一样大" << endl;
	else if (numerator > m.numerator)
		cout << numerator << "/" << denominator << "  >  " << m.numerator << "/" << denominator<<endl;
	else 
		cout<< numerator << "/" << denominator << "  <  " << m.numerator << "/" << denominator<<endl;
}
int main()
{
	int a, b,cho=1,m;
	cout << "请选择要进行的操作:" << endl;
	cout << "(1输入 2加 3减 4乘 5除 6约分 7比较大小0 退出)" << endl;
	cin >> cho;
	Fraction x, y;
	while (cho != 0)
	{
		
		switch (cho)
		{
		case 1:
		{cout << "请输入分数A的分子,分母" << endl;
		x.input();
		cout << "请输入分数B的分子,分母" << endl;
		y.input();
		break;
		}
		case 2:x.add(y); break;
		case 3:x.subtract(y); break;
		case 4:x.multiply(y); break;
		case 5:x.divide(y); break;
		case 6: {
			cout << "对A约分按1,对B约分按2" << endl;
			cin >> m;
			if (m == 1)
				x.yuefen();
			if (m == 2)
				y.yuefen();
			break; }
		case 7:x.compare(y); break;
		
		}
		system("pause");
		system("cls");//清屏
		cout << "_______________________________________________" << endl;
		cout << "请输入要进行的操作" << endl;
		cout << "(1输入 2加 3减 4乘 5除 6求倒数 7比较大小 8约分 0 退出)" << endl;
		cin >> cho;	
	}
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值