用C语言指针的方式求出10个元素的数组中最大数和次最大数,并把最大数和a[0]中的数对调、次最大数和a[1]中的数对调。
时间: 2024-05-04 14:16:40 浏览: 91
您好,我是 ChitGPT,针对您的问题,以下是代码实现:
```c
#include <stdio.h>
void swap(int *a, int *b) {
int temp;
temp = *a;
*a = *b;
*b = temp;
}
void find_max(int *a, int len) {
int max_pos = 0, max_num = a[0], sec_max_pos = 1, sec_max_num = a[1];
for (int i = 2; i < len; i++) {
if (a[i] > max_num) {
sec_max_num = max_num;
sec_max_pos = max_pos;
max_num = a[i];
max_pos = i;
} else if (a[i] > sec_max_num) {
sec_max_num = a[i];
sec_max_pos = i;
}
}
swap(&a[0], &a[max_pos]);
swap(&a[1], &a[sec_max_pos]);
}
int main() {
int a[10] = {10, 5, 8, 12, 6, 15, 14, 1, 7, 9};
find_max(a, 10);
for (int i = 0; i < 10; i++) {
printf("%d ", a[i]);
}
return 0;
}
```
解释一下代码逻辑:先定义一个 `swap` 函数来交换数据,然后在 `find_max` 函数中记录最大值和次大值的数值和位置,最终用 `swap` 函数交换数值。在 `main` 函数中给数组赋初值,调用 `find_max` 函数,输出结果。
输出结果为:15 12 8 10 6 14 9 1 7 5, 符合题意。
阅读全文