关于#c语言#的问题:问题遇到的现象和发生背景

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果
#include <stdio.h>
int max,min;
int s(int n)
{   int *p,a[n],sum=0;
    float avg;
    max=a[0];
    min=a[0];
    for(p=a;p<a+n;p++)
    {    scanf("%d",p);
        sum=sum+*p;
        if(min>*p)
            min=*p;
        if(max<*p)
            max=*p;
    }
    avg=sum/n;
    return avg;
}
main()
{   int b;
    float avg;
    printf("请输入数组长度:\n");
    scanf("%d",&b);
    avg=s(b);
    printf("%f\n",avg);
    printf("%d\n",max);
    printf("%d",min);
}
为什么数组长度不同 有的时候是最大值正确,最小值错误 有时候却是最大值错误,最小值正确

#include <stdio.h>
int min=1000000, max=-1000000;
int s(int n)
{
    int* p, a[1024], sum = 0;
    float avg;
    //max = a[0];
    //min = a[0];
    for (p = a; p < a + n; p++)
    {
        scanf("%d", p);
        sum = sum + *p;
        if (min > *p)
            min = *p;
        if (max < *p)
            max = *p;
    }
    avg = sum / n;
    return avg;
}
void main()
{
    int b;
    float avg;
    printf("请输入数组长度:\n");
    scanf("%d", &b);
    avg = s(b);
    printf("%f\n", avg);
    printf("%d\n", max);
    printf("%d", min);
}

#include <stdio.h>
int max, min;
float s(int n)
{
    int *p, a[n], sum = 0, i;
    float avg;
    for (i = 0; i < n; i++)
    {
        scanf("%d", &a[i]);
    }
    max = a[0];
    min = a[0];
    for (i = 0, p = a; i < n; i++, p++)
    {
        sum = sum + *p;
        if (min > *p)
            min = *p;
        if (max < *p)
            max = *p;
    }
    avg = sum * 1.0 / n;
    return avg;
}
void main()
{
    int b;
    float avg;
    printf("请输入数组长度:\n");
    scanf("%d", &b);
    avg = s(b);
    printf("%f\n", avg);
    printf("%d\n", max);
    printf("%d", min);
}