Online Compiler C

#include <stdio.h> int main() { int n = 10,c,d; int a[10]; int min, max; for (int i = 0; i < n; i++) { scanf("%d", &a[i]); } min = a[0]; for (int i = 0; i < n; i++) { if (a[i] < min) { min = a[i]; c = i; } } max = a[0]; for (int p = 0; p < n; p++) { if (a[p] > max) { max = a[p]; d = p; } } printf("%d %d %d %d", d, max, i, min); return 0; }
这段代码的目的是:输入10个整数,找出其中的最小值和最大值,并记录它们的位置(索引)。但代码中存在一些错误。

- 变量 `c` 和 `d` 用于记录最小值和最大值的索引,但 `c` 在找到最小值时赋值,而 `d` 在找到最大值时赋值。然而在最后的 `printf` 中,你使用了 `d`、`max`、`i` 和 `min`。注意 `i` 是第一个循环中定义的循环变量,在循环结束后它的值是10,而不是最小值的索引。你应该使用 `c` 来输出最小值的索引,而不是 `i`。

- 变量 `c` 和 `d` 没有初始化。如果数组的第一个元素就是最小值或最大值,那么对应的索引就不会被更新,导致 `c` 或 `d` 的值不确定。你应该在初始化 `min` 和 `max` 时也初始化 `c` 和 `d` 为0。