C中,这个求数组中最大值,最小值,平均数个我改的一个小地方为什么不对?高手看补充:

在score数组中,内放10学生成绩,求平均分,最高分和最低分。正确程序如下:
#include <stdio.h>
#define N 10
void fun(float *a,int n,float *max,float *min,float *average);
main()
{float ave=0,max,min;
float score[10];
int i;
printf("score is:");
for(i=0;i<N;i++)
scanf("%f",&score[i]);
fun(score,N,&max,&min,&ave);
printf("max=%f,min=%f,ave=%f.\n",max,min,ave);
getch();
return 0;
}
void fun(float *a,int n,float *max,float *min,float *average)
{int i;
float sum=*(a+0);
*max=*min=*(a+0);

/*我把这一行改成了*max=*min=0,接着又把for循环改为for(i=0;i<n;i++),这时输入1到10,我想,我所输入的数都是大于0的,我从0开始循环,结果应该不变啦,可是max=10.000000(它不变),min=0.00000(它错误),ave=5.600000(比正解多了0.1.)*/

for(i=1;i<n;i++) {
if(*(a+i)>*max) *max=*(a+i);
else if(*(a+i)<*min) *min=*(a+i);
sum+=*(a+i);
*average= sum/n;}
}
我哪li理解错了?

// 在线解答
你把最小值*min赋值0
是错的。因为你是把所输入的最小的数放到min中但是你现在却将一个随便的数放入到其中,比如说0 而如果你现在输入所有的数都 大于0的话 那么你min中所放的荏苒是0 .所以是错的 。同理你将最大值 赋值0也是错的,正确的做法是将*min和*max都赋值为数组中的任何一个元素都 可以
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-04-08
恩,lz对于min的初值赋值错误,对max,min的初始化应为数组内的数值,不可以随便赋值。一楼正解。
相似回答