在线编译器 C

#include <stdio.h> int main() { int a[10]; int m, n; for (int d = 0; d < 10; d++) { scanf("%d", &a[d]); } m = a[0]; n = a[1]; for (int d = 2; d < 10; d++) { if (a[d] > m) { n = m; m = a[d]; } if (m >= a[d] && n < a[d]) { n = a[d]; } } int c = m + n; printf("%d", c); return 0; }
这段代码试图找出数组中最大的两个数并求和。但逻辑上有问题,导致结果可能不正确。

- 在第一个 if 中更新 m 后,紧接着的第二个 if 条件判断时,m 已经被更新为新的最大值,这会导致 n 的更新逻辑混乱。例如,当遇到比当前 m 更大的数时,应该把旧的 m 赋给 n,但你的代码中第二个 if 可能会错误地跳过或重复赋值。
- 初始时 m 和 n 分别设为 a[0] 和 a[1],但没有比较它们的大小。如果 a[0] 小于 a[1],那么 m 不是真正的最大值,后续逻辑会出错。