Online Compiler C

#include <stdio.h> void swap_min_max(int *a, int n) { int *q1,*q2; q1=a; q2=a; int min = *q1, max = *q2; int *q = a; for(int i = 0; i < n;i++) { if (*q<min) { q1 = q; min = *q; } if (*q>max) { q2 = q; max = *q; } q++; } int *tem; tem = q1; q1 = q2; q2 = tem; } 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]); } printf("\n"); swap_min_max(a,n); for(int i = 0;i< n; i++) { printf("%d ", b[i]); } return 0; }
这段代码试图实现一个函数 `swap_min_max`,目的是交换数组中的最小值和最大值。但代码存在逻辑错误,导致交换没有实际生效。

函数 `swap_min_max` 中,你找到了最小值和最大值的位置(指针 `q1` 和 `q2`),但最后只交换了指针本身,而没有交换指针所指向的数组元素的值。因此,数组 `b` 的内容并没有改变。

- 你需要在函数中交换 `*q1` 和 `*q2` 的值,而不是交换指针 `q1` 和 `q2` 本身。
- 注意:`int *tem;` 声明了一个指针,但你需要一个临时变量来存储整数值,而不是指针。