问题描述
- C语言fun函数计算数组N个数的平均值,并将小于平均值且最接近平均值的数作为函数值返回,求教问题
-
#include
#include
#define N 10
double fun(double x[],double *av)
{ int i,j; double d,s;
s=0;
for(i=0; i<N; i++) s = s +x[i];
*av=s/N;
d=32767;//求教这个d是什么含义呢?为何取值32767?
for(i=0; i<N; i++)
if(x[i]<*av && *av - x[i]<=d)// x[i]<=d这个又是什么意思呢?
{
d=*av-x[i];j=i;
}
return x[j];
}
main()
{ int i; double x[N],av,m;
for(i=0; i<N; i++){ x[i]=rand()%50; printf("%4.0f ",x[i]);}
printf("n");
m=fun(x,&av);
printf("nThe average is: %fn",av);
printf("m=%5.1f ",m);
printf("n");
}=====程序要求fun函数计算数组N个数的平均值,并将小于平均值且最接近平均值的数作为函数值返回。d=32767;//求教这个d是什么含义呢?为何取值32767?*av - x[i]<=d这个又是什么意思呢?
解决方案
32767,是int类型在32位系统下的取值范围,他是为了不超出这个范围,以免报错
解决方案二:
d代表x[i]与平均值的差,其初始值值可以是一个足够大的数字(根据具体情况而定)。av-x[i]<=d之后对d进行更新,保证了当前x[i]与平均数差值d最小,而j则是该数的下标。故遍历完成后,返回x[j]即是与av差距最小的数。
时间: 2025-01-20 19:39:25