Online Compiler C

#include <stdio.h> int main() { int n = 10, c = 0, d = 0; 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 + 1; } } max = a[0]; for (int p = 0; p < n; p++) { if (a[p] > max) { max = a[p]; d = p + 1; } } printf("%d %d %d %d", d, max, c, min); return 0; }
这段代码的功能是:读取10个整数,找出其中的最大值和最小值,并输出它们的位置(从1开始计数)和数值。最后输出顺序是:最大值位置、最大值、最小值位置、最小值。

代码中存在一个逻辑问题:

- 在寻找最小值时,变量 `c` 记录的是最小值的位置(索引+1)。但初始值 `c = 0` 意味着如果第一个元素就是最小值,`c` 不会被更新,因为 `a[i] < min` 条件不成立(相等时不更新)。同样,最大值的位置 `d` 也有相同的问题。

- 当数组的第一个元素就是最小值或最大值时,对应的位置变量会保持为0,而不是正确的1。