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]; 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]; 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` 和 `q` 在声明时没有初始化,如果数组的第一个元素恰好就是最大值或最小值,那么对应的位置变量将不会被赋值,导致输出未定义的值。

- 考虑一下,当最大值或最小值出现在数组的第一个位置时,循环中的条件判断是否成立?此时 `p` 和 `q` 应该是什么值?
- 思考如何确保 `p` 和 `q` 在初始情况下就有正确的默认值,比如在循环开始前就设置好它们。