编程语言基础-C语言-第六章 函数-例题6-14
#include<stdio.h>
void exchang(int b[],int n)
{
int max,min,i,temp;
max=min=0;
for(i=0;i<n;i++)
{
if(b[i]>b[max])
max=i;
if(b[i]<b[min])
min=i;
}
printf("最大值=%d\n",b[max]);
printf("最小值=%d\n",b[min]);
temp=b[0];
b[0]=b[max];
b[max]=temp;
if(min==0)
min=max;
temp=b[n-1];
b[n-1]=b[min];
b[min]=temp;
}
void prtarr(int a[],int n)
{
int i;
for(i=0;i<n;i++)
printf("%4d",a[i]);
printf("\n");
}
int main(void)
{
int a[10]={-5,3,8,9,-1,-3,5,6,0,4},i;
printf("交换前:");
prtarr(a,10);
exchang(a,10);
printf("\n交换后:");
prtarr(a,10);
return 0;
}
本题的关键在于分清楚交换的是数组元素还是数组下标
找到最大值和最小值只需要找到数组下标即可,在交换下标时数组元素不会发生改变
交换数组元素只需要交换两次,即交换最大值和最小值位置
交换函数中较难理解的就是if(min==0) min=max; 这一句是交换下标,在执行这条语句时,第一个元素值已经交换成最大的值了,所以,如果第一个数正好是最小值时,这个数就没了,所以要将它的下标交换