Online Compiler C

#include <stdio.h> int main() { int SIZE = 10; int A[SIZE]; int i; int max_idx, max_val, min_idx, min_val; for (i = 0; i < SIZE; i++) { scanf("%d", &A[i]); } max_val = A[0]; min_val = A[0]; max_idx = 0; min_idx = 0; for (i = 1; i < SIZE; i++) { if (A[i] > max_val) { max_val = A[i]; max_idx = i + 1; } if (A[i] < min_val) { min_val = A[i]; min_idx = i + 1; } } printf("%d%d%d%d", max_idx, max_val, min_idx, min_val); return 0; }
这段代码的功能是:读入10个整数,找出最大值和最小值及其位置(位置从1开始计数),然后依次输出最大值的位置、最大值、最小值的位置、最小值。

代码中存在一个逻辑错误:在更新最大值和最小值时,索引记录方式不一致。当找到新的最大值或最小值时,你使用 `i + 1` 来记录位置,但初始索引 `max_idx` 和 `min_idx` 却设为0。这会导致如果最大值或最小值恰好是第一个元素(A[0]),输出的位置会是0而不是1。

- 检查初始索引值:如果第一个元素就是最大值或最小值,它的位置应该是1,但你的初始索引是0,这会导致输出错误。
- 考虑循环中更新索引的方式:当发现新的最大值或最小值时,你用了 `i + 1`,但初始值没有用同样的规则,这造成了不一致。