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

#include <stdio.h> void swap_min_max(int *a, int n) { *a = a[0]; int min = a[0]; int max = a[0]; int p, q; for (int i = 1; i < n; i++) { if (max < a[i]) { max = a[i]; p = i; break; } } for (int i = 1; i < n; i++) { if (min > a[i]) { min = a[i]; q = i; break; } } a[q] = max; a[p] = min; } int main() { swap_min_max(*a, 6) }
这段代码的目的是在数组中交换最小值和最大值的位置,但存在多个错误。

首先,代码中 `swap_min_max` 函数的第一行 `*a = a[0];` 没有意义,它把数组第一个元素的值赋给了指针 `a` 指向的位置,这可能会破坏数组数据。另外,变量 `p` 和 `q` 没有初始化,如果循环中的 `if` 条件从未满足(例如数组所有元素相等),它们将保持未定义的值,导致后续数组访问越界。

其次,两个 `for` 循环中都使用了 `break`,这意味着一旦找到第一个比当前最大值大的元素就停止查找,这无法找到真正的最大值。同样,最小值查找也有相同问题。

最后,`main` 函数中调用 `swap_min_max(*a, 6)` 是错误的,`*a` 不是数组名,应该传入数组名。

- 检查 `swap_min_max` 函数中两个 `for` 循环的逻辑:`break` 语句导致循环只检查第一个符合条件的元素,而不是遍历整个数组找到真正的最大值和最小值。
- 注意 `main` 函数中调用函数的方式:`*a` 表示解引用指针,但这里你需要传入数组名(即数组首地址),并且需要先定义数组。