2023.4.18编程一小时打卡
一、问题描述:
定义一个分数类,包含分子、分母
实验要求:
- 含有无参的默认构造函数,并进行构造函数的重载;
- 重载分数的加法+、减法-、数乘*这三运算符;
- 重载分数的输入和输出运算符;
- 重载分数的关系运算符==,!=,>=,<=;
- 定义约简函数,使分子分母没有公因子。
二、解题思路:
首先,定义一个分数类,然后,去重载运算符和构造成员函数,在构造约简函数时,可以先找出最大公因子,然后用分子分母分别除最大公因子。最后实现验证代码的运行。
三、代码实现:
#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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结