Online Compiler C

#include <stdio.h> int main() { int A[10]; int m, n,q1=1,q2=1; scanf("%d ", &A[0]); m =A[0]; n = A[0]; for(int i = 1; i < 10; i++) { scanf("%d ", &A[i]); if(A[i] < m) { m = A[i]; q1 = i+ 1 ; } if(A[i] > n) { n = A[i]; q2 = i+1; } } printf("%d %d %d %d", q2,n,q1 ,m); return 0; }
这段代码的功能是:读取10个整数,找出其中的最大值和最小值,并输出它们的值和位置(从1开始计数)。代码逻辑基本正确,但存在一些细节问题。

- 代码中 `scanf` 格式字符串里有多余的空格,这可能导致输入行为不符合预期。`scanf` 中的空格会匹配任意数量的空白字符(包括空格、换行等),虽然通常不会出错,但建议去掉多余的空格,使格式更清晰。
- 变量 `q1` 和 `q2` 初始值设为1,但如果在循环中最大值或最小值出现在第一个元素(索引0)时,它们会被正确更新吗?实际上,循环从 `i=1` 开始,所以第一个元素的值已经赋给了 `m` 和 `n`,但 `q1` 和 `q2` 初始为1,这表示第一个元素的位置是1,这是正确的。不过,如果所有元素都相等,`q1` 和 `q2` 会保持为1,这符合预期。