在线编译器 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 = 1, i_min = 1; 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_max` 和 `i_min` 的初始值设为1,这假设了第一个元素就是最大值和最小值。但如果在循环中从未更新过它们(比如所有元素都相等),这个初始值是正确的。不过,如果数组的第一个元素确实是最大值或最小值,那么循环中不会更新 `i_max` 或 `i_min`,此时它们仍然保持为1,这没问题。但要注意,如果数组为空(这里SIZE固定为10,所以不会空),初始值1是合理的。

- 代码中分别用两个独立的循环找最大值和最小值,这是可行的,但效率上可以合并为一个循环。不过这不是错误。

主要需要检查的是:当最大值或最小值出现多次时,你的代码会记录最后一次出现的位置(因为只有 `if (max < A[i])` 这样的条件才会更新,等于时不更新)。这是否符合题目要求?如果题目要求记录第一次出现的位置,那么你的代码是正确的;如果要求记录最后一次,则需要修改条件。请确认题目要求。