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

#include <stdio.h> void swap(int *x,int *y) { *x^=*y; *y^=*x; *x^=*y; return ; } void swap_min_max(int *a, int n) { int mx=a[0],nmx=0,mi=a[0],nmi=0; for(int i=1;i<n;i++) { if(*(a+i)>mx){ mx=*(a+i);nmx=i; } if(*(a+i)<mi){ mi=*(a+i);nmi=i; } } swap(a+nmx,a+nmi); return ; } int main() { int a[10]={0,-2,2,2,0}; swap_min_max(a,5); for(int i=0;i<5;i++) printf("%d ",a[i]); return 0; }
这段代码的功能是:先找到数组中的最大值和最小值,然后交换它们的位置。代码中使用了异或运算来实现交换,并尝试用指针遍历数组。

- 你的 `swap` 函数使用了异或交换,但这种方法在 `x` 和 `y` 指向同一个地址时会有问题。当最大值和最小值在同一个位置时(比如数组所有元素相等),`swap` 会把这个位置的值变成0。你需要考虑这种情况,或者改用更安全的交换方式。

- 在 `swap_min_max` 函数中,你初始化 `mx` 和 `mi` 都为 `a[0]`,但 `nmx` 和 `nmi` 都设为0。如果数组只有一个元素,或者最大值和最小值索引相同,交换就会出错。你需要确保在交换时,如果最大值和最小值是同一个元素,就不进行交换。