经过多次改正,结果如下,可是结果仍然不对,求解答,急急急。。。
#include<stdio.h>
void main()
{
int arr[10];
int max=arr[0];
int min=arr[9];
int sum=0;
int i;
float ave;
printf("请输入十个数:\n");
for(i=0;i<=9;i++)
scanf("%d",arr+i);
for(i=0;i<=9;i++)
{
if(max<arr[i])
max=arr[i];
}
for(i=9;i>=0;i--)
{
if(min>arr[i])
min=arr[i];
}
for(i=0;i<=9;i++)
{
sum=sum+arr[i];
ave=sum/10;
}
printf("%d,%d,%f\n",max,min,ave);
}
可是结果为什么总是运行不对呢,很纳闷??
追答首先,你的max=arr[0]; min=arr[9];放错了地方,怎么可以在对数组赋值之前就用数组成员对max和min赋值呢!!!这样你得到的数据是随机的整形!!!在程序设计里面这样的语句几乎必然会出现逻辑错误!!!
其次,ave的结果不对的原因是语句ave = sum / 10;假设数组为{1,2,3,4,5,6,7,8,9,0},那么sum = 45;是一个整形,除数10也是一个整形,那么sum/10的结果也会是一个整形(4),把4赋值给ave的结果是(4.000000),导致逻辑错误!!! 而改为ave = sum / 10.0;情况就不一样了,sum还是(45),但是现在的除数是10.0(浮点数),系统会把sum转换成浮点型(45.000000)参与运算,得到的结果也是浮点型(4.500000)!!!
还有啊ave = sum / 10.0;只需要执行一次,你放在里面执行了10次,虽然最后结果是没错的,但是很浪费运行时间,其位置应该放在那个for的外面!!!
不要意思,批评一下你啊, 这个程序写的确实不怎么样,一个这样的程序,你用了4个for,大大增大的代码量,加大了运行时间,实在不符合程序设计的理念!!!