在线编译器 C

#include <stdio.h> enum { SIZE = 10 }; int main() { int A[SIZE]; int max, min; for (int i = 0; i < SIZE; i++) { scanf("%d", &A[i]); } max = A[0]; min = A[0]; for (int i = 0; i < SIZE; i++) { if (max <= A[i]) { max = A[i]; } } A[i] = max; printf("%d %d ", i, max); for (int i = 0; i < SIZE; i++) { if (min >= A[i]) { min = A[i]; } } A[i] = min; printf("%d %d ", i, min); return 0; }
这段代码试图找出数组中的最大值和最小值,但存在几个问题。代码先读取10个整数存入数组,然后分别寻找最大值和最小值,最后试图输出它们的索引和值。

- 第13行和第19行中,`A[i] = max;` 和 `A[i] = min;` 是错误的。这里的 `i` 在循环结束后已经超出作用域(在C99中,`for` 循环内定义的 `i` 在循环外不可用),而且你并不需要把最大值或最小值赋值回数组。这两行应该删除。

- 第14行和第20行中,你试图打印 `i` 作为最大值或最小值的索引,但这里的 `i` 是循环结束后的值(如果编译通过,它将是 `SIZE`),而不是最大值或最小值所在的位置。你需要记录最大值和最小值出现时的索引,例如在循环内用另一个变量保存 `i` 的值。