请编写函数,完成有理数的乘法。 函数原型 FRACTION FractionMul(const FRACTION *x, const FRACTION *y); 说明:参数 x 和 y 为两个指示复数的指针。函数将 x 所指有理数与 y 所指有理数相乘,函数值为两者的积。 在“Fraction.h”中声明函数,在“Fraction.c”中编写此函数。 Fraction.h ...... FRACTION FractionMul(const FRACTION *x, const FRACTION *y); ...... Fraction.c ...... /* 你提交的代码将被嵌在这里 */ 打开“main.c”修改主函数进行测试。 main.c #include <stdio.h> #include "Fraction.h" int main() { FRACTION a, b, p; FractionInput(&a); FractionInput(&b); p = FractionMul(&a, &b); FractionOutput(&p); putchar('\n'); return 0; } 输入样例 1/2 -1/3 输出样例 -1/6 要求:注意计算顺序,尽量在整数值域范围内完成更多计算任务。 代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB C (gcc) 1
时间: 2024-03-20 10:40:51 浏览: 76
在 Fraction.h 文件中添加以下代码:
```c
#ifndef FRACTION_H_INCLUDED
#define FRACTION_H_INCLUDED
typedef struct FRACTION {
int numerator; // 分子
int denominator; // 分母
} FRACTION;
void FractionInput(FRACTION *f);
void FractionOutput(const FRACTION *f);
int gcd(int a, int b);
void FractionSimplify(FRACTION *f);
FRACTION FractionAdd(const FRACTION *x, const FRACTION *y);
FRACTION FractionSub(const FRACTION *x, const FRACTION *y);
FRACTION FractionMul(const FRACTION *x, const FRACTION *y);
#endif // FRACTION_H_INCLUDED
```
在 Fraction.c 文件中添加以下代码:
```c
#include "Fraction.h"
#include <stdio.h>
// 输入有理数
void FractionInput(FRACTION *f) {
scanf("%d/%d", &f->numerator, &f->denominator);
}
// 输出有理数
void FractionOutput(const FRACTION *f) {
printf("%d/%d", f->numerator, f->denominator);
}
// 求 a 和 b 的最大公约数
int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b);
}
// 约分
void FractionSimplify(FRACTION *f) {
int g = gcd(f->numerator, f->denominator);
f->numerator /= g;
f->denominator /= g;
}
// 有理数加法
FRACTION FractionAdd(const FRACTION *x, const FRACTION *y) {
FRACTION res;
res.numerator = x->numerator * y->denominator + y->numerator * x->denominator;
res.denominator = x->denominator * y->denominator;
FractionSimplify(&res);
return res;
}
// 有理数减法
FRACTION FractionSub(const FRACTION *x, const FRACTION *y) {
FRACTION res;
res.numerator = x->numerator * y->denominator - y->numerator * x->denominator;
res.denominator = x->denominator * y->denominator;
FractionSimplify(&res);
return res;
}
// 有理数乘法
FRACTION FractionMul(const FRACTION *x, const FRACTION *y) {
FRACTION res;
res.numerator = x->numerator * y->numerator;
res.denominator = x->denominator * y->denominator;
FractionSimplify(&res);
return res;
}
```
在 main.c 文件中添加以下代码:
```c
#include <stdio.h>
#include "Fraction.h"
int main() {
FRACTION a, b, p;
FractionInput(&a);
FractionInput(&b);
p = FractionMul(&a, &b);
FractionOutput(&p);
putchar('\n');
return 0;
}
```
以上代码实现了有理数的乘法。注意,为了避免精度问题,我们在每个有理数的操作中都进行了约分操作。
阅读全文