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

#include <stdio.h> enum { SIZE = 10 }; int main() { int A[SIZE]; int max, min; for (int i = 0; i < SIZE; i++) { scanf("%d", &A[i]); } max = A[0]; min = A[0]; int i_max = 0, i_min = 0; for (int i = 0; i < SIZE; i++) { if (max < A[i]) { max = A[i]; i_max = i+1; } } printf("%d %d ", i_max, max); for (int i = 0; i < SIZE; i++) { if (min > A[i]) { min = A[i]; i_min=i+1; } } printf("%d %d ", i_min, min); return 0; }
这段代码的功能是:读取10个整数存入数组,然后分别找出最大值和最小值及其位置(位置从1开始计数),最后输出最大值的位置和值、最小值的位置和值。

代码中有一个逻辑问题需要注意:

- 在找最大值和最小值的循环中,你分别用 `i+1` 来记录位置。但这样记录的位置是从1开始的,而数组下标是从0开始的。如果你希望位置从1开始,这个做法本身没问题,但要注意在后续使用位置时保持一致。

- 更关键的问题是:你用了两个独立的循环分别找最大值和最小值,这本身是可行的。但代码中找最小值的循环里,`i_min=i+1;` 这一行缺少了空格,虽然不影响编译,但建议保持代码风格一致。

- 另外,你的代码没有处理输入错误的情况(比如输入非数字),不过对于基础练习来说可以接受。

提示:
1. 检查一下,如果数组中有多个相同的最大值或最小值,你的代码会记录哪个位置?是否符合题目要求?
2. 想一想,能否只用一个循环同时找出最大值和最小值,从而减少代码重复?