哐哐蜜柑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日

悬赏问题

  • ¥120 计算机网络的新校区组网设计
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?