用 c++编写 分数的运算符重载
时间: 2023-08-31 12:43:38 浏览: 130
### 回答1:
在 C 语言中,可以通过定义一个结构体来实现分数的运算符重载。以下是一个示例代码:
```
typedef struct {
int numerator; // 分子
int denominator; // 分母
} Fraction;
Fraction add(Fraction f1, Fraction f2) {
Fraction result;
result.numerator = f1.numerator * f2.denominator + f2.numerator * f1.denominator;
result.denominator = f1.denominator * f2.denominator;
return result;
}
Fraction sub(Fraction f1, Fraction f2) {
Fraction result;
result.numerator = f1.numerator * f2.denominator - f2.numerator * f1.denominator;
result.denominator = f1.denominator * f2.denominator;
return result;
}
Fraction mul(Fraction f1, Fraction f2) {
Fraction result;
result.numerator = f1.numerator * f2.numerator;
result.denominator = f1.denominator * f2.denominator;
return result;
}
Fraction div(Fraction f1, Fraction f2) {
Fraction result;
result.numerator = f1.numerator * f2.denominator;
result.denominator = f1.denominator * f2.numerator;
return result;
}
```
以上代码定义了一个名为Fraction的结构体,其中包含分子和分母两个成员变量。分别实现了加、减、乘、除四个运算符的重载函数,并且每个函数的返回值都是一个Fraction类型的结构体。对于分数的加、减、乘、除运算,可以通过调用对应的重载函数来完成。
### 回答2:
在C语言中,我们可以使用结构体来表示分数,并通过函数重载来实现分数的运算符重载。下面是一个示例程序:
```c
#include <stdio.h>
// 定义分数结构体
typedef struct {
int numerator; // 分子
int denominator; // 分母
} Fraction;
// 辗转相除法求最大公约数
int gcd(int a, int b) {
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
// 约分函数
Fraction reduce(Fraction f) {
if (f.numerator == 0) {
f.denominator = 1;
} else if (f.denominator < 0) {
f.numerator = -f.numerator;
f.denominator = -f.denominator;
}
int d = gcd(abs(f.numerator), abs(f.denominator));
if (d != 1) {
f.numerator /= d;
f.denominator /= d;
}
return f;
}
// 分数相加运算符重载
Fraction operator+(Fraction f1, Fraction f2) {
Fraction result;
result.numerator = f1.numerator * f2.denominator + f2.numerator * f1.denominator;
result.denominator = f1.denominator * f2.denominator;
return reduce(result);
}
// 分数相减运算符重载
Fraction operator-(Fraction f1, Fraction f2) {
Fraction result;
result.numerator = f1.numerator * f2.denominator - f2.numerator * f1.denominator;
result.denominator = f1.denominator * f2.denominator;
return reduce(result);
}
// 分数相乘运算符重载
Fraction operator*(Fraction f1, Fraction f2) {
Fraction result;
result.numerator = f1.numerator * f2.numerator;
result.denominator = f1.denominator * f2.denominator;
return reduce(result);
}
// 分数相除运算符重载
Fraction operator/(Fraction f1, Fraction f2) {
Fraction result;
result.numerator = f1.numerator * f2.denominator;
result.denominator = f1.denominator * f2.numerator;
return reduce(result);
}
int main() {
Fraction f1 = {2, 3};
Fraction f2 = {4, 5};
Fraction sum = f1 + f2; // 分数相加
Fraction difference = f1 - f2; // 分数相减
Fraction product = f1 * f2; // 分数相乘
Fraction quotient = f1 / f2; // 分数相除
printf("f1 + f2 = %d/%d\n", sum.numerator, sum.denominator);
printf("f1 - f2 = %d/%d\n", difference.numerator, difference.denominator);
printf("f1 * f2 = %d/%d\n", product.numerator, product.denominator);
printf("f1 / f2 = %d/%d\n", quotient.numerator, quotient.denominator);
return 0;
}
```
以上是一个使用C语言编写的分数运算符重载示例程序。我们通过定义分数结构体,实现了分数的加减乘除运算符重载,并在主函数中完成了对示例分数的运算并输出结果。
### 回答3:
在C语言中,可以通过运算符重载来实现分数的运算。为了简化问题,我们假设每个分数都包含两个整数:分子和分母。下面给出一种实现方式:
```c
#include <stdio.h>
// 定义分数结构体
typedef struct {
int numerator; // 分子
int denominator; // 分母
} Fraction;
// 分数相加
Fraction add(Fraction f1, Fraction f2) {
Fraction result;
result.numerator = f1.numerator * f2.denominator + f2.numerator * f1.denominator;
result.denominator = f1.denominator * f2.denominator;
return result;
}
// 分数相减
Fraction subtract(Fraction f1, Fraction f2) {
Fraction result;
result.numerator = f1.numerator * f2.denominator - f2.numerator * f1.denominator;
result.denominator = f1.denominator * f2.denominator;
return result;
}
// 分数相乘
Fraction multiply(Fraction f1, Fraction f2) {
Fraction result;
result.numerator = f1.numerator * f2.numerator;
result.denominator = f1.denominator * f2.denominator;
return result;
}
// 分数相除
Fraction divide(Fraction f1, Fraction f2) {
Fraction result;
result.numerator = f1.numerator * f2.denominator;
result.denominator = f1.denominator * f2.numerator;
return result;
}
int main() {
Fraction f1 = {1, 2}; // 分数1/2
Fraction f2 = {3, 4}; // 分数3/4
// 相加
Fraction sum = add(f1, f2);
printf("Sum: %d/%d\n", sum.numerator, sum.denominator);
// 相减
Fraction difference = subtract(f1, f2);
printf("Difference: %d/%d\n", difference.numerator, difference.denominator);
// 相乘
Fraction product = multiply(f1, f2);
printf("Product: %d/%d\n", product.numerator, product.denominator);
// 相除
Fraction quotient = divide(f1, f2);
printf("Quotient: %d/%d\n", quotient.numerator, quotient.denominator);
return 0;
}
```
以上代码实现了分数的加、减、乘、除运算符重载。可以通过调用相应的函数来获取运算结果。输出的结果将会分别显示相加、相减、相乘和相除的结果。
阅读全文