代码纠错:实现“7 - 4 有理数加法”的正确计算与输出
在你提供的代码中,存在以下几个问题: 1. 变量 `sum` 定义为 `double` 类型,但在后续代码中未使用,属于多余定义,可将其删除。 2. 判断是否为整数形式的逻辑有误,应该判断分子能否整除分母,即 `fz % fm == 0` 而非 `fm % fz == 0`。 3. 最简分数化简时,`for` 循环结束后才应输出结果,原代码在循环内部输出,会导致输出多次。 4. 代码中缺少 `return 0;` 语句,虽然在很多编译器中不是强制要求,但为了代码的规范性和完整性,建议加上。 以下是修改后的代码: ```c #include <stdio.h> int main() { int a1, b1, a2, b2; // 读取输入 scanf("%d/%d %d/%d", &a1, &b1, &a2, &b2); // 计算通分后的分母 int fm = b1 * b2; // 计算通分后的分子 int fz = a1 * b2 + a2 * b1; // 判断是否为整数形式 if (fz % fm == 0) { // 是整数形式则直接输出商 printf("%d", fz / fm); } else { // 不是整数形式则进行约分 for (int i = 2; i <= fz && i <= fm; i++) { // 寻找最大公约数进行约分 while (fz % i == 0 && fm % i == 0) { fz /= i; fm /= i; } } // 输出最简分数形式 printf("%d/%d", fz, fm); } return 0; } ``` 代码解释: 1. 输入读取:使用 `scanf` 函数按照 `a1/b1 a2/b2` 的格式读取两个有理数。 2. 计算通分后的分子分母:通过公式计算两个分数通分后的分子和分母。 3. 判断是否为整数形式:如果分子能整除分母,则直接输出商。 4. 约分:使用 `for` 循环从 2 开始,寻找分子和分母的最大公约数进行约分。 5. 输出结果:根据情况输出整数或最简分数形式。 这样修改后,代码就能正确计算两个有理数的和,并以最简分数形式输出。 ######[AI问答 | 581点数解答 | 2025-12-11 11:57:09]
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)352
- C++ vector 边遍历边删除的常见陷阱与 remove_if 正确用法详解(阿里通义 | 1057点数解答 | 2026-03-22 09:23:09)17
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)323
- C 语言实现一元稀疏多项式 a=3x^14+2x^8+1 与 b=8x^14–3x^10+10x^6 的表示及基本操作(字节豆包 | 1615点数解答 | 2024-10-18 17:19:15)241
- C 语言:链表实现一元稀疏多项式的建立、销毁、输出及加减运算(字节豆包 | 1939点数解答 | 2024-10-18 17:30:58)228
- C 语言实现:随机式子驱动一元稀疏多项式建立、销毁、运算全解析(字节豆包 | 1842点数解答 | 2024-10-29 08:45:36)178
- C 语言实现一元稀疏多项式:建立、销毁、输出及加减运算全解析(字节豆包 | 1832点数解答 | 2024-10-29 08:49:08)238
- 用 JS 中 for 循环实现 1 到 100 相加并输出结果到页面的完整代码 ( | 240点数解答 | 2024-05-20 22:11:29)477
- 用 JS 的 while 循环实现 1 到 100 相加并输出到页面的代码揭秘( | 47点数解答 | 2024-05-20 22:16:48)362
- C++ 代码实现自定义运算 x@y = x² + y² - xy 及 x@(x+y) 计算(DeepSeek | 215点数解答 | 2025-12-13 15:08:14)80
- C++ 实现根据输入正整数奇偶性计算偶数和或约数和(字节豆包 | 838点数解答 | 2026-02-28 20:23:59)33
- UWP应用:实现两整数相加功能的代码示例(字节豆包 | 755点数解答 | 2024-09-27 13:28:26)194