运行结果只有一小部分不对

#运算结果只有a14和a24不对

img


#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 3
#define M 5
void randshuzu(double a[][M],int n)
{
    int i,j;
    srand(time(NULL));
    for(i=0;i<n;i++)
       for(j=0;j<M-1;j++)
       {
             a[i][j]=rand()%100+1;
       }
}
void printfshuzu(double a[][M],int n)
{
    int i,j;
    double sum=0;
    //for(i=0;i<n;i++)
    i=0;
    while(i<n)
    {
        printf("\n");
        printf("       ");
        for(j=0;j<M-1;j++)
        {
            printf("%7.1lf",a[i][j]);
            sum=a[i][j]+sum;
        }
        a[i][4]=sum/4.0;
        printf("%7.1lf",a[i][4]);
        i++;
    }
}
void maxshuzu(double a[][M],int n)
{
    int i,j;
    double max;
    printf("\n");
    printf("最高   "); 
    for(j=0;j<M;j++)
    {
        i=0;
        max=a[i][j];
        for(i=0;i<n;i++)
        {
            if(a[i][j]>=max){
            max=a[i][j];}
        }
        printf("%7.1lf",max);
    }
}
void minshuzu(double a[][M],int n)
{
    int i,j;
    double min;
    printf("\n");
    printf("最低   ");
    for(j=0;j<M;j++)
    {
        i=0;
        min=a[i][j];
        for(i=0;i<n;i++)
        {
            if(a[i][j]<=min){
            min=a[i][j];}
        }
        printf("%7.1lf",min);
    }
}
int main()
{
    double s1[N][M];
    printf("        课程01 课程02 课程03 课程04 平均分"); 
    randshuzu(s1,N);
    printfshuzu(s1,N);
    maxshuzu(s1,N);
    minshuzu(s1,N);
    return 0; 
}

24行加一句sum = 0;