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个整数中的最大值和最小值及其位置,但存在逻辑错误。

- 数组索引从0开始,但代码从A[1]开始使用,跳过了A[0]。
- 在更新最大值时,条件`if(A[i] >= m)`已经成立,但内部又检查`if(A[i] > m)`,这永远不会为真,所以位置q1不会正确更新。
- 最小值部分的逻辑有同样的问题。
- 变量q1和q2初始值设为1,但若第一个数就是最大或最小值,位置记录可能不准确。

- 检查数组索引的使用,C语言数组第一个元素是A[0]。
- 思考如何正确记录最大值和最小值第一次出现的位置,注意更新最大值时,只有当新值大于当前最大值时才更新位置。