头歌c语言实训项目-综合案例课外练习:大奖赛现场统分

简介: 头歌c语言实训项目-综合案例课外练习:大奖赛现场统分

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹)

目录

第1关:大奖赛现场统分

题目:

代码思路:

代码表示:


第1关:大奖赛现场统分

题目:

大奖赛现场统分

以往各类大奖赛的报分与统分脱节,参赛选手的最后得分总要等到下一个选手赛完后才报,影响竞赛的正常节奏,也不能满足观众的期待心理。现在请为某大奖赛编写一个现场统分程序,在各评委打分之后,及时通报评分结果。同时,为了给评委一个约束,有利于竞赛评判的公正,要求增加给评委打分和排序的功能。

已知:某大奖赛有 n 个选手参赛,m(m>2)个评委依次为参赛的选手评判打分,最高10分,最低0分。统分规则为:在每个选手所得的 m 个得分中,去掉一个最高分,去掉一个最低分,取平均分为该选手的最后得分。要求编程实现:

根据 n 个选手的最后得分,从高到低排出名次表,以便确定获奖名单;

根据各选手的最后得分与各评委给该选手所评分的差距,对每个评委评分的准确性给出一个定量的评价。

代码思路:

这题看着很复杂,实际上源代码已经给了我们很多提示,我们只需要根据源代码的提示,补全  Sort()函数和CountJudgeScore()函数即可

注意:本题的难点在于不仅要考虑选手的评分,还要顺带考虑其编号,二者缺一不可

