在线编译器 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; } if (*q>max) { q2 = 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]); } printf("\n"); swap_min_max(a,n); for(int i = 0;i< n; i++) { printf("%d ", b[i]); } return 0; }
这段代码的目的是找到数组中的最小值和最大值,并交换它们的位置。但目前的实现只找到了最小值和最大值的位置,并没有执行实际的交换操作。

- 在 `swap_min_max` 函数中,你找到了最小值的指针 `q1` 和最大值的指针 `q2`,但函数结束后没有对这两个指针指向的值进行交换。你需要添加交换 `*q1` 和 `*q2` 的代码。
- 注意,在循环中更新 `q1` 和 `q2` 时,你只更新了指针,但没有同时更新 `min` 和 `max` 的值。这会导致后续比较时 `min` 和 `max` 仍然是初始值,无法正确找到真正的最小值和最大值。你应该在更新指针的同时也更新 `min` 或 `max` 的值。