Онлайн компилятор 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] > min) { max = a[i],p=i+1; } } printf("%d ",p); printf("%d ", max); return 0; }
这段代码的功能是:读取10个整数,找出最小值及其位置(从1开始计数),然后尝试找出最大值及其位置。但代码中存在逻辑错误。

- 在找最大值的循环中,条件写成了 `a[i] > min`,这会导致它只比较比最小值大的数,而不是找出真正的最大值。应该比较当前最大值。
- 变量 `q` 和 `p` 的更新使用了逗号表达式,虽然语法正确,但可读性差,建议改用分号。
- 如果数组中有多个相同的最小值或最大值,代码只会记录最后一个出现的位置,因为每次满足条件都会更新位置。