C语言输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组

#include<stdio.h>
void main()
{
int max,min,m,i,array[5];
printf("请输入5个数:\n");
for(i=0;i<5;i++)
{
scanf("%d",&array[i]);
}
max=0;
min=0;
for(i=1;i<5;i++)
{
if(array[max]<array[i])
{
max=i;
}
if(array[min]>array[i])
{
min=i;
}
}
m=array[max];
array[max]=array[0];
array[0]=m;
m=array[min];
array[min]=array[4];
array[4]=m;
for(i=0;i<5;i++)
{
printf("%d\t",array[i]);
}
}
代码如上,哪里有问题?重写代码的不要,谢谢。

唯一的一个问题 

就是如果最大最小值本来就在第一个或者最后一个的情况.

比如, 最小值本来在a[0]  æœ€å¤§å€¼åœ¨a[4]

这样循环后min=0 max=4

于是 先做了一次交换 a[max]和a[0] 也就是a[4]和a[0]

然后 又做了一次交换, a[min]和a[4] 还是a[0]和a[4] 又换回去了.

导致最小在a[0] 最大在a[4] 与要求不符.

修改方式 就是

m=array[max];
array[max]=array[0];
array[0]=m;
if(min==0) min=max;//如果min已经被换走了,那么把min赋值成被换的位置.
m=array[min];
array[min]=array[4];
array[4]=m;
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-07-30
没有错误啊,不知哪里没有达到要求呢?
有一点就是,有可能第一个数就是最小的,最大的和第一个数交换之后就把最小的数换走了?本回答被提问者采纳
第2个回答  2015-07-30
m=array[max];
// array[max]=array[0];多余的
array[0]=m;
m=array[min];
// array[min]=array[4];多余的
array[4]=m;
相似回答