请编写函数,完成有理数的乘法。 函数原型 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
时间: 2024-03-20 11:41:18 浏览: 74
根据题意,我们可以先将两个分数的分子和分母分别相乘,再对结果进行约分,得到最终的乘积。
下面是代码实现:
Fraction.h:
```c
#ifndef FRACTION_H_INCLUDED
#define FRACTION_H_INCLUDED
typedef struct {
int numerator; // 分子
int denominator; // 分母
} FRACTION;
void FractionInput(FRACTION *p);
void FractionOutput(const FRACTION *p);
int Gcd(int a, int b);
FRACTION FractionMul(const FRACTION *x, const FRACTION *y);
#endif // FRACTION_H_INCLUDED
```
Fraction.c:
```c
#include <stdio.h>
#include "Fraction.h"
// 输入分数
void FractionInput(FRACTION *p) {
scanf("%d/%d", &p->numerator, &p->denominator);
}
// 输出分数
void FractionOutput(const FRACTION *p) {
printf("%d/%d", p->numerator, p->denominator);
}
// 求最大公约数
int Gcd(int a, int b) {
return b == 0 ? a : Gcd(b, a % b);
}
// 分数乘法
FRACTION FractionMul(const FRACTION *x, const FRACTION *y) {
FRACTION res;
res.numerator = x->numerator * y->numerator;
res.denominator = x->denominator * y->denominator;
int gcd = Gcd(res.numerator, res.denominator);
res.numerator /= gcd;
res.denominator /= gcd;
return res;
}
```
在主函数中,我们可以调用 `FractionInput()` 输入两个分数,再调用 `FractionMul()` 计算它们的乘积,最后再调用 `FractionOutput()` 输出结果即可。
```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;
}
```
阅读全文