为什么这个c语言程序最小值永远是输入的第一个数?

#include
int main()
{
int i;
float a[10],aver,high,low,sum=0;
for(i=0;i {
scanf("%f",&a[i]);
high=a[0];
low=a[0];
if(a[i]>high)
high=a[i];
else if(a[i]<low)
low=a[i];
sum=sum+a[i];
}
aver=(sum-high-low)/8;
printf("aver=%f\n",aver);
printf("sum=%f\n",sum);
printf("high=%f low=%f\n",high,low);
return 0;
}

6个回答

high=a[0];low=a[0];这个初始化 要放在for的外面,不然每次都是循环都是重新赋一次数组的第一个值,永远都是跟数组里的第一个值比较,还有问问题时要把代码写完整,你的for循环条件都没写清楚。

qq_40000369
qq_40000369 回复Estoyharto: 你先不要想着比较,你看下每次循环进去,都会将自己输入的第一个值赋值给变量high或者low。
一年多之前 回复
weixin_44549540
Estoyharto 大佬可以给我详细讲一下这个循环的逻辑错误在哪吗?我还是有点绕不出来。
一年多之前 回复
weixin_44549540
Estoyharto 不好意思,我把代码复制上来就成了这个样子,下次我会注意。
一年多之前 回复

high=a[0];
low=a[0];
这个初始化 要放在for的外面

weixin_44549540
Estoyharto 太感谢了
一年多之前 回复

出现着这种情况就是自己的代码逻辑判断出现问题,重新整理和调试,一步一步来,逻辑判断很重要,要加强。
问题解答方法上面同僚已做出解答,希望对你有帮助。

weixin_44549540
Estoyharto 谢谢大佬的指教。可是我不是只把a【0】赋给了low和high吗?而且能找到high,但是low一直都只等于a【0】。刚开始自学,基础不哈,还望多多指教
一年多之前 回复

你每次循环都执行了一遍low和high的初始化,仔细看看循环就会知道错在哪里啦。

weixin_44549540
Estoyharto 可是我不是只把a【0】赋给了low和high吗?而且能找到high,但是low一直都只等于a【0】。刚开始自学,基础不哈,还望多多指教
一年多之前 回复

Because high and low need to be initialzed to zero outside of loop.

high=a[0];
low=a[0];
初始化的顺序逻辑有问题

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