计算最低分输出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);
}

最低分你的初始值设为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);
}