在解决这个问题之前,我们首先需要了解数学中的方差是如何计算的,
方差的计算公式:
S2={(x1-m)2+(x2-m)2+(x3-m)2+…+(xn-m)2}/n
在这个公式中,m为平均值,x1,x2,x3,xn是元素;
所以,求方差可以分为三步:
1.求平均值;
2.求每个元素于平均值的差的平方和;
3.将上述平方和除以n。
在下面的例子中,我才用数组的形式来求方差。
#include<stdio.h>
int main()
{
float sum=0;
float m=0;
float a[12]={7.62, 7.56, 7.82, 7.22, 7.38, 7.56, 7.77, 7.82, 7.32, 7.48, 7.60, 7.50};
for(int i=0;i<12;i++)
{
sum+=a[i];
}
m=sum/12;
float s=0;
for(int j=0;j<12;j++)
{
s+=(a[j]-m)*(a[j]-m);
}
s/=12;
printf("%.7f",s);
return 0;
}
我们定义一个长度为12位的浮点型数组,并赋初始值。
第一步:然后,用for循环求出所有元素之和sum,再用sum/n,就得到了平均值。
第二布:再次使用for循环,求出平方和,图片中的 s+=(a[j]-m)*(a[j]-m),s=s+(a[j]-m)*(a[j]-m)代替,表示的是平方和的累加。
可以用需要注意的是,无论是数组元素、元素之和、平均值还是平方和,都要采用flaot型变量,虽然double 型变量也可以,但是占用的存储空间比较大,没有必要。
第三步:将平方和除以12。
这只是求方差的一种形式,如果想要输入数组元素来求方差的话,可以将代码变为:
#include<stdio.h>
int main()
{
float sum=0;
float m=0;
float a[12];
for(int i=0;i<12;i++)
{
scanf("%f",&a[i]);
sum+=a[i];
}
m=sum/12;
float s=0;
for(int j=0;j<12;j++)
{
s+=(a[j]-m)*(a[j]-m);
}
s/=12;
printf("%.7f",s);
return 0;
}
基本上跟上一个代码一样,只不过将数组赋初始值的步骤放到了第一个for循环中。
如果对您有所帮助,可以点个收藏加关注哦!