yeliangyuduan 2021-12-04 19:55 采纳率: 100%
浏览 34
已结题

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

#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

  • 写回答

2条回答 默认 最新

  • a5156520 2021-12-04 21:09
    关注

    修改了一下,如下:

    
    #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);
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月13日
  • 已采纳回答 12月5日
  • 创建了问题 12月4日

悬赏问题

  • ¥15 没输出运行不了什么问题
  • ¥20 输入import torch显示Intel MKL FATAL ERROR,系统驱动1%,: Cannot load mkl_intel_thread.dll.
  • ¥15 点云密度大则包围盒小
  • ¥15 nginx使用nfs进行服务器的数据共享
  • ¥15 C#i编程中so-ir-192编码的字符集转码UTF8问题
  • ¥15 51嵌入式入门按键小项目
  • ¥30 海外项目,如何降低Google Map接口费用?
  • ¥15 fluentmeshing
  • ¥15 手机/平板的浏览器里如何实现类似荧光笔的效果
  • ¥15 盘古气象大模型调用(python)