Онлайн компилятор 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, 6) }
这段代码的目的是在数组中交换最小值和最大值的位置。但代码中存在几个问题。

首先,在 `main` 函数中调用 `swap_min_max` 时,你传递了 `*a` 而不是 `a`,并且数组大小写成了 `6` 而不是 `5`。`*a` 是数组第一个元素的值,而不是数组的指针。另外,`main` 函数末尾的 `}` 前面缺少了一个分号。

其次,`swap_min_max` 函数内部的逻辑也有问题。你在两个 `for` 循环中都使用了 `break`,这会导致循环在找到第一个比当前最大值大的元素后就停止,而不是遍历整个数组找到真正的最大值和最小值。

- 检查 `main` 函数中调用 `swap_min_max` 的方式,确保传递的是数组的指针和正确的数组长度。
- 思考 `swap_min_max` 函数中 `break` 语句的作用,是否需要它来找到整个数组中的最大值和最小值?