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

#include <stdio.h> #define n 10 int main() { int arr[n]; int max1, max2; for (int i = 0; i < n; i++) { scanf("%d", &arr[i]); } max1 = arr[0]; max2 = arr[0]; for (int i = 1; i < n; i++) { if (arr[i] > max1&&max1>max2) { max2 = max1; max1 = arr[i]; } } printf("%d",max1+max2) return 0; }
这段代码的目的是从10个整数中找出最大的两个数,并输出它们的和。但代码中存在逻辑错误,导致无法正确找出第二大的数。

- 在循环中,条件 `arr[i] > max1 && max1 > max2` 有问题。当 `max1` 和 `max2` 初始值相同时,`max1 > max2` 永远为假,所以永远不会更新 `max2`。你需要重新思考如何正确更新两个最大值,特别是当新数介于当前最大值和第二大值之间时的情况。

- 另外,注意最后一行 `printf` 语句末尾缺少分号,这是一个语法错误。