匿名用户
1级
2015-01-06 回答
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//计算平均数,方差,标准差。
#include
#include
#include
#include
#include
#define N 100
voidTongJi(doublea[],intn,double*aver,double*vari,double*stdDev){
//对长度为n的数组a进行统计,统计其平均值aver、方差vari、标准差stdDev
inti;
double*p,aver2;
*aver=0.0;
for(p=a+(n-1);p>=a;--p){
*aver+=*p;//累加各元素
aver2+=(*p)*(*p);//累加各元素的平方
}
*aver/=n;//求平均值
aver2/=n;//求平方的平均值
*vari=aver2-(*aver)*(*aver);//计算方差
*stdDev=sqrt(*vari);//计算标准差
}
intmain(){
doublea[N],pj,fc,bzc;
inti;
srand(time(NULL));
for(i=0;i
a[i]=rand()/(RAND_MAX+1.0); //产生随机小数[0,1)
printf("%lg ",a[i]);
}
TongJi(a,N,&pj,&fc,&bzc);
printf("\nPingJun=%lg, FangCha=%lg, BiaoZhunCha=%lg",pj,fc,bzc);
printf("\nFinished!\n");
getch();
return0;
}
顺便做了一个测试:产生100个随机小数,得到其平均值大概在0.5左右,方差在0.08左右,标准差在0.28左右。说明系统自带的随机数发生器还是比较均匀的。
追问:
可以是输入100个数吗?
追答:
你的意思是要让数组长度可变吗?也可以:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//计算平均数,方差,标准差。
#include
#include
#include
#include
#include
voidTongJi(doublea[],intn,double*aver,double*vari,double*stdDev){
//对长度为n的数组a进行统计,统计其平均值aver、方差vari、标准差stdDev
inti;
double*p,aver2;
*aver=0.0;
for(p=a+(n-1);p>=a;--p){
*aver+=*p;//累加各元素
aver2+=(*p)*(*p);//累加各元素的平方
}
*aver/=n;//求平均值
aver2/=n;//求平方的平均值
*vari=aver2-(*aver)*(*aver);//计算方差
*stdDev=sqrt(*vari);//计算标准差
}
intmain(){
double*a,pj,fc,bzc;
inti,N;
printf("Input N:"); scanf("%d",&N);
a=(double*)malloc(sizeof(double)*N);//为a分配数组内存空间
if(!a)return0;//如果分配失败,退出
srand(time(NULL));
for(i=0;i
a[i]=rand()/(RAND_MAX+1.0); //产生随机小数[0,1)
printf("%lg ",a[i]);
}
TongJi(a,N,&pj,&fc,&bzc);
printf("\nPingJun=%lg, FangCha=%lg, BiaoZhunCha=%lg",pj,fc,bzc);
free(a);//释放a数组所占空间
printf("\nFinished!\n");
getch();
return0;
}
追问:
不是,我是指我可以自己输入一组数据。比如,我要输入一组学生的成绩,求其平均值,方差,标准差。
追答:
删除语句
srand(time(NULL));
将语句:
a[i]=rand()/(1.0+RAND_MAX);
修改为:
scanf("%lf",&a[i]);
OK了。这种简单的修改应该要自己学着做,不能太依赖哦!