Online Compiler C

#include <stdio.h> void swap_min_max(int *a, int n) { if (n <= 0) return; int min = 0; int max= 0; int x; for (int i = 1; i < n; ++i) { if (a[i] <a[min]) {a[min]=a[i];} for (int i = 1; i < n; ++i) { if (a[i] >a[max]) {max=a[i];} } int temp = a[min]; a[min] = a[max]; a[max] = temp; } int main() { printf("s"); return 0; }
这段代码试图实现一个函数 `swap_min_max`,它应该找到数组中的最小值和最大值,并交换它们的位置。但代码中存在逻辑错误。

- 你在循环内部错误地修改了数组元素 `a[min] = a[i]`,这实际上是在覆盖最小值,而不是记录最小值的位置。你应该只更新 `min` 这个索引变量,而不是修改数组内容。
- 两个 `for` 循环嵌套在了同一个外层循环里,导致逻辑混乱。实际上,你应该先独立地找到最小值和最大值的索引,然后再进行交换。

- 检查 `min` 和 `max` 的初始值是否合理,以及交换操作是否在循环结束后执行一次即可。