大赛评分系统

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《程序设计基础(C语言)》

课程设计说明书

学院:XXXXXXXX

班级: XXXXXX

学号: XXXXXXXXX

姓名: XXX

教师: XXX

日期: 2012年月日

题目名称:大赛评分系统

算法分析:(提示:该部分内容填写课程设计所实现的系统具有哪些功能模块,每个模块能完成的功能及需要考虑的逻辑算法。)

1.该程序功能

(1)在大赛中,有十个评委为参赛的选手打分,分数为1~100分。选手最后得分为:去掉一个最高分和一个最低分后其余8个分数的平均值。

(2)同时对评委评分进行裁判,即在10个评委中找出最公平(即评分最接近平均分)和最不公平(即与平均分的差距最大)的评委。

2.程序实现

程序的要求是根据十个评委对参赛选手的打分情况,求出这个选手的平均成绩和最公平及最不公平的裁判。首先,我先考虑到程序的数据输入,可以用scanf 函数来解决,并将输入的数据存放于数组中。随后对存放在数组中的数据进行排序,这步为执行找出最不公平的裁判提高了效率,只需将排好序的数组的首尾分值与平均值进行比较即可。将排好序的数组中间的八个数求平均值即为此选手的成绩,可见排序法可大大的简化程序。接下来是最后一个任务就是找最公平的裁判,此过程我使用拆半法,先将靠近中间的一个裁判假设为最公平的,再将他前面的裁判与之比较,找出前半部分的最公平的裁判,再将之与后半部分的进行比较,得出最终的最公平的裁判。为了方便管理员更好的使用界面操作,我还设置了每输入完一组数据并得到结果后,或接着输入下组数据或按0跳出界面。

流程设计:

1.分数的输入部分;

2.对分数进行的排序部分;

3.计算平均值的部分;

4.找出最不公平裁判部分;

5.找出最公平裁判部分;

6.数据的输出部

代码设计:

#include

#include

#include /*调用conio函数*/

struct test

{

int num;

float s;

}; /*定义结构体类型的变量*/

void main()

{

int i,j,k,bad,good;

float ts,sum=0,aver=0,tm[10]; /*定义一个10元素数组*/

double min;

struct test data[10],*p[10],*temp; /*定义指向结构体数组的指针*/ do

{

sum=0;

aver=0;

printf("请输入10个分数------输入0(退出)\n");

for(i=0;i<10;i++) /*循环结构*/

{

data[i].num=i+1;

scanf("%f",&data[i].s);

/*分数的输入部分*/

if(data[0].s==0)

{

printf(0);

}

/*输入0则退出系统*/

}

for(i=0;i<10;i++)

{

tm[i]=data[i].s;

}

for(i=0;i<10;i++)

{

p[i]=&data[i];

}

for(i=0;i<9;i++)

{

k=i;

for(j=i+1;j<10;j++)

{

if(tm[k]

{

k=j;

}

if(k!=i)

{

ts=tm[i];

tm[i]=tm[k];

tm[k]=ts;

temp=p[i];

p[i]=p[k];

p[k]=temp;

}

/*对输入分值进行排序*/

}

}

for(i=1;i<9;i++)

{

sum+=p[i]->s;

}

aver=sum/8;

/*计算平均值的部分*/

printf("\n-----------------\n");

printf("平均分是:%.1f\n",aver);

printf("-----------------\n");

(fabs(p[0]->s-aver)>fabs(p[9]->s-aver))?(bad=0):(bad=9); /*通过绝对差值判断与平均值相差最大的裁判*/

min = fabs(p[5]->s-aver);

good=5;

/*暂定第六个为最公平裁判*/

for(i=4;i>0;i--)

{

if((fabs(p[i]->s-aver))<=min)

{

min=fabs(p[i]->s-aver);

good=i;

}

else break;

}

/*用拆半法先将前半部分与min比较*/

for(i=6;i<9;i++)

{

if((fabs(p[i]->s-aver))<=min)

{

min=fabs(p[i]->s-aver);

good=i;

}

else break;

}

/*用拆半法先将后半部分与min比较*/

printf("最不公平的裁判是%d ,打出的分数是%.1f\n",p[bad]->num,p[bad]->s);

/*打印出最不公平裁判和其分数*/

printf("最公平的裁判是%d ,打出的分数是%.1f\n",p[good]->num,p[good]->s);

/*打印出最公平裁判和其分数*/

printf("\n----------------------------------\n");

printf("下一位:");

/*打印出下一位*/

}while(1);

}

运行结果:

相关文档
最新文档