C语言请进行程序设计,以最简形式输出两个分数的加减运算结果。 输入包含多组测试数据,每组数据占一行,每行数据是一个字符串,格式为:"a/boc/d"。 其中a, b, c, d是一个0-9的整数。o是运算符"+"或者"-"。 输入数据保证合法并且以EOF结束 (CTRL+Z键) 提示: while(scanf("%s",str)!=EOF) {} 对于输入数据的每一行,输出两个分数的运算结果。 注意结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数 样例输入: 1/8+3/8 1/4-1/2 1/3-1/3 样例输出: 1/2 -1/4 0
时间: 2024-03-07 08:50:16 浏览: 48
以下是C语言程序设计的实现:
```c
#include <stdio.h>
// 求a和b的最大公约数
int gcd(int a, int b) {
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
// 将分数a/b和c/d进行加法运算
void add(int a, int b, int c, int d) {
int numerator = a * d + b * c;
int denominator = b * d;
int g = gcd(numerator, denominator);
numerator /= g;
denominator /= g;
printf("%d/%d\n", numerator, denominator);
}
// 将分数a/b和c/d进行减法运算
void sub(int a, int b, int c, int d) {
int numerator = a * d - b * c;
int denominator = b * d;
int g = gcd(numerator, denominator);
numerator /= g;
denominator /= g;
printf("%d/%d\n", numerator, denominator);
}
int main() {
char str[20];
while (scanf("%s", str) != EOF) {
int a, b, c, d;
char op;
sscanf(str, "%d/%d%c%d/%d", &a, &b, &op, &c, &d);
if (op == '+') {
add(a, b, c, d);
} else {
sub(a, b, c, d);
}
}
return 0;
}
```
以上程序中,我们定义了两个函数`add`和`sub`分别实现分数加法和减法运算,其中`gcd`函数用于求最大公约数,`main`函数中则通过`scanf`和`sscanf`函数读取输入并进行计算。最后需要注意输出结果时,需要化简至最简分数形式。