宜春学院数学与计算机科学学院
课程设计说明书
课 程 名 称: 计算机实训 课 程 代 码:
题 目: 大赛现场评分系统 年级/专业/班: 14计科1班 学 生 姓 名: 鄢剑涛 学 号: 1430101136 指 导 教 师: 马加清 开 题 时 间: 2014 年 12 月 28 日 完 成 时 间: 2014 年 12 月 29 日
宜春学院数学与计算机科学学院课程设计
一、设计任务与目的
以往各类大奖赛的报分与统分脱节,参赛选手的最后得分总要等到下一个选手赛完后才报,影响竞赛的正常节奏,也不能满足观众期待的心理。因此,为大奖赛编写一个现场统分的程序是很有必要的。
本程序很好的解决了这个问题。在各评委打分之后,就能及时通报评分结果。并且,在统计学生成绩的同时,为了给评委一个约束,有利于竞赛的公平公正性,增加了给评委女打分和排序功能。
本程序的任务:
1.大赛共有n个选手参赛,m(m>2)个评委一次为参赛选手评判打分,最高分为10分,最低为0分;
2.统分规则,在每个选手所得的m个得分中,去掉一个最高分,再去掉一个最低分,取平均分为该选手的最后得分;
3.根据n个选手的最后得分,从高到低排出名次表,以便获取获奖名单;
4.根据各选手的最后得分与各评委给该选手所评分的差距,对每个评委的评分准确性给出一个定量的评价。
二、设计方案
1.设置5个数组:sh[i]为第i个选手的编号,sf[i]为第i个选手的最后得分,ph[j]为第j个评委的编号,f[i][j]为第j个评委给第i个选手的评分,pf[j]为第j个评委的得分,作为评委水准的代表。
2.对n个参赛选手设置i循环(i从1变化到n);第i个选手上场,输入该选手的编号sh[i],在j循环(j从1变化到m)中依次输入第i个选手的m个得分f[i][j],每一个得分f[i][j]都累加到sf[i]中,同时比较:若f[i][j]>max,则max=f[i][j];若f[i][j] 3.评委给选手评分存在误差,即f[i][j]≠sf[n]是正常的,也是允许的。但如果某个评委给的某个选手的评分与个选手得到的最后成绩相差太大,则说明该评委的评分有失水准。可用下面的公式计算结果作为各个评委评分水准的定量评价。 pf[j] = pf[j] + (f[i*m+j] - sf[i]) * (f[i*m+j] - sf[i]); pf[j] = 10 - sqrt(pf[j] / n); pf[j]高的评委的评判水平高,依据m个评委的pf[j]值可打印出评委评测水平的高低的名次表。 三、程序代码 程序1大赛现场评分系统 #include 第1页 宜春学院数学与计算机科学学院课程设计 #define Athlete 40 #define Judge 20 /* 函数功能:统计参赛现场选手得分 函数参数:整型数组sh,存放选手的编号 实型数组sf,存放选手的最后得分 整型变量n,存放参赛选手的人数 实型数组f,存放每个裁判给选手的评分 整型变量m,存放评委的人数 */ void CountAthlereScore(int sh[], float sf[], int n, float f[],int m ) { float Max, Min; int i, j; for (i = 1;i <= n; i++) { printf (\选手%d正在比赛\\n\ printf (\请输入选手的编号:\ scanf (\ sf[i] = 0; Max = 0; Min = 100; for (j = 1;j <= m;j++) { printf (\裁判%d给出的分数为:\ scanf (\ 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 (\去除一个最低分:%.3f\\n\ printf (\去除一个最低分:%.3f\\n\ sf[i] = (sf[i] - Max - Min ) / (m -2); printf (\选手-的最终得分为%.3f\\n\ 第2页 宜春学院数学与计算机科学学院课程设计 printf (\ } } /* 函数功能:对分数从高到低排序 函数参数:整型函数h,存放编号 实型数组f,存放最后得分 整型变量n,存放参评人数 */ void Sort (int h[], float f[], int n) { int i, j, k, temp2; float temp1; //用选择排序法对选手的最终成绩进行排序 for (i = 1; i <= n-1; i++) { k = i; for (j = i+1; j <= n; j++) { if (f[j] > f[k]) { k = j; } if (i != k) { //交换分数 temp1 = f[k]; f[k] = f[i]; f[i] = temp1; //交换编号 temp2 = h[k]; h[k] = h[i]; h[i] = temp2; } } } //for (i = 1;i <= n; i++) //{ // printf (\编号:%d,成绩:%.3f\\n\ //} } 第3页
相关推荐: