2023.4.18编程一小时打卡

一、问题描述:

定义一个分数类,包含分子、分母

实验要求:

  1. 含有无参的默认构造函数,并进行构造函数的重载;
  2. 重载分数的加法+、减法-、数乘*这三运算符;
  3. 重载分数的输入和输出运算符;
  4. 重载分数的关系运算符==,!=,>=,<=;
  5. 定义约简函数,使分子分母没有公因子。

二、解题思路:

首先,定义一个分数类,然后,去重载运算符和构造成员函数,在构造约简函数时,可以先找出最大公因子,然后用分子分母分别除最大公因子。最后实现验证代码的运行。

三、代码实现:

#include<iostream>
#include<string>
using namespace std;
class fraction
{
private:
	int zi;
	int mu;
public:
	fraction(){}
	fraction(int a,int b):zi(a),mu(b){}
	fraction operator+(fraction &);
	fraction operator-(fraction &);
	fraction operator*(fraction &);
	friend istream & operator>>(istream &,fraction &);
	friend ostream & operator<<(ostream &,fraction &);
	void operator==(fraction &);
	void operator!=(fraction &);
	void operator>=(fraction &);
	void operator<=(fraction &);
	fraction jian();
};
fraction fraction::operator+(fraction &f)
{
	fraction b;
	if(mu!=f.mu)
	{
		int z,m;
		m=mu*f.mu;
		z=zi*f.mu;
		b.mu=f.mu*mu;
		b.zi=f.zi*mu;
		b.zi=b.zi+z;
	}
	else if(mu=f.mu)
	{
		b.zi=f.zi+zi;
	}
	return b;
}
fraction fraction::operator-(fraction &f)
{
	fraction b;
	if(mu!=f.mu)
	{
		int z,m;
		m=mu*f.mu;
		z=zi*f.mu;
		b.mu=f.mu*mu;
		b.zi=f.zi*mu;
		b.zi=z-b.zi;
	}
	else if(mu=f.mu)
	{
		b.zi=zi-b.zi;
	}
	return b;
}
fraction fraction::operator*(fraction &f)
{
	zi=zi*f.zi;
	mu=mu*f.mu;
	return *this;
}
istream & operator>>(istream &put,fraction &f)
{
	put>>f.zi>>f.mu;
	return put;
}
ostream & operator<<(ostream &out,fraction &f)
{
	out<<f.zi<<"/"<<f.mu<<endl;
	return out;
}
void fraction::operator==(fraction &f)
{
	if(mu!=f.mu)
	{
		int a;
		a=mu;
		mu=mu*f.mu;
		zi=zi*f.mu;
		f.mu=f.mu*a;
		f.zi=f.zi*a;
		if(zi==f.zi)
			cout<<"相等"<<endl;
	}
	else
	{
		if(zi==f.zi)
			cout<<"相等"<<endl;
	}
}
void fraction::operator!=(fraction &f)
{
	if(mu!=f.mu)
	{
		int a;
		a=mu;
		mu=mu*f.mu;
		zi=zi*f.mu;
		f.mu=f.mu*a;
		f.zi=f.zi*a;
		if(zi!=f.zi)
			cout<<"不相等"<<endl;
	}
	else
	{
		if(zi!=f.zi)
			cout<<"不相等"<<endl;
	}
}
void fraction::operator<=(fraction &f)
{
	if(mu!=f.mu)
	{
		int a;
		a=mu;
		mu=mu*f.mu;
		zi=zi*f.mu;
		f.mu=f.mu*a;
		f.zi=f.zi*a;
		if(zi<=f.zi)
			cout<<"小于等于"<<endl;
	}
	else
	{
		if(zi<=f.zi)
			cout<<"小于等于"<<endl;
	}
}
void fraction::operator>=(fraction &f)
{
	if(mu!=f.mu)
	{
		int a;
		a=mu;
		mu=mu*f.mu;
		zi=zi*f.mu;
		f.mu=f.mu*a;
		f.zi=f.zi*a;
		if(zi>=f.zi)
			cout<<"大于等于"<<endl;
	}
	else
	{
		if(zi>=f.zi)
			cout<<"大于等于"<<endl;
	}
}
fraction fraction::jian()
{
	fraction f;
	int a,b;
	a=this->zi;
	b=this->mu;
	if(a>b)
	{
		int num=0;
		b=num;
		b=a;
		a=num;
	}
	int sum;
	for(int i=a;i>=1;i--)
	{
		if(b%i==0&&a%i==0)
		{
			sum=i;
			break;
		}
	}
	f.zi=this->zi/sum;
	f.mu=this->mu/sum;
	return f;
}
int main()
{	
	fraction f1,f2,f3;
	cin>>f1>>f2;
	cout<<f1<<f2;
	cout<<f1+f2;
	cout<<(f1+f2).jian();
	cout<<f1-f2;
	cout<<(f1-f2).jian();
	cout<<f1*f2;
	f1==f2;
	f1!=f2;
	f1<=f2;
	f1>=f2;
	return 0;
}

 

posted @   信2211-8李欣垚  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结
点击右上角即可分享
微信分享提示