Online Compiler C

#include <stdio.h> int main() { int a[10]; int min; int max; int q; int p; for (int i = 0; i < 10; i++) { scanf("%d", &a[i]); } max = a[0];p=1; for (int i = 0; i < 10; i++) { if (a[i] > max) { max = a[i]; p = i + 1; } } printf("%d ", p); printf("%d ", max); min = a[0];q=1; for (int i = 0; i < 10; i++) { if (a[i] < min) { min = a[i]; q = i + 1; } } printf("%d ", q); printf("%d ", min); return 0; }
这段代码的功能是:读取10个整数,找出其中的最大值和最小值,并输出它们的位置(从1开始计数)和数值。

代码逻辑基本正确,但有一个细节需要注意:

- 在初始化最大值和最小值时,你分别设置了 `p=1` 和 `q=1`,这表示假设第一个元素就是最大值和最小值的位置。但如果在循环中找到了更大的或更小的值,位置会更新。这个做法本身没问题,但要注意:如果数组的第一个元素恰好是最大值或最小值,那么位置就是1,这是正确的。

- 不过,你的代码在初始化 `max` 和 `min` 时都用了 `a[0]`,但 `p` 和 `q` 的初始值应该与这个假设一致。你目前的做法是合理的,但可以思考一下:如果数组为空(虽然这里不会),或者你想让代码更简洁,是否有更统一的写法?

- 另外,你的输出顺序是先输出最大值的位置和数值,再输出最小值的位置和数值。请确认题目要求是否如此。