输入m个数,求其最大数、最小数和平均值。想问下列源程序有什么错误?

#include<stdio.h>
int main()
{
    int i,m,a[m],max,min,sum,aver;
    scanf("%d",&m);
    sum=0;
    for(i=0;i<m;i++)
    {         
        scanf("%d",&a[i]);
        sum+=a[i];
    }
    aver=sum/m;
    max=a[0];
    for(i=0;i<m;i++)
    {         
        if(a[i]>max)
        max=a[i];
    }
    min=a[0];
    for(i=0;i<m;i++) 
    {
        if(a[i]<min)
        min=a[i];
    }
    printf("aver=%d,max=%d,min=%d\n",aver,max,min);
    return 0;
}

#include<stdio.h>
int main()
{
    int i,m,a[m],max,min,sum,aver;
    // m未赋值之前(随机值)就拿来定义数组,这是极其危险的
    scanf("%d",&m);
    sum=0;
    for(i=0;i<m;i++)
    {         
        scanf("%d",&a[i]);
        sum+=a[i];
    }
    aver=sum/m;//这里是帧数除法,符合你的设计预期吗?
    max=a[0];
    for(i=0;i<m;i++)
    {         
        if(a[i]>max)
        max=a[i];
    }
    min=a[0];
    for(i=0;i<m;i++) 
    {
        if(a[i]<min)
        min=a[i];
    }
    printf("aver=%d,max=%d,min=%d\n",aver,max,min);
    return 0;
}


// 给你一段代码你参考一下

#include<stdio.h>

static inline int MyMax(int a, int b)
{
   return (a > b) ? a : b;
}
static inline int MyMin(int a, int b)
{
   return (a > b) ? b : a;
}
int main()
{
    int i, m, sum;
    int max = 0x80000000;
    int min = 0x7fffffff;
    double aver;

    scanf("%d",&m);
    
    int a[m];

    sum=0;
    for(i = 0; i < m; i++) {         
        scanf("%d",&a[i]);
        sum += a[i];
        min = MyMin(min, a[i]);
        max = MyMax(max, a[i]);
    }

    aver = (double)sum / (double)m;
    
    printf("aver = %f, max=%d, min=%d\n", aver, max, min);
    return 0;
}