- #include<stdio.h>
- #include<math.h>
- main()
- {
- int n[100],r,i,j;
- float x[100][100],y[100],sum,sun,Y,w,W,k,st,s1,s2,F,f,a;
- int m=0;
- printf("请输入水平数r:\\n");/*输入样品水平数*/
- scanf("%d",&r);
- //printf("样品水平数r=%d\\n",r);
- for(i=0;i<r;i++)/*输入每个总体的容量*/
- {printf("请输入从总体x[%d]中抽取的样本容量n[%d]:\\n",i+1,i+1);
- scanf("%d",&n[i]);
- m=m+n[i];
- }
- //printf("样品水平数m=%d\\n",m);/*输出样品总容量*/
- //for(i=0;i<r;i++)/*输出每个样本容量*/
- // printf("n[%d]=%d\\n",i+1,n[i]);
- for(i=0;i<r;i++)/*输入样本数据*/
- { printf("请输入总体x[%d]的样品:\\n",i+1);
- for(j=0;j<n[i];j++)
- scanf("%f",&x[i][j]);
- }
- /*printf("数据表如下:\\n");
- for(i=0;i<r;i++)
- { printf("\\n");
- for(j=0;j<n[i];j++)
- printf(" %f",x[i][j]);
- }
- printf("\\n");*/
- for(i=0;i<r;i++)/*求第i个总体的样本均值*/
- {
- sum=0;
- for(j=0;j<n[i];j++)
- sum=sum+x[i][j];
- y[i]=sum/n[i];
- }
- /*for(i=0;i<r;i++)
- {
- printf("\\n");
- printf("总体x[%d]的样本均值为%f",i+1,y[i]);
- }
- printf("\\n");*/
- sum=0;
- for(i=0;i<r;i++)
- {
- for(j=0;j<n[i];j++)
- sum=sum+x[i][j];
- }
- Y=sum/m;
- //printf("样本总均值为:%f",Y);
- //printf("\\n");
- sum=0;/*组内平方和SA*/
- for(i=0;i<r;i++)
- {
- w=y[i]-Y;
- W=w*w;
- k=W*n[i];
- sum=sum+k;
- }
- //printf("SA=%f\\n",sum);
- s1=sum/(r-1);
- w=W=k=sun=0;/*误差平方和Se*/
- for(i=0;i<r;i++)
- {
- for(j=0;j<n[i];j++)
- {
- w=x[i][j]-y[i];
- W=w*w;
- sun=sun+W;
- }
- }
- //printf("Se=%f\\n",sun);
- s2=sun/(m-r);
- w=W=k=st=0;
- for(i=0;i<r;i++)
- {
- for(j=0;j<n[i];j++)
- {
- w=x[i][j]-Y;
- W=w*w;
- st=W+st;
- }
- }
- //printf("St=%f\\n",st);
- F=s1/s2;
- printf("方差来源 平方和 自由度 均方 F 值\\n");
- printf("因 素 A %10.3f %d %10.3f %10.3f\\n",sum,r-1,s1,F);
- printf("误 差 %10.3f %d %10.3f\\n",sun,m-r,s2);
- printf("总 和 %10.3f %d\\n",st,m-1);
- printf("\\n");
- printf("请输入显著水平a=");
- scanf("%f",&a);
- printf("请输入在显著水平a=%f下F[%d,%d]:",1-a,r-1,m-r);
- scanf("%f",&f);
- if(F>f)
- printf("拒绝H0!");
- else
- printf("接受H0!");
- return 0;
- }
- //该片段来自于http://www.codesnippet.cn/detail/250720134797.html
来源: http://www.codesnippet.cn/detail/250720134797.html