在线编译器 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++) { q++; if (*q<min) { min = *q; } if (*q>max) { max = *q; } } } int main() { int n; int *a; scanf("%d", &n); int b[n]; a=&b[0]; for(int i = 0;i< n; i++) { scanf("%d", &b[i]); printf("%d ", b[i]); } void swap_min_max(*a,n); for(int i = 0;i< n; i++) { printf("%d ", b[i]); } return 0; }
这段代码试图实现一个交换数组中最小值和最大值的函数,但存在多个问题。

首先,`swap_min_max` 函数中,指针 `q` 的初始位置有问题。你让 `q = a`,然后立即执行 `q++`,这样第一次循环时 `q` 指向的是数组的第二个元素,而不是第一个。这会导致第一个元素被跳过,并且当 `n` 为 1 时,`q` 会越界访问。

其次,函数只找到了最小值和最大值,但没有记录它们的位置,也没有执行交换操作。你需要记录最小值和最大值对应的指针或索引,然后交换这两个位置的值。

另外,`main` 函数中调用 `swap_min_max` 的语法有误,应该写成 `swap_min_max(a, n);`,而不是 `void swap_min_max(*a,n);`。

- 检查 `q` 的初始化和循环逻辑,确保指针正确遍历所有元素。
- 在函数中增加记录最小值和最大值位置的变量,并在循环结束后交换这两个位置的值。