使用指针交换两个数组中的最大值

## 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

```

你可能感兴趣的:(使用指针交换两个数组中的最大值)