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

#include <stdio.h> void swap_min_max(int *a, int n) { int min = *a, max = *a; int *q = a; for(int i = 0; i < n;i++) { if (*q<min) { min = *q; } if (*q>max) { max = *q; } q++; } } int main() { int n; int *a; scanf("%d", &n); int b[100]; a=&b[0]; for(int i = 0;i< n; i++) { scanf("%d", &b[i]); printf("%d ", b[i]); } swap_min_max(a,n); for(int i = 0;i< n; i++) { printf("%d ", b[i]); } return 0; }
这段代码试图实现一个交换数组中最小值和最大值位置的函数,但存在几个关键问题。

函数 `swap_min_max` 找到了最小值和最大值,但没有记录它们的位置(指针或索引),也没有执行实际的交换操作。因此调用后数组没有变化。

- 在 `swap_min_max` 中,你需要记录最小值和最大值对应的指针或索引,而不仅仅是它们的数值。目前代码只保存了数值 `min` 和 `max`,但不知道它们在哪里。
- 找到最小值和最大值的位置后,需要交换这两个位置上的值。注意交换时要考虑最小值和最大值在同一个位置的特殊情况。