Online Compiler C

#include <stdio.h> int main() { int SIZE = 10; int i; int max1, max2; int a[SIZE]; int cymma; for (i = 0; i < SIZE; i++) { scanf("%d", &a[i]); } if (a[0] > a[1]) { max1 = a[0]; max2 = a[1]; } else { max1 = a[1]; max2 = a[2]; } for (i = 2; i < SIZE; i++) { if (a[i] > max1) { max1 = a[i]; max2 = max1; } else if (a[i] > max2) { max2 = a[i]; } cymma = max1 + max2; printf("%d", cymma); } } return 0; }
这段代码试图找出数组中的两个最大值并计算它们的和,但存在逻辑错误。

- 在初始化 `max1` 和 `max2` 时,如果 `a[0] <= a[1]`,你错误地将 `max2` 赋值为 `a[2]`,这跳过了 `a[0]` 且可能访问未初始化的元素(如果数组只有两个元素)。
- 在循环中,当 `a[i] > max1` 时,你把 `max2` 赋值为 `max1` 的旧值,但顺序写反了:应该先保存旧 `max1` 到 `max2`,再更新 `max1`。当前代码导致 `max1` 和 `max2` 变成相同值。
- 每次循环都打印 `cymma`,这会在每次找到更大值时都输出一次,而不是只在最后输出一次。