Online Compiler C

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

首先,`main` 函数中调用 `swap_min_max` 的方式是错误的。`*a` 并不是一个已定义的数组,而且函数期望接收数组首地址和长度,但这里只传了两个参数,且第一个参数不合法。

其次,`swap_min_max` 函数内部逻辑有误。变量 `p` 和 `q` 是在循环内部定义的,作用域仅限于循环体内,循环结束后这些变量就失效了,无法在后续代码中使用。同时,循环中使用了 `break`,导致找到第一个比 `max` 大的元素就停止,而不是找到真正的最大值位置。

- 在 `main` 中,你需要先定义一个实际的数组,然后调用函数时传入数组名(即数组首地址)和元素个数。
- 在 `swap_min_max` 函数中,`p` 和 `q` 应该在循环外部声明并初始化,循环中应该记录最大值和最小值的位置,而不是在找到第一个符合条件的元素后就 `break`。