Online Compiler C

#include <stdio.h> enum { SIZE = 10 }; int main() { int A[SIZE]; int max_max, max; int sum = 0; for (int i = 0; i < SIZE; i++) { scanf("%d", &A[i]); } max_max = A[0]; max = A[0]; for (int i = 0; i < SIZE; i++) { if (max_max < A[i]) { max_max = A[i]; } } for (int i = 0; i < SIZE; i++) { if (max == max_max) { max = A[1]; } while (max < max_max) { if (max < A[i]) { max = A[i]; } } } sum=max_max+max; printf("%d", sum); return 0; }
这段代码试图找出数组中的最大值和第二大值,并计算它们的和。但逻辑上有问题,导致无法正确找到第二大值。

- 变量 `max` 的初始值设置不当。你让 `max` 一开始等于 `A[0]`,但之后在循环中又试图用 `A[1]` 来重置它,这样如果最大值恰好是 `A[0]` 或 `A[1]`,就会出错。你需要思考如何确保 `max` 始终是第二大值,而不是依赖固定的数组下标。

- 第二个循环中的 `while` 循环会导致死循环。因为 `max` 和 `max_max` 的关系在循环内部没有改变,一旦进入 `while` 就会永远出不来。你应该只用 `if` 来更新 `max`,并且需要区分当前元素是否等于最大值,以避免把最大值也当作第二大值。