Онлайн компилятор C

#include <stdio.h> int main() { int A[10]; int m, n,q1=10,q2=10; scanf("%d ", &A[9]); m = A[9]; n = A[9]; for(int i = 8; i >= 0; i--) { scanf("%d ", &A[i]); int j = i; if(A[i] >= m) { m = A[i]; q1 = i+1 ; } if(A[j] <= n) { n = A[j]; q2 = j+1 ; } } printf("%d %d %d %d", q2, m, q1 ,n); return 0; }
这段代码试图读取10个整数,找出其中的最大值和最小值,并记录它们的位置(从1开始计数)。但代码中存在一些逻辑问题。

- 代码先读取了一个数存入A[9],然后从A[8]开始倒序读取剩余的数。这种读取顺序会导致数组元素与输入顺序不一致,影响位置记录的正确性。
- 变量q1和q2分别记录最大值和最小值的位置,但初始值都设为10,而最大值和最小值最初都设为A[9]。如果第一个数既是最大又是最小,位置记录可能不准确。
- 循环中同时更新最大值和最小值,但比较逻辑使用了不同的索引(i和j),实际上j和i是相同的,所以没有区别,但写法容易让人困惑。

提示:
- 思考一下:如果输入顺序是1,2,3,...,10,那么数组A中每个位置存储的是哪个输入值?位置编号应该对应输入顺序还是数组下标?
- 检查当最大值或最小值出现在多个位置时,你的代码会记录哪个位置?题目要求记录第一次出现的位置还是最后一次?