这个计算标准差的写法怎么改 不知道错哪了

问题描述
求n个数的平均数和标准差。给定n个数X1 ,X2 ,X3 ......Xn ,数据的平均数为x
输入
第一行一个正整数T,表示有T组测试数据。以下每行是一组数,第一个数为数据个数m(m<200),然后是m个正整数构成,

输出
对于每组数据输出一行,即平均数和标准差,两个数据均保留3位小数,并且以一个空格隔开。

输入样列
2
5 1 1 1 1 1
6 1 2 3 4 6 5

输出样例
1.000 0.000
3.500 1.708

#include<stdio.h>
#include<math.h>
int main()
{
int a[101];
int n,t,i;
double ave,d,s;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
s=0;
for(i=1;i<=n;i++){
scanf("%d",&a[i]);
s=s+a[i];
ave=s/n;
d=(a[i]-ave)*(a[i]-ave)/n;
d=sqrt(d);
}
printf("%.3f %.3f\n",ave,d);
}
return 0;
}

img

1、问题出在for语句,计算平均值ave应该在输入完所有数据之后,所以不能放在输入数据的for语句中,而标准差需要用到ave,所以也要放在for语句之外,另外再建一个for语句求各值与ave的差的和,最后求标准差。
2、建议在涉及到多个数据输入的代码中,适当添加提示语句。
代码我大概修改了一下,如果要严格按照两行输出在一起的格式,还需要调整一下,增加几个变量用于储存那四个值。

```c
#include<stdio.h>
#include<math.h>

int main()
{
int a[101];
int n,t,i,j;
double ave,d,s;

printf("请输入有几组数据:");
scanf("%d",&t);

for (j=1;j<=t;j++)
{
    printf("第%d组有多少个数据:",j);
    scanf("%d",&n);
    
    s=0;
    for(i=1;i<=n;i++)
    {
    printf("第%d组第%d个数据:",j,i);
    scanf("%d",&a[i]);
    s=s+a[i];
    }
    ave=s/n;
    
    for (i=1;i<=n;i++)
    {
    d+=(a[i]-ave)*(a[i]-ave);
    }
    d=sqrt(d/n);
    printf("平均值是:%.3f\t 标准差是:%.3f\n",ave,d);
}

return 0;
}

输出结果:

请输入有几组数据:2
第1组有多少个数据:5
第1组第1个数据:1
第1组第2个数据:1
第1组第3个数据:1
第1组第4个数据:1
第1组第5个数据:1
平均值是:1.000 标准差是:0.000
第2组有多少个数据:6
第2组第1个数据:1
第2组第2个数据:2
第2组第3个数据:3
第2组第4个数据:4
第2组第5个数据:6
第2组第6个数据:5
平均值是:3.500 标准差是:1.708


Process exited after 18.02 seconds with return value 0
请按任意键继续. . .