Онлайн компилятор C

#include <stdio.h> int main() { const int N = 10; int A[N]; int max_index,min_index; for (int i = 0; i < N; i++) { scanf("%d", &A[i]); } int min = A[0]; int max = A[0]; for (int i = 0; i < N; i++) { if (A[i] < min) { min = A[i]; min_index=i; } for (int i = 0; i < N; i++) { if (A[i] > max) { max = A[i]; max_index=i; } } printf("%d %d %d %d\n", max_index+1,max,min_index+1,min); return 0; }
这段代码的目的是读取10个整数,找出最大值和最小值及其位置(索引从1开始),然后输出。但代码中存在逻辑错误。

- 代码中嵌套了两个for循环,导致内层循环在每次外层循环迭代时都会重新执行,这不是寻找最大值和最小值的正确方式。最大值和最小值应该分别用独立的循环来查找,或者在一个循环中同时更新。
- 变量`max_index`和`min_index`在使用前没有初始化,如果数组的第一个元素就是最大值或最小值,那么对应的索引变量可能未被赋值,导致输出未定义的值。

- 考虑将寻找最小值和最大值的逻辑分开,或者在一个循环中同时更新最小值和最大值及其索引,避免循环嵌套。
- 确保在循环开始前给`max_index`和`min_index`赋初始值,比如都设为0,这样即使第一个元素就是最值,索引也能正确输出。