Онлайн компилятор 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) { m = a[d];n = m } if (m > a[d] && n < a[d]) { n = a[d]; } } int c = m + n; printf("%d", c); return 0; }
这段代码试图找出数组中的最大值和第二大值,然后输出它们的和。但代码中存在逻辑错误,导致结果不正确。

- 在第一个if语句中,`n = m` 这一行缺少分号,这是一个语法错误,会导致编译失败。
- 当找到新的最大值时,原来的最大值应该成为第二大值,但代码中直接将 `n` 设为 `m`,没有考虑原来 `n` 的值。例如,如果数组是 [5, 3, 4],当遇到4时,最大值是5,第二大值应该是4,但代码中 `n` 被错误地更新。
- 第二个if条件 `m > a[d] && n < a[d]` 只在当前元素介于最大值和当前第二大值之间时更新,但初始时 `n` 被设为 `a[1]`,如果第二大值出现在更早的位置(比如 `a[0]` 是最大值,`a[1]` 不是第二大值),这个逻辑会漏掉。