c语言编写数据结构程序题,实现两个有理数相加、相减、相乘的运算。并附上详细步骤
时间: 2024-10-09 12:08:42 浏览: 50
课程设计要求 设计一个程序实现两个矩阵的基本运算 两个矩阵相加 两个矩阵相减 两个矩阵相乘 求一个矩阵的转置矩阵
5星 · 资源好评率100%
在C语言中,我们可以创建一个简单的数据结构来表示有理数,包括分子(numerator)和分母(denominator)。然后我们可以定义一个结构体来存储这两个值,并为加法、减法和乘法操作编写函数。以下是详细的步骤:
1. 定义一个名为`Ratio`的结构体,包含两个整型成员变量(`int numerator` 和 `int denominator`):
```c
typedef struct {
int numerator;
int denominator;
} Ratio;
```
2. 初始化结构体:为了表示0(即分母为0的情况),我们还需要定义一个特殊值来表示无限大或未定义:
```c
#define INFINITE_DENOMINATOR (1 << 31) - 1
```
3. 实现加法函数`add_ratio(Ratio a, Ratio b)`,这里采用公共分母的方法来求和:
```c
Ratio add_ratio(Ratio a, Ratio b) {
int new_numerator = a.numerator * b.denominator + b.numerator * a.denominator;
int gcd = __gcd(a.denominator, b.denominator);
return (Ratio){new_numerator / gcd, gcd};
}
// 使用辗转相除法计算最大公约数的辅助函数
int __gcd(int a, int b) {
return b == 0 ? a : __gcd(b, a % b);
}
```
4. 实现减法和乘法函数类似,只是数学原理稍有不同:
- 减法 `subtract_ratio(Ratio a, Ratio b)`:先取补数再相加
- 乘法 `multiply_ratio(Ratio a, Ratio b)`:直接相乘后调整分母
5. 主函数测试示例:
```c
int main() {
Ratio r1 = {3, 4}, r2 = {7, 8}, result;
result = add_ratio(r1, r2); // 两个数相加
printf("Addition: (%d/%d) + (%d/%d) = (%d/%d)\n",
result.numerator, result.denominator, r1.numerator, r1.denominator,
result.numerator, result.denominator);
result = subtract_ratio(r1, r2); // 两个数相减
printf("Subtraction: (%d/%d) - (%d/%d) = (%d/%d)\n",
result.numerator, result.denominator, r1.numerator, r1.denominator,
result.numerator, result.denominator);
result = multiply_ratio(r1, r2); // 两个数相乘
printf("Multiplication: (%d/%d) * (%d/%d) = (%d/%d)\n",
r1.numerator, r1.denominator, r2.numerator, r2.denominator,
result.numerator, result.denominator);
return 0;
}
```
阅读全文