Online Compiler C

#include <stdio.h> int main() { int A[10]; int m, n,q1=1,q2=1; scanf("%d ", &A[1]); m = A[1]; n = A[1]; for(int i = 1; i < 10; i++) { scanf("%d ", &A[i]); if(A[i] >= m) { m = A[i]; } if(A[i] > m ){ q1 = i; } else { q1 = q1; } if(A[i] <= n) { n = A[i]; } if(A[i]<n ){ q2 = i; } else { q2 = q2; } } printf("%d %d %d %d", q1, m, q2 ,n); return 0; }
这段代码试图找出10个整数中的最大值和最小值及其位置,但存在几个问题。

代码中数组索引从1开始,但C语言数组索引从0开始,这会导致第一个元素未被正确存储。同时,变量q1和q2的更新逻辑有误,当遇到相等值时也会错误地更新位置。

- 数组索引应该从0开始,而不是1。当前代码中A[1]到A[9]被使用,但A[0]被跳过,且循环条件i<10会访问A[9](最后一个有效索引是9),但第一个scanf读入的值被存到了A[1],导致少读一个数。
- 最大值和最小值的位置更新条件需要仔细检查。当前代码中,当A[i]大于m时更新q1,但之前已经用>=更新了m,这意味着当遇到相等值时,m会更新但q1不会更新,这可能是你想要的。但更关键的是,当A[i]等于m时,q1应该保持不变还是更新?需要明确你的意图。同样的问题也出现在最小值的位置更新上。