二维数组实参传递一维数组实参出错,求解答。

#include<stdio.h>
double main()
{
    int a,b,i;
    char name[10];
    double goal[30][30];
    double score(double array[30],int b);
    printf("请输入歌手数量和评委数量:");
    scanf("%d%d",&a,&b);
    for(i=0;i<a;i++)
    {
        gets(name);//输入选手姓名
        scanf("%lf",goal[a]);//逐个输入评委所给分数
        printf( "%lf",score(goal[a],b) );
    }    
}

double score(double array[30],int b)
{
    int i;
    double aver,max,min;
    double sum=0;
    max=array[0];
    min=array[0];
    for(i=0;i<b;i++)
    {
        if(array[i]>max){max=array[i];}
        if(array[i]<min){min=array[i];}
        sum=array[i]+sum;
    }
    aver=(sum-max-min)/b;
    return(aver);
}

题目如下
【选作题 2】某歌手大赛,共 m 个歌手,有 n 个评委给歌手打分,分
数采用百分制,去掉一个最高分,去掉一个最低分,然后取
平均分,得到歌手的成绩。n 个分数由键盘输入,编写程序
计算某歌手的成绩。(假设 m≤50,n≤10)
要求:(1)设计一个函数计算一个歌手的成绩;
(2)在主函数中完成下面功能:输入评委数 n 和歌手数 m;
对每个歌手输入 n 个评委的分数;调用上面的函数;
输出全部歌手的最终分数;
(3)对 m 个歌手的分数采用一个二维数组来存放。

img

修改了一下,如下:


#include<stdio.h>
int main()
{
    int a,b,i,j;
    char name[10];
    double goal[30][30];
    double score(double array[][30],int star,int b);
    
    for(i=0;i<30;i++){
        for(j=0;j<30;j++){
            goal[i][j]=-1;
        }
    }
    printf("请输入歌手数量和评委数量:");
    scanf("%d%d",&a,&b);
    for(i=0;i<a;i++)
    {
        while(getchar()!='\n')
            continue;
        printf("请输入歌手的姓名:"); 
        gets(name);//输入选手姓名
        printf("请评委给歌手%s依次打分:",name) ;
        for(j=0;j<b;j++){
            scanf("%lf",&goal[i][j]);
        }
        printf( "歌手%s最后得分为:%lf\n",name,score(goal,i,b) );
    }    
}
double score(double  array[][30],int star,int b)
{
    int j;
    double aver,max,min;
    double sum=0;
    max=array[star][0];
    min=array[star][0];
    for(j=0;j<30;j++)
        if(array[star][j]!=-1){
            if(array[star][j]>max){max=array[star][j];}
            if(array[star][j]<min){min=array[star][j];}
            sum=array[star][j]+sum;
        }else{
            break;
        }
            
    }
    
    
    aver=(sum-max-min)/(b-2);
    return(aver);
}

是计算的单个歌手的平均值,score函数里的参数star为歌手成绩的数组存放行数,所以能计算相应歌手的平均成绩。
运行图:

img