在线编译器 C

#include <stdio.h> void swap_min_max(int *a, int n) { int min = *a, max = *a,amax,amin; int *q = a; for(int i = 0; i < n;i++) { a++; if (*a<min) { min = *a; } if (*a>max) { max = *a; } } } int main() { int n; int *a; scanf("%d", &n); int b[n]; a=&b; for(int i = 0;i< n; i++) { scanf("%c", &b[i]); printf("%c ", b[i]); } void swap_min_max(*a,n); for(int i = 0;i< n; i++) { printf("%c ", b[i]); } return 0; }
这段代码试图实现一个交换数组中最小值和最大值的函数,但存在多个问题。代码中使用了字符数组(`%c`)来读取整数,并且指针操作和函数调用都有错误。

- 在 `swap_min_max` 函数中,你让指针 `a` 不断自增,但这样会丢失数组的起始地址。你应该使用一个单独的指针或索引来遍历数组,同时保留 `a` 指向数组开头,以便后续交换。
- 在 `main` 函数中,`a=&b;` 是错误的,因为 `b` 是数组名,它本身就是地址,不需要取地址。另外,`void swap_min_max(*a,n);` 的调用语法不正确,应该直接写 `swap_min_max(a, n);`。同时,你使用 `%c` 读取输入,但题目可能期望整数,这会导致输入格式不匹配。