在线编译器 C

#include <stdio.h> int main() { int a[10]; int max1; int max2; int sum; for (int i = 0; i < 10; i++) { scanf("%d", &a[i]); } max1 = a[0]; for (int i = 0; i < 10; i++) { if (a[i] > max1) { max2 = max1; max1 = a[i]; } else if (max1 >= a[i] && max2 < a[i]) max2 = a[i]; } sum = max1 + max2; printf("%d", sum); return 0; }
这段代码的目的是从10个整数中找出最大的两个数,并计算它们的和。代码整体思路正确,但存在一个边界情况可能导致结果错误。

- 当数组的第一个元素就是最大值时,`max2` 没有被正确初始化。代码中 `max2` 没有赋初值,如果第一个元素是最大值,那么 `max2` 会保持未定义的值,导致后续比较出错。你需要考虑如何给 `max2` 一个合理的初始值,或者调整循环逻辑来确保 `max2` 总能被正确赋值。

- 在 `else if` 条件中,`max1 >= a[i]` 这个判断是多余的,因为进入 `else if` 已经意味着 `a[i]` 不大于 `max1`。但这不是主要问题,主要问题还是 `max2` 的初始化。