c语言编写有理数库。分别使用整数表示有理数的分子与分母。要求至少 完成有理数的加减乘除与化简运算。
时间: 2024-03-23 11:43:39 浏览: 109
计算两个整数的和差积商
好的,我可以为你提供一个基本的有理数库的实现,包括有理数加减乘除和化简。
首先,我们定义一个结构体 `Rational` 用于表示有理数,其中包含分子和分母两个整数变量:
```c
typedef struct {
int numerator; // 分子
int denominator; // 分母
} Rational;
```
接下来,我们实现有理数的加减乘除和化简运算。
1. 有理数加法:
```c
Rational add(Rational a, Rational b) {
Rational result;
result.denominator = a.denominator * b.denominator;
result.numerator = a.numerator * b.denominator + b.numerator * a.denominator;
reduce(&result);
return result;
}
```
其中,我们首先将两个有理数的分母相乘得到结果的分母,然后将两个有理数的分子分别乘上另一个有理数的分母,相加得到结果的分子。最后将结果化简,即可得到加法的结果。
2. 有理数减法:
```c
Rational subtract(Rational a, Rational b) {
Rational result;
result.denominator = a.denominator * b.denominator;
result.numerator = a.numerator * b.denominator - b.numerator * a.denominator;
reduce(&result);
return result;
}
```
减法和加法类似,只不过将第二个有理数的分子乘上-1,然后按照加法的方式计算即可。
3. 有理数乘法:
```c
Rational multiply(Rational a, Rational b) {
Rational result;
result.numerator = a.numerator * b.numerator;
result.denominator = a.denominator * b.denominator;
reduce(&result);
return result;
}
```
乘法的计算比较简单,只需要将两个有理数的分子和分母分别相乘即可。
4. 有理数除法:
```c
Rational divide(Rational a, Rational b) {
Rational result;
result.numerator = a.numerator * b.denominator;
result.denominator = a.denominator * b.numerator;
reduce(&result);
return result;
}
```
除法的计算也比较简单,只需要将第一个有理数的分子乘上第二个有理数的分母,第一个有理数的分母乘上第二个有理数的分子即可。
5. 有理数化简:
```c
void reduce(Rational* r) {
int gcdValue = gcd(r->numerator, r->denominator);
r->numerator /= gcdValue;
r->denominator /= gcdValue;
if (r->denominator < 0) {
r->numerator = -r->numerator;
r->denominator = -r->denominator;
}
}
int gcd(int a, int b) {
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
```
化简的过程是先计算出分子和分母的最大公约数,然后将分子和分母同时除以最大公约数得到化简后的有理数。同时,如果分母为负数,则将分子和分母同时取反。
最后,我们可以在主函数中调用这些函数来完成有理数的计算:
```c
int main() {
Rational a = {1, 2};
Rational b = {3, 4};
Rational c = add(a, b);
printf("%d/%d + %d/%d = %d/%d\n", a.numerator, a.denominator, b.numerator, b.denominator, c.numerator, c.denominator);
c = subtract(a, b);
printf("%d/%d - %d/%d = %d/%d\n", a.numerator, a.denominator, b.numerator, b.denominator, c.numerator, c.denominator);
c = multiply(a, b);
printf("%d/%d * %d/%d = %d/%d\n", a.numerator, a.denominator, b.numerator, b.denominator, c.numerator, c.denominator);
c = divide(a, b);
printf("%d/%d / %d/%d = %d/%d\n", a.numerator, a.denominator, b.numerator, b.denominator, c.numerator, c.denominator);
return 0;
}
```
输出结果如下:
```
1/2 + 3/4 = 5/4
1/2 - 3/4 = -1/4
1/2 * 3/4 = 3/8
1/2 / 3/4 = 2/3
```
以上就是一个基本的有理数库的实现。
阅读全文