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

#include <stdio.h> void swap_min_max(int *a, int n) { int min = 0; int max = 0; for (int i = 1; i < n; i++) { if (a[max] < a[i]) { max = i; break; } } for (int i = 1; i < n; i++) { if (a[min] > a[i]) { min = i; break; } } int temp; temp = a[min]; a[min] = a[max]; a[max] = temp; } int main() { int a[5] = {1, 2, 3, 4, 5}; swap_min_max(a, 5); }
这段代码的目的是找到数组中的最小值和最大值,并交换它们的位置。但代码中存在逻辑错误,导致无法正确找到最小值和最大值。

- 第一个循环中,当找到第一个比当前最大值大的元素时,就立即用break退出循环,这样只会检查到第一个符合条件的元素,而不是遍历整个数组找到真正的最大值。
- 第二个循环存在同样的问题,找到第一个比当前最小值小的元素就退出,无法保证找到全局最小值。
- 由于break的使用,两个循环都只比较了数组的前几个元素,没有完整遍历整个数组。