哐哐蜜柑614 2021-11-13 08:20 采纳率: 100%
浏览 44
已结题

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

问题描述
求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

  • 写回答

2条回答 默认 最新

  • dadsamtiger 2021-11-13 09:38
    关注

    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;
    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月17日
  • 已采纳回答 11月13日
  • 创建了问题 11月13日

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料