## 1 题目
> 函数:max()、swap()
>
> 功能:使用指针交换两个数组中的最大值
>
> 描述:
>
> 输入两个五个元素的数组,使用指针将两个数组中的最大值进行交换
>
> 并输出最大值交换之后的两个数组
## 2 思路
以下都使用指针来进行实现
1. 找到最大值
创建 int *max(int *a) 函数,指针指向找出的最大值
2. 交换最大值
创建 void swap(int *p1, int *p2) 找到的两个最大值进行交换,即进行指针指向的内容进行交换
## 3 代码
```c
#include
#include
#define N 5
/**
函数:max()、swap()
功能:使用指针交换两个数组中的最大值
描述:
输入两个五个元素的数组,使用指针将两个数组中的最大值进行交换
并输出最大值交换之后的两个数组
**/
int * max(int *a) {
int * p = a;
for (int i = 1; i < N; ++i) {
if (*(a+i) > *p)
p = a+i;
}
return p;
}
void swap(int *p1, int *p2) {
*p1 = *p1 ^ *p2;
*p2 = *p1 ^ *p2;
*p1 = *p1 ^ *p2;
}
int main(int argc, char const *argv[]) {
int a[N], b[N];
int * max_a, * max_b;
// 1. 初始化两个数组
printf("输入数组 a 的5个数字:\n");
for (int i = 0; i < N; ++i) {
scanf("%d", (a+i));
}
printf("输入数组 b 的5个数字:\n");
for (int j = 0; j < N; ++j) {
scanf("%d", (b+j));
}
printf("\n数组 a 的5个数字为: ");
for (int i = 0; i < N; ++i) {
printf("%d ", *(a+i));
}
printf("\n数组 b 的5个数字为: ");
for (int j = 0; j < N; ++j) {
printf("%d ", *(b+j));
}
// 2. 找出各数组中的最大值
max_a = max(a);
max_b = max(b);
printf("\n数组 a 的最大值:%d", *max_a);
printf("\n数组 b 的最大值:%d", *max_b);
// 3. 对两个最大值进行交换
swap(max_a, max_b);
printf("\n交换最大值之后的数组 a 的5个数字为:");
for (int i = 0; i < N; ++i) {
printf("%d ", *(a+i));
}
printf("\n交换最大值之后的数组 b 的5个数字为:");
for (int j = 0; j < N; ++j) {
printf("%d ", *(b+j));
}
}
```
示例结果:
```shell
$ gcc ex026.c -o demo
yaojianguodeMacBook-Pro:C语言100题集合代码 yaojianguo$ ./demo
输入数组 a 的5个数字:
1
3
5
7
9
输入数组 b 的5个数字:
2
4
6
8
10
数组 a 的5个数字为: 1 3 5 7 9
数组 b 的5个数字为: 2 4 6 8 10
数组 a 的最大值:9
数组 b 的最大值:10
交换最大值之后的数组 a 的5个数字为:1 3 5 7 10
交换最大值之后的数组 b 的5个数字为:2 4 6 8 9
```