对于Sort()函数,我们只需要用冒泡排序即可(http://t.csdn.cn/mmU9w

对于CountJudgeScore()函数,我们首先可以从 CountAthleteScore()函数中得知评委的评分储存在数组f[ ]中,并且是以f[i*m+j]的形式表示每个评委对同一个选手的评分,那么我们在统计评委时就可以反过来用f[j*m+i]表示评委对每个选手的评分,然后根据题目提示里面给出的公式进行计算即可,最后不要忘了对每个评委的进行编号

代码表示:

#include  <stdio.h>
#include  <math.h>
#define ATHLETE 40                      //选手人数最高限
#define JUDGE   20                      //评委人数最高限
void  CountAthleteScore(int sh[], float sf[], int n, float f[], int m);
void  Sort(int h[], float f[], int n);
void  Print(int h[], float f[], int n);
void  CountJudgeScore(int ph[],float pf[],int m,float sf[],float f[],int n);
int main(void)
{
  int  j, m, n;
  int  sh[ATHLETE];               //选手的编号数组
  int  ph[JUDGE];                 //评委的编号数组
  float  sf[ATHLETE];             //选手的最后得分
  float  pf[JUDGE];               //评委的得分
  float  f[ATHLETE][JUDGE];           //评委给选手的评分
  printf("How many Athletes?");
  scanf("%d", &n);                            //输入选手人数
  printf("How many judges?");
  scanf("%d", &m);                            //输入评委人数
  for (j=1; j<=m; j++)  
  {
    ph[j] = j;
  }
  printf("Scores of Athletes:\n");
  CountAthleteScore(sh, sf, n, *f, m);    //现场为选手统计分数
  printf("Order of Athletes:\n");
  Sort(sh, sf, n);                            //选手得分排序
  Print(sh, sf, n);                           //打印选手名次表
  printf("Scores of judges:\n");
  CountJudgeScore(ph, pf, m, sf, *f, n);    //为各个评委打分
  printf("Order of judges:\n"); 
  Sort(ph, pf, m);                            //评委得分排序
  Print(ph, pf, m);                           //打印评委名次表
  printf("Over!Thank you!");
  return 0;
}
//函数功能:统计参赛选手的得分
//函数参数:整型数组sh,存放选手的编号
//          实型数组sf,存放选手的最后得分
//         整型变量n, 存放参赛选手的人数
//         实型数组f, 存放每个评委给选手的评分
//         整型变量m, 存放评委的人数
//函数返回值:无
void  CountAthleteScore(int sh[], float sf[], int n, float f[], int m)
{
  int  i, j;
  float  max, min;
  for (i=1; i<=n; i++)
  {
    printf("\nAthlete %d is playing." , i);
    printf("\nPlease enter his number code:");
    scanf("%d", &sh[i]);
    sf[i] = 0;
    max = 0;
    min = 100;
    for (j=1; j<=m; j++)
    {
        printf("Judge %d give score:", j);
        scanf("%f", &f[i*m+j]);
        sf[i] = sf[i] + f[i*m+j];
        if (max < f[i*m+j]) 
        {
          max = f[i*m+j];
        }
        if (min > f[i*m+j]) 
        {
          min = f[i*m+j];
        }
    }
    printf("Delete a maximum score:%.3f\n", max);
    printf("Delete a minimum score:%.3f\n", min);
    sf[i] = (sf[i] - max - min) / (m - 2);
    printf("The final score of Athlete %d is %.3f\n", sh[i], sf[i]);
  }
}
//函数功能:对分数从高到低排序
//函数参数:整型数组h,存放编号
//          实型数组f,存放最后得分
//          整型变量n,存放参评人数
//函数返回值:无
void Sort(int h[], float f[], int n)
{
  /*************** Begin ***************/
   int i,j;
    float t;
    for(i=1;i<=n-1;i++)
    {
        for(j=i+1;j<=n;j++)
        {
            if(f[i]<f[j])
            {
                t=f[i];
                f[i]=f[j];      //交换成绩
                f[j]=t;
                t=h[i];
                h[i]=h[j];      //交换编号
                h[j]=t;
            }
        }
    }
  /*************** End ***************/
}
//函数功能:输出名次表
//函数参数:整型数组h,存放编号
//          实型数组f,存放最后得分
//          整型变量n,存放参评人数
//函数返回值:无
void Print(int h[], float f[], int n)
{
  int  i;
  printf("number\tfinal score\torder\n");
  for (i=1; i<=n; i++)
  {
      printf("%6d\t%11.3f\t%5d\n", h[i], f[i], i);
  }
}
//函数功能:统计评委的得分
//函数参数:整型数组ph,存放评委的编号
//          实型数组pf,存放评委的得分
//          整型变量m, 存放评委的人数      
//          实型数组sf,存放选手的最后得分
//          实型数组f, 存放每个评委给选手的评分 
//          整型变量n, 存放参赛选手的人数    
//函数返回值:无
void CountJudgeScore(int ph[],float pf[],int m,float sf[],float f[],int n)
{
  /*************** Begin ***************/
   int i,j;
    float s,t;
    for(i=1;i<=m;i++)
    {
        s=0;
        for(j=1;j<=n;j++)
        {
            t=(f[j*m+i]-sf[j])*(f[j*m+i]-sf[j]);
            s+=t;
        }
        s=s/n;
        s=sqrt(s);
        pf[i]=10-s;
        ph[i]=i;
    }
    for(i=1;i<=m;i++)
    {
        printf("Judge %d give score:%.3f\n",ph[i],pf[i]);
    }
  /*************** End ***************/
}


相关文章
|
2月前
|
算法 C语言 C++
【C语言实战项目】三子棋游戏
【C语言实战项目】三子棋游戏
31 1
|
2月前
|
程序员 C语言
【C语言实战项目】猜数字游戏
【C语言实战项目】猜数字游戏
28 0
【C语言实战项目】猜数字游戏
|
6天前
|
存储 算法 C语言
C语言进阶:顺序表(数据结构基础) (以通讯录项目为代码练习)
C语言进阶:顺序表(数据结构基础) (以通讯录项目为代码练习)
|
2月前
|
程序员 C语言
【C语言实战项目】通讯录(动态增容版)
【C语言实战项目】通讯录(动态增容版)
21 0
|
2月前
|
存储 编译器 C语言
【C语言实战项目】通讯录
【C语言实战项目】通讯录
28 0
|
2月前
|
编译器 定位技术 C语言
【C语言实战项目】扫雷游戏
【C语言实战项目】扫雷游戏
27 0
|
3月前
|
存储 关系型数据库 MySQL
C语言/C++实战项目雷霆飞机(代码改进)
C语言/C++实战项目雷霆飞机(代码改进)
|
3月前
|
人工智能 C语言
C语言实战项目(AI代码)
C语言实战项目(AI代码)
|
3月前
|
存储 关系型数据库 MySQL
经典C语言/C++项目,雷霆战机
经典C语言/C++项目,雷霆战机
|
4月前
|
存储 C语言
C语言基础专题 - 通过案例历学 - 共用体
C语言基础专题 - 通过案例历学 - 共用体
24 0