C++ 分数运算(类+构造)

题目描述
用C++定义和实现一个分数类,并根据要求完成分数对象的运用
分数类包含分子和分母两个属性,操作包括

  1. 各属性的get方法
  2. 构造函数,初始化分子分母
  3. 相加运算,该运算接收两个分数对象的分子和分母,然后进行分数相加,结果保存在自己的分子和分母中,运算规则为:假设当前分数为A0/B0,接收两个分数A1/B1和A2/B2,相加结果,A0=A1×B2+ A2×B1,B0=B1×B2
  4. 相乘运算,该运算接收两个分数对象的分子和分母,然后进行分数相乘,运算规则为:假设当前分数为A0/B0,接收两个分数A1/B1和A2/B2,然后进行分数相乘,A0=A1×A2,B0=B1×B2
  5. 显示函数,显示格式:分数/分母
    在主函数中定义若干个分数对象,并使用分数对象进行运算。
    提示:每个分数运算都包含三个分数对象,例如要做分数A和B的相加,那么除了A和B还要定义C,通过调用C的相加方法,把A和B的分子分母传递给C运算,结果保存在C中
    注意:提交代码时必须用注释划分出三个区域:类定义、类实现、主函数,如下
//-----类定义------

class XXX
{  // 写类定义代码
};
//----类实现------
void Process::XXX()
{ // 写类定义代码
};
//-----主函数-----
int main()
{
  //写对象的创建和运行过程
  return 0;
}

输入
第一行输入t表示有t个测试实例
第二行输入第一个分数的分子和分母,都用整数输入,都不为0
第三行输入第二个分数的分子和分母,都用整数输入,都不为0
依次类推输入其他实例的分数分子和分母
注意:如果分数是负数,负号在分子中输入,例如负的五分之三,则分子为-3,分母为5 输出输出每个实例的运算结果,每个实例包含三行
第一行输出要运算的两个分数对象
第二行输出两个分数相加的结果,注意相加的运算、结果显示都要使用第三个对象的方法
第三行输出两个分数相乘的结果,注意相乘的运算、结果显示都要使用第三个对象的方法
样例输入
2
2 3
4 5
-3 4 5 6
样例输出
2/3 4/5
22/15
8/15
-3/4 5/6
2/24
-15/24

#include<iostream>
using namespace std;
class CFraction
{
private:
     int fz, fm;
public:
  CFraction(){
  };
     CFraction(int fz_val, int fm_val){
      fz=fz_val;
      fm=fm_val;
     }
     CFraction add(const CFraction &r,const CFraction &s){
  fz=s.fz*r.fm+r.fz*s.fm;
  fm=s.fm*r.fm;
  }
     CFraction mul(const CFraction &r,const CFraction &s){
      fz=s.fz*r.fz;
      fm=s.fm*r.fm;
      if((fz>0&&fm<0)||(fz<0&&fm<0)){
       fz=-fz;
       fm=-fm;
   }
  }
     void print(){
      cout<<fz<<"/"<<fm;
  }
};
int main(){
 int fz,fm,t;
 cin>>t;
 CFraction ccc;
 while(t--){
 cin>>fz>>fm;
 CFraction aaa(fz,fm);
 cin>>fz>>fm;
 CFraction bbb(fz,fm);
 aaa.print();
 cout<<" ";
 bbb.print();
 cout<<endl;
 ccc.add(aaa,bbb);
 ccc.print();
 cout<<endl;
 ccc.mul(aaa,bbb);
 ccc.print();
 cout<<endl;
 }
 return 0;
}

