//输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换,并输出对换后的10个数
#include<stdio.h>
void exchange(int* arr, int n)//形参传入数组和数组长度
{
int* p = arr;
int *min = arr;
int *max = arr;
int i;
void swap(int*, int*);//声明swap(),因为这个函数的定义在后面
for (i = 0; i < n; i++)
{
if (*min > *(p + i))
min = (p + i);//min指针指向最小元素
}
for (i = 0; i < n; i++)
{
if (*max < *(p + i))
max = (p + i);//max指针指向最大元素
}
if (*max == *p && *min == *(p + n - 1))//如果最大元素在arr[0]且最小元素在arr[9],只需要交换一次
swap(min, max);
else
{
swap(p, min);
swap(p + n - 1, max);
}
}
void swap(int* a, int* b)
{//交换a,b所指变量的值
int temp;
temp = *a;
*a = *b;
*b = temp;
}
int main()
{
int arr[10];
int i;
for (i = 0; i < 10; i++)
{//输入数组数据
scanf_s("%d", &arr[i]);
}
exchange(arr, 10);//调用函数
for (i = 0; i < 10; i++)
{
printf("%-3d", arr[i]);
}
return 0;
}
程序说明
主函数创建了一个数组,并使用for循环为其输入数据。之后调用函数exchange(),最后再用for循环输出数组元素
exchange()函数的功能主要是使用for循环和if语句依次比较min所指变量和p所指变量的大小,从而找出传入的数组中最小元素的地址,并将其赋值给指针变量min。然后再用同样的方法使指针变量max指向数组中最大的元素。最后调用swap()进行数组元素的交换,使得数组中最小的值放在最前面,最大的值放在最后面。
知识复习
如果有以下代码
int *p,arr[10];
p=arr;//p指向数组arr首地址
则
*p和arr[0]等价,都表示数组的第一个元素
*(p+i)和arr[i]等价,都表示数组下标为i的元素
p和arr等价,都表示数组的首地址,但是p是可变的,arr是地址常量,不可变
p+i和&arr[i]等价,都表示元素arr[i]的地址