在线编译器 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>max2) { max2 = max1; max1 = arr[i]; } } return 0; }
这段代码试图找出数组中的最大值和第二大值,但存在逻辑错误。它先读入10个整数,然后初始化max1和max2为第一个元素,接着在循环中尝试更新这两个值。

- 条件判断 `arr[i] > max1>max2` 是错误的写法。在C语言中,`max1>max2` 会先被计算为0或1,然后与 `arr[i]` 比较,这完全不是你想要的效果。你需要分别比较 `arr[i]` 与 `max1` 和 `max2` 的关系。
- 当 `arr[i]` 大于 `max1` 时,应该更新 `max2` 为原来的 `max1`,再更新 `max1`。但当前代码没有处理 `arr[i]` 介于 `max1` 和 `max2` 之间的情况,即如果 `arr[i]` 只大于 `max2` 而不大于 `max1`,也需要更新 `max2`。