在这里插入图片描述

  • 6
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
下面是一个简单的 C++ 分数 `fraction` 的实现,它包含了分数的四则运算和比较运算。 ```cpp #include <iostream> using namespace std; class fraction { private: int num; // 分子 int den; // 分母 public: fraction(int n = 0, int d = 1) { if (d == 0) { cout << "分母不能为0!" << endl; exit(1); } if (d < 0) { n = -n; d = -d; } num = n; den = d; reduce(); } int getNum() const { return num; } int getDen() const { return den; } fraction operator-() const { return fraction(-num, den); } friend fraction operator+(const fraction& f1, const fraction& f2); friend fraction operator-(const fraction& f1, const fraction& f2); friend fraction operator*(const fraction& f1, const fraction& f2); friend fraction operator/(const fraction& f1, const fraction& f2); friend bool operator==(const fraction& f1, const fraction& f2); friend bool operator!=(const fraction& f1, const fraction& f2); friend bool operator<(const fraction& f1, const fraction& f2); friend bool operator>(const fraction& f1, const fraction& f2); friend bool operator<=(const fraction& f1, const fraction& f2); friend bool operator>=(const fraction& f1, const fraction& f2); friend istream& operator>>(istream& in, fraction& f); friend ostream& operator<<(ostream& out, const fraction& f); private: void reduce() { int gcd = getGCD(num, den); num /= gcd; den /= gcd; } int getGCD(int a, int b) { if (b == 0) return a; return getGCD(b, a % b); } }; fraction operator+(const fraction& f1, const fraction& f2) { return fraction(f1.getNum() * f2.getDen() + f2.getNum() * f1.getDen(), f1.getDen() * f2.getDen()); } fraction operator-(const fraction& f1, const fraction& f2) { return f1 + (-f2); } fraction operator*(const fraction& f1, const fraction& f2) { return fraction(f1.getNum() * f2.getNum(), f1.getDen() * f2.getDen()); } fraction operator/(const fraction& f1, const fraction& f2) { return fraction(f1.getNum() * f2.getDen(), f1.getDen() * f2.getNum()); } bool operator==(const fraction& f1, const fraction& f2) { return f1.getNum() == f2.getNum() && f1.getDen() == f2.getDen(); } bool operator!=(const fraction& f1, const fraction& f2) { return !(f1 == f2); } bool operator<(const fraction& f1, const fraction& f2) { return f1.getNum() * f2.getDen() < f2.getNum() * f1.getDen(); } bool operator>(const fraction& f1, const fraction& f2) { return f2 < f1; } bool operator<=(const fraction& f1, const fraction& f2) { return !(f2 < f1); } bool operator>=(const fraction& f1, const fraction& f2) { return !(f1 < f2); } istream& operator>>(istream& in, fraction& f) { char slash; in >> f.num >> slash >> f.den; f.reduce(); return in; } ostream& operator<<(ostream& out, const fraction& f) { out << f.getNum() << '/' << f.getDen(); return out; } int main() { fraction f1(1, 2), f2(3, 4), f3; cout << "f1 = " << f1 << endl; cout << "f2 = " << f2 << endl; cout << "f3 = " << f3 << endl; cout << "请输入一个分数:"; cin >> f3; cout << "f3 = " << f3 << endl; cout << "f1 + f2 = " << f1 + f2 << endl; cout << "f1 - f2 = " << f1 - f2 << endl; cout << "f1 * f2 = " << f1 * f2 << endl; cout << "f1 / f2 = " << f1 / f2 << endl; cout << "f1 == f2 ? " << (f1 == f2) << endl; cout << "f1 != f2 ? " << (f1 != f2) << endl; cout << "f1 < f2 ? " << (f1 < f2) << endl; cout << "f1 > f2 ? " << (f1 > f2) << endl; cout << "f1 <= f2 ? " << (f1 <= f2) << endl; cout << "f1 >= f2 ? " << (f1 >= f2) << endl; return 0; } ``` 上述实现中,分数 `fraction` 的成员变量包括分子 `num` 和分母 `den`,它们在构造函数中被初始化。构造函数中还进行了分母为零的判断和分数的约分处理。`fraction` 重载了一些运算符,包括一元负号运算符、二元加减乘除运算符和比较运算符。此外,还重载了输入输出流运算符,方便用户输入和输出分数。在主函数中,演示了如何使用这些运算符进行分数运算和比较。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值