21xrx.com
2024-09-20 00:16:05 Friday
登录
文章检索 我的文章 写文章
C++实现分数运算
2023-06-29 17:49:08 深夜i     --     --
C++编程 分数计算 运算符重载 整数转分数 分数约分

分数运算在日常生活中常常用到,比如比较两个人的成绩、计算家庭用电量等。在编程中也经常需要对分数进行运算。C++语言可以利用自定义分数类型实现分数运算。

自定义分数类型通常包含分子和分母两个整型成员变量,以及一些函数成员来实现分数的加减乘除等基本运算。下面是一个基本的分数类的定义:


class Fraction {

public:

  Fraction(int n = 0, int d = 1) : num(n), den(d) { }

  Fraction operator+ (const Fraction& f) const {

    return Fraction(num*f.den + den*f.num, den*f.den);

  }

  Fraction operator- (const Fraction& f) const {

    return Fraction(num*f.den - den*f.num, den*f.den);

  }

  Fraction operator* (const Fraction& f) const {

    return Fraction(num*f.num, den*f.den);

  }

  Fraction operator/ (const Fraction& f) const {

    return Fraction(num*f.den, den*f.num);

  }

  bool operator== (const Fraction& f) const {

    return num*f.den == den*f.num;

  }

  bool operator!= (const Fraction& f) const {

    return !(*this == f);

  }

  bool operator< (const Fraction& f) const {

    return num*f.den < den*f.num;

  }

  bool operator<= (const Fraction& f) const {

    return num*f.den <= den*f.num;

  }

  bool operator> (const Fraction& f) const {

    return num*f.den > den*f.num;

  }

  bool operator>= (const Fraction& f) const {

    return num*f.den >= den*f.num;

  }

  friend istream& operator>> (istream& in, Fraction& f) {

    in >> f.num >> f.den;

    return in;

  }

  friend ostream& operator<< (ostream& out, const Fraction& f) {

    out << f.num << "/" << f.den;

    return out;

  }

private:

  int num;

  int den;

};

定义了分数类之后,就可以进行各种分数运算了。比如:


Fraction a(2, 3); // 定义一个分数 2/3

Fraction b(3, 4); // 定义一个分数 3/4

Fraction c = a + b; // 计算 a+b

Fraction d = a - b; // 计算 a-b

Fraction e = a * b; // 计算 a*b

Fraction f = a / b; // 计算 a/b

以上代码中,c、d、e、f分别是a、b进行加减乘除运算的结果。另外,分数之间可以进行比较运算(==、!=、<、<=、>、>=),比较的规则和实数一样。

此外,还可以通过重载输入输出运算符,方便地输入、输出分数。比如:


Fraction a;

cin >> a; // 输入分数

cout << a; // 输出分数

以上代码可以让用户输入一个分数,并输出该分数。

总之,C++语言可以通过自定义分数类型实现分数运算,为编程工作带来了极大的便利。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复