Online Compiler C

#include <stdio.h> #define n 10 int main() { int arr[n]; int min_a, max_a, min_b, max_b; for (int i = 0; i < n; i++) { scanf("%d", &arr[i]); } min_a = arr[0]; max_a = arr[0]; min_b = 0; max_b = 0; for (int i = 1; i < n; i++) { if (arr[i] < min_a) { min_a = arr[i]; min_b = i+1; } if (arr[i] > max_a) { max_a = arr[i]; max_b = i+1; } } printf("%d %d ", max_b, max_a); printf("%d %d ", min_b, min_a); return 0; }
这段代码的功能是:读取10个整数,找出其中的最大值和最小值,并输出它们的位置(从1开始计数)和数值。代码先读入数组,然后遍历数组更新最大值和最小值及其位置。

- 注意变量 `min_b` 和 `max_b` 的初始值。你给它们赋了0,但数组下标是从0开始的。如果第一个元素就是最小值或最大值,那么 `min_b` 或 `max_b` 会保持为0,但实际位置应该是1。想一想,当第一个元素就是最小值或最大值时,循环中的条件不会触发,所以位置变量不会被更新。

- 另外,代码中 `min_b = i+1` 和 `max_b = i+1` 是为了让位置从1开始计数。但初始值0与这个逻辑不一致。考虑如何让初始位置也符合从1开始计数的规则。