有理数加法的C语言程序实现如下:
```c
include
// 函数声明
void fen_sum(int a1, int b1, int a2, int b2, int *a, int *b);
int myprime(int *a, int *b);
int main() {
int a1, b1, a2, b2, a, b;
// 输入两个有理数
scanf("%d/%d %d/%d", &a1, &b1, &a2, &b2);
// 计算两个有理数的和
fen_sum(a1, b1, a2, b2, &a, &b);
// 输出结果
if (myprime(&a, &b))
printf("%d", a);
else
printf("%d/%d", a, b);
return 0;
}
// 计算两个有理数的和
void fen_sum(int a1, int b1, int a2, int b2, int *a, int *b) {
*b = b1 * b2;
*a = a1 * b2 + a2 * b1;
}
// 判断分数是否最简
int myprime(int *a, int *b) {
int gcd = 0;
for (int i = 2; i <= *b; i++) {
if (*b % i == 0) {
gcd = i;
break;
}
}
if (gcd == 1)
return 1;
else
return 0;
}
```
代码解释:
输入部分
使用 `scanf` 函数读取两个有理数,格式为 `a1/b1 a2/b2`。
计算部分
调用 `fen_sum` 函数计算两个有理数的和。该函数将两个有理数的分子相加,分母相乘,得到结果的分子和分母。
化简部分
调用 `myprime` 函数判断结果是否为最简分数。如果是,则直接输出分子;否则,输出分子和分母。
注意事项:
程序假设输入的分子和分母都是正整数。
程序没有处理输入错误的情况,实际应用中应增加输入验证。
程序没有考虑溢出情况,实际应用中应注意数据类型的选择。