哪里的逻辑错了?为什么运行结果不对?

哪里的逻辑错了?为什么运行结果不对?

问题描述:

图片说明图片说明图片说明

第34行应该使用 else if ,如果不这样,前面刚把最大值置换为最小值,后面又判断一下,又置换为最最大值,所以会出现两个5.如果使用 else if ,前面的 if 执行了,就不会执行后面的了

完全多此一举
直接max min存放最大最小的下标即可,因为有了下标就知道最大最小,有了最大最小,还要再循环反查。

这且不说,你下面那个循环也不对。
因为你
a[i] = min以后
if (a[i]==min)肯定成立,因为a[i]已经不是原来的a[i]了。

建议重写,大致代码如下
int max = 0;
int min = 0;
for (int i = 1; i < 5; i++)
{
if (a[i] > a[max]) max = i;
if (a[i] < a[min]) min = i;
}
int t = a[max];
a[max]=a[min];
a[min]=t;