练习四】编写函数 exchange:把数组 a 中的最大数和最小数交换(设 a 中无重复元素)。 在主函数中输入 n 个整数,调用函数 exchange 进行交换,输出运行结果。 【函数原型】int exchange(int *a, int n);C语言
时间: 2024-10-10 16:11:42 浏览: 55
在C语言中,你可以通过遍历数组找到最大值和最小值,然后利用指针操作将它们互换。下面是一个简单的`exchange`函数的实现示例:
```c
#include <stdio.h>
// 函数声明
int exchange(int* a, int n);
// 主函数
int main() {
int n;
printf("请输入数组的长度n:");
scanf("%d", &n);
// 为交换预留两个变量,假设max用于存储最大值,min用于存储最小值
int max = a[0], min = a[0];
int* a = (int*)malloc(n * sizeof(int)); // 动态分配内存
// 输入n个整数到数组a
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
if (i == 0 || a[i] > max) { // 第一次迭代或当前元素大于已知的最大值
max = a[i];
} else if (i == 0 || a[i] < min) { // 第一次迭代或当前元素小于已知的最小值
min = a[i];
}
}
// 找到最大值和最小值的索引
int max_index = -1, min_index = -1;
for (int i = 0; i < n; i++) {
if (a[i] == max && max_index == -1) {
max_index = i;
} else if (a[i] == min) {
min_index = i;
}
}
// 交换最大值和最小值
if (max_index != -1 && min_index != -1) {
int temp = a[max_index];
a[max_index] = a[min_index];
a[min_index] = temp;
}
// 输出交换后的数组
printf("交换后的数组:");
for (int i = 0; i < n; i++) {
printf("%d ", a[i]);
}
printf("\n");
free(a); // 释放动态分配的内存
return 0;
}
// 函数实现:交换数组中的最大值和最小值
int exchange(int* a, int n) {
// 实际上这里不需要独立的exchange函数,因为main函数已经完成了这个任务
// 但在纯函数的形式下,可以这么设计,这里不做实际的交换操作
return 0;
}
```
注意:此代码示例仅作为教学目的,因为`exchange`函数在`main`中已经完成数组的交换操作,所以`exchange`函数在这里实际上是多余的。在实际项目中,我们会倾向于将其封装为单独的函数。
阅读全文