方差始终为0且每个学生成绩不输出?


#include<stdio.h>
#define N 5
#define M 5
float score[N][M];
float a_stu[N],a_cour[M];
int r,c;
int main( )
{
    int i,j;
    float h;
    float s_var(void);
    float highest( );
    void input_stu(void);
    void aver_stu(void);
    void aver_cour(void);
    input_stu();
    aver_stu();
    aver_cour();
    printf("\n cour1        cour2            cour3            cour4            cour5           aver\n");
    for(i=0;i<N;i++)

     { printf("\n NO %2d",i+1);
       for(j<=0;j<M;j++)
            printf("%5.2f",score[i][j]);
        printf("%5.2f\n",a_stu[i]);  
     }
    printf("\naverage");
    for(j=0;j<M;j++)
        printf("%8.2f",a_cour[j]);
    printf("\n");
    h=highest( );
    printf("higest is %7.2f NO%2d courese %2d\n",h,r,c);
    printf("variance is %7.2f\n",s_var( ));
    return 0;

}
void input_stu(void)
{
    int i,j;
    for(i=0;i<N;i++)
        {
            printf("NO.%2d student score : ",i+1);
            for(j=0;j<N;j++)
                scanf("%f",&score[i][j]);
        }
}
void aver_stu(void)
{
    int i,j;
    float s;
    for(i=0;i<N;i++)
        for(j=0,s=0;j<M;j++)
            s+=score[i][j];
        a_stu[i]=s/5.0;//给每名学生的个人平均成绩
}
void aver_cour(void)//每个课程的学生学习成绩
{
    int i,j;
    float s;
    for(j=0;j<M;j++)
        {
            s=0;
            for(i=0;i<N;i++)
                s+=score[i][j];
            a_cour[j]=s/(float)N;
        }
}
float highest( )
{
    float high;
    int i,j;
    high=score[0][0];
    for(i=0;i<N;i++)
        for(j=0;j<M;j++)
            if(score[i][j]>high)
                {
                    high=score[i][j];
                    r=i+1;
                    c=j+1;
                }
                return (high);
}
float s_var(void)//这里开始求方差了
{
    int i;
    float sumx,sumxn;
    sumx=0.0;
    sumxn=0.0;
    for(i=0;i<N;i++)
       {
           sumx+a_stu[i]*a_stu[i];
           sumxn+=a_stu[i];
       }
       return(sumx/N-(sumxn/N)*(sumxn/N));
}

修改地方用//注释了

 
#include<stdio.h>
#define N 5
#define M 5
float score[N][M];
float a_stu[N],a_cour[M];
int r,c;
int main( )
{
    int i,j;
    float h;
    float s_var(void);
    float highest( );
    void input_stu(void);
    void aver_stu(void);
    void aver_cour(void);
    input_stu();
    aver_stu();
    aver_cour();
    printf("\n cour1        cour2            cour3            cour4            cour5           aver\n");
    for(i=0;i<N;i++)
     { printf("\n NO %2d ",i+1);
       for(j=0;j<M;j++)//for(j<=0;j<M;j++)
            printf("%5.2f ",score[i][j]);
        printf("%5.2f\n",a_stu[i]);  
     }
    printf("\naverage");
    for(j=0;j<M;j++)
        printf("%8.2f ",a_cour[j]);
    printf("\n");
    h=highest( );
    printf("higest is %7.2f NO%2d courese %2d\n",h,r,c);
    printf("variance is %7.2f\n",s_var( ));
    return 0;
}
void input_stu(void)
{
    int i,j;
    for(i=0;i<N;i++)
        {
            printf("NO.%2d student score : ",i+1);
            for(j=0;j<N;j++)
                scanf("%f",&score[i][j]);
        }
}
void aver_stu(void)
{
    int i,j;
    float s;
    for(i=0;i<N;i++)
    {//
        s=0;//
        for(j=0,s=0;j<M;j++)
            s+=score[i][j];
        a_stu[i]=s/5.0;//给每名学生的个人平均成绩
    }//
}
void aver_cour(void)//每个课程的学生学习成绩
{
    int i,j;
    float s;
    for(j=0;j<M;j++)
        {
            s=0;
            for(i=0;i<N;i++)
                s+=score[i][j];
            a_cour[j]=s/(float)N;
        }
}
float highest( )
{
    float high;
    int i,j;
    high=score[0][0];
    for(i=0;i<N;i++)
        for(j=0;j<M;j++)
            if(score[i][j]>high)
                {
                    high=score[i][j];
                    r=i+1;
                    c=j+1;
                }
                return (high);
}
float s_var(void)//这里开始求方差了
{
    int i;
    float sumx,sumxn;
    sumx=0.0;
    sumxn=0.0;
    for(i=0;i<N;i++)
       {
           sumx+=a_stu[i]*a_stu[i];//sumx+a_stu[i]*a_stu[i];
           sumxn+=a_stu[i];
       }
       return(sumx/N-(sumxn/N)*(sumxn/N));
}

修改如下,问题见注释处,求方差函数算法是否正确?供参考:

#include<stdio.h>
#define N 5
#define M 5
float score[N][M];
float a_stu[N],a_cour[M];
int r,c;
int main( )
{
    int i,j;
    float h;
    float s_var(void);
    float highest( );
    void input_stu(void);
    void aver_stu(void);
    void aver_cour(void);
    input_stu();
    aver_stu();
    aver_cour();
    printf("\n\t cour1  cour2   cour3   cour4   cour5   aver\n");
    for(i=0;i<N;i++)
     {
       printf("NO %2d\t",i+1);
       for(j=0;j<M;j++)     //for(j<=0;j<M;j++)
            printf("%5.2f\t",score[i][j]);
        printf("%5.2f\n",a_stu[i]);
     }
    printf("\naverage");
    for(j=0;j<M;j++)
        printf("%5.2f\t",a_cour[j]);
    printf("\n");
    h=highest( );
    printf("higest is %7.2f NO%2d courese %2d\n",h,r,c);
    printf("variance is %7.2f\n",s_var( ));
   
    return 0;
}
void input_stu(void)
{
    int i,j;
    for(i=0;i<N;i++)
        {
            printf("NO.%2d student score : ",i+1);
            for(j=0;j<M;j++)    //for(j=0;j<N;j++)
                scanf("%f",&score[i][j]);
        }
}
void aver_stu(void)
{
    int i,j;
    float s;
    for(i=0;i<N;i++) {
        for(j=0,s=0;j<M;j++)
            s+=score[i][j];
        a_stu[i]=s/5.0;//给每名学生的个人平均成绩
    }
}
void aver_cour(void)//每个课程的学生学习成绩
{
    int i,j;
    float s;
    for(j=0;j<M;j++)
        {
            s=0;
            for(i=0;i<N;i++)
                s+=score[i][j];
            a_cour[j]=s/(float)N;
        }
}
float highest( )
{
    float high;
    int i,j;
    high=score[0][0];
    for(i=0;i<N;i++)
        for(j=0;j<M;j++)
            if(score[i][j]>high)
                {
                    high=score[i][j];
                    r=i+1;
                    c=j+1;
                }
    return (high);
}
float s_var(void)//这里开始求方差了
{
    int i;
    float sumx,sumxn;
    sumx=0.0;
    sumxn=0.0;
    for(i=0;i<N;i++)
       {
           sumx+a_stu[i]*a_stu[i];
           sumxn+=a_stu[i];
       }
    return(sumx/N-(sumxn/N)*(sumxn/N));
}