Онлайн компилятор 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]); } 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); 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); return 0; }
这段代码的功能是:读入10个整数,找出其中的最小值和最大值,并输出它们的位置(从1开始计数)和数值。

代码整体思路正确,但有一个潜在问题需要注意。

- 变量 `q` 和 `p` 在声明时没有初始化。如果数组的第一个元素恰好就是最小值或最大值,那么对应的 `if` 条件不会执行,`q` 或 `p` 就会使用未初始化的值,导致输出错误。你需要确保在循环开始前给它们一个合理的初始值。
- 在第一个循环中,你使用了逗号表达式 `min = a[i],q=i+1;`,虽然语法上可行,但容易引起混淆。建议将两条语句分开写,用分号隔开,这样代码更清晰。