「已注销」 2022-11-20 15:02 采纳率: 71.4%
浏览 2
已结题

计算最低分输出0,平均分方差出现负值

最低分都输出的是零,是哪错了
麻烦再帮忙看看方差计算那块有没有问题,计算方差调试的时候出现负值了

#include<stdio.h>
int m,n,L,M;
float score[60][9],stu[60],cla[9],high[9],low[9],fang;//各科分数,学生平均分 ,课程平均分 ,最高分,最低分 ,平均分方差 
int main()
{
    void ave_stu(void);//计算学生平均成绩 
    void ave_cla(void);//计算课程平均成绩 
    float highest();//计算最高成绩 
    float lowest();//计算最低成绩 
    float fangcha();//计算平均分方差 
    printf("请输入班级总人数和课程总数:");
    scanf("%d,%d",&L,&M); 
    for(int i=0;i<L;i++)
        {
            for(int j=0;j<M;j++)
            {
                printf("请输入学生%d的成绩:",i+1);
                scanf("%f",&score[i][j]);
            }
        }
    ave_stu();
    ave_cla();
    lowest();
    highest();
    fangcha();
    for(int i=0;i<L;i++)
        {
                printf("学生%d的平均分为:%f\n",i+1,stu[i]);
        }
    for(int i=0;i<M;i++)
        {
                printf("课程%d的平均分为:%f\n",i,cla[i]);
        }
    for(int i=0;i<M;i++)
        {
                printf("课程%d的最高分为:%f\n",i,high[i]);
        }
    for(int i=0;i<M;i++)
        {
                printf("课程%d的最低分为:%f\n",i,low[i]);
        }
    for(int i=0;i<M;i++)
        {
                printf("课程%d的最低分为:%f\n",i,low[i]);
        }
    printf("平均分的方差为:%f\n",fang);
}
void ave_stu(void)//计算学生平均分 
{
    int i,j;
    float s;
    for(i=0;i<L;i++)
    {
        for(j=0,s=0;j<M;j++)
        {
            s+=score[i][j];
        }
        stu[i]=s/M;
    }
}
void ave_cla(void)//计算课程平均分 
{
    int i,j;
    float s;
    for(j=0;j<M;j++)
    {    s=0;
        for(i=0;i<L;i++)
        {
            s+=score[i][j];
        }
        cla[j]=s/L;
    }
}
float highest()//计算最高分 
{    int i,j;
    float h;
    h=score[0][0];
    for(j=0;j<M;j++)
    {
        h=0;
        for(i=0;i<L;i++)
        {
            if(score[i][j]>h)
            h=score[i][j];
        }
        high[j]=h;
    }
return(h);
}
float lowest()//计算低分 
{    int i,j;
    float l;
    l=score[0][0];
    for(j=0;j<M;j++)
    {
        l=0;
        for(i=0;i<L;i++)
        {
            if(score[i][j]<l)
            l=score[i][j];
        }
        low[j]=l;
    }
return(l);
}
float fangcha()//计算平均分方差 
{
    int i,j;
    float sum=0,fsum=0; 
    for(j=0;j<M;j++)
    {
        for(i=0;i<L;i++)
        {
            sum+=stu[i];
            fsum+=(stu[i]*stu[i]);
        }
    }
    fang=(fsum/L)-(sum/L)*(sum/L);
return(fang);
}
  • 写回答

1条回答 默认 最新

  • JarodYv 人工智能领域新星创作者 2022-11-20 15:10
    关注

    最低分你的初始值设为0,没有分低于0,所以输出为0。将最低分初始值设为第一个成绩。

    float lowest()//计算低分
    {
        int i,j;
        float l;
        for(j=0; j<M; j++) {
            l=score[0][j];
            for(i=0; i<L; i++) {
                if(score[i][j]<l)
                    l=score[i][j];
            }
            low[j]=l;
        }
        return(l);
    }
    

    方差那里,你似乎对方差的理解有问题。方差要先求出平均值,然后看数值与均值的差的平方。应该这样写。

    float fangcha()//计算平均分方差
    {
        int i,j;
        float sum=0,fsum=0;
        for(i=0; i<L; i++) {
            sum+=stu[i];
        }
        float avg = sum/L;
        for(i=0; i<L; i++) {
            fsum+=(stu[i]-avg) * (stu[i]-avg);
        }
        fang=fsum/L;
        return(fang);
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 11月28日
  • 已采纳回答 11月20日
  • 修改了问题 11月20日
  • 创建了问题 11月20日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度