Онлайн компилятор C

#include <stdio.h> int main() { int a[10]; int max1; int max2; int max3; 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) { max1 = a[i]; } } max2 = a[0]; for (int i = 0; i < 10; i++) { if (a[i] > max3) { max3 = a[i]; a[i]=0; } if (a[i] > max2 ) { max2 = a[i]; } } sum = max1 + max2; printf("%d ", sum); return 0; }
这段代码试图找出数组中最大的两个数并求和,但存在逻辑错误。代码先找出最大值max1,然后在第二个循环中试图找出第二大值max2,但实现方式有问题。

- 在第二个循环中,你使用了未初始化的变量max3,这会导致未定义行为。变量max3没有赋初值就被用于比较。
- 你试图通过将最大值置零来找出第二大值,但置零操作和比较的顺序有误。当a[i]大于max3时,你将其置零,但此时max3本身没有意义,而且置零后会影响后续比较。正确的思路应该是先找出最大值,然后排除它再找第二大值,或者在一次遍历中同时记录最大和第二大。