资源描述
大奖赛评分系统C语言课程设计
21
2020年4月19日
文档仅供参考,不当之处,请联系改正。
学号
武汉理工大学华夏学院
课 程 设 计
课程名称 C语言课程设计
题 目 比赛评分系统的设计
专 业 软件工程
班 级 软件1121班
姓 名
成 绩 _________________
指导教师 王绪梅
2月25日至 3月1 日
课程设计任务书
学生姓名: 专业班级: 软件1121
指导教师: 王绪梅 工作单位: 信息工程系
设计题目: 比赛评分系统的设计
要求完成的主要任务:
1. 任务描述
学校要举办一个歌咏比赛,请设计一个比赛评分程序,对参赛的选手进行评分。(给分的原则为:满分为10分;计分方法是:裁判给出分数后,去掉两个最高分和两个最低分后的平均分为选手的最后得分(精确到小数点后两位).)
要求系统实现以下功能:
⑴ 设参赛人数为n位(n<50),裁判人数为m(m为不少于11的奇数)位;
⑵ 系统能录入参赛人员资料;参赛选手按序号依次比赛,统计最后得分;
⑶ 能够查阅选手的得分情况;
⑷ 比赛结束后,显示出“名次表”;
⑸ 公布一、二、三等奖的得奖选手名单。
2. 本课程涉及的知识点
变量的定义、输入和输出函数、数组的应用、循环语句、选择语句等等。
3. 要求完成的任务
⑴ 完成整个规定任务的设计及调试,最后得出正确结果,并经教师检查及答辩;
⑵ 写出规范的课程设计报告,在设计思想描述时一定要画出程序算法流程图;
⑶ 课程设计结束后交设计说明书等文档和设计内容:
⑷ 从2月26日起,学生每天至少要到设计教室半天以上;
设计报告撰写格式要求:
设计报告的主要内容是详细写出在设计过程中所用到的主要技术或方法;
课程设计报告按通用格式书写,具体要求见资料:“课程设计说明书的书写内容与格式”
时间安排:
第一天: 学生先在实验室集中,由指导教师介绍课程设计的目的、布置任务后选题;
第二天-第四天:学生在实验室完成设计,经教师检查并回答提问,确认设计完成;
第五天: 教师在计算机上先检查设计报告、学生修改后打印提交
指 导 教 师 签 字: 2月 20日
系 主 任 签 字: 2月 23日
目 录
1.设计题目 5
2.开发环境 5
3. 开发工具 5
4.完成时间 5
5. 设计思想 5
6. 设计过程及设计步骤 6
7. 测试运行 6
8. 评价与修订 7
9. 设计体会 7
10. 参考文献 8
《比赛评分系统的设计》课程报告
1 设计题目
比赛评分系统的设计
2 开发环境
2.1硬件环境
微机系列,内存在1G以上
2.2软件环境
Microsoft Windows XP, Microsoft Windows 7;
3.开发工具
Visual C++6.0
4.完成时间
.2.25---- .3.1
5.设计思想
首先根据设计题目思考设计的要点,确定要做的事情,在网上翻阅了许多资料都过于复杂,最后我决定用类似for结构,switch结构一些简单的结构写出程序.然后根据思想画出程序框图,然后列出基本步骤完成程序,再运行测试,最后修改完善整个程序程序。
6.设计过程及设计步骤
6.1 算法设计
比赛评分系统的算法流程图如图6-1所示。
开始
输入选手数及裁判数m,n
k=0
k++
k<=n?
i=0
i++
i<=m?
输入评分a[i]
sum=0
j=0
j++
j<=m?
sum=sum+a[j]
pj=(sum-a[1]-a[2]-a[m]-a[m-1])/(m-4)
b[n]=pj
A
是
是
是
否
否
否
A
j=0
j++
j<=n?
x=0,k=0
x++
x<=n?
b[j]>b[x]?
p=n-k
p==1?
k++
p=0
B
p==2?
p==3?
输出第一名
输出第二名
输出第三名
是
是
是
是
是
否
否
否
否
否
B
v=0
v++
v<=50?
j=0
j++
k=0
j<=n?
x=0
x++
x<=n?
b[j]>b[x]?
p=n-k
p==v?
输出该选手成绩
结束
是
是
是
k++
是
是
否
否
否
否
图6-1 比赛评分系统的算法流程图
6.2比赛评分系统的设计步骤
1.宏定义符号常量N(选手数),M(评委数),P(评分选项数);
2.定义评委评分,选手得分的数组fen[50];
3.用for循环嵌套经过评委数量与选手数量控制评分项的完整输入,再用scanf语句对应二维数组a[]使评分与选手结合,在k=N时跳出循环;
4.用冒泡法将评分按大小排序,接着去除二个最高分与二个最低分算出选手最终得分;部分程序如下:
for(b=0;b<n;b++)
{
for(i=0;i<m;i++)
{
printf("请%d号裁判输入对%d号选手评分",i+1,b+1);
scanf("%d",&fen[i]);
}
for(j=0;j<m;j++)
for(x=j+1;x<m;x++)
if(fen[j]<fen[x])
{zhong=fen[x];
fen[x]=fen[j];
fen[j]=zhong;
}
c++;
sum=0;
for(a=0;a<m;a++)
sum=sum+fen[a];
pj=(sum-fen[0]-fen[1]-fen[m-2]-fen[m-1])/(m-4);
he[c]=pj;
printf("去掉2个最高分和2个最低分号%d选手的平均分为%f分\n",b+1,pj);
}
5.用一个for循环经过x控制姓名数量,经过scanf函数实现选手姓名的录入,在x<n是跳出循环;部分程序如下:
for(v=1;v<50;v++)
{
for(j=1;j<=n;j++)
{k=0;
for(x=1;x<=n;x++)
if(he[j]>he[x])
k++;
p=n-k;
if(p==v)
{printf(" 第%d号选手获得第%d名成绩为%f\n",j,p,he[j]);break;}
}
}
6.用printf函数和for循环将最后的比赛名次与获奖选手姓名一一对应的完整输出;
7.程序调试
1.第一次运行程序时,发现人数设定不符合题目要求,重新修改后运行结果良好;
图7-1 输入数据的运行截图
第二次运行程序成功后,发现奖项设置不符合实际情况,返回程序做出修改后运行结果良好;
图7-2 运行结果截图
8.遇到的问题及不足
8.1评价
1.程序没用复杂的结构,具有简洁性;
2.程序不够贴合实际,还需做出更进一步的设计;
3.程序设计的能力还需加强;
4.没有使用文件系统,程序中信息无法长期保存和连续使用;
8.2修订
1.对程序中的人数和奖项设定做了修改,形成动态改变,使之更具有通用性;
2.对程序中的评分精确度做出了改正,使之保留得分的小数点后2-3位;
3.程序不能够做到灵活可变,但试着改进后发现不成功;
4.应在程序中加入数据文件的应用。
10.参考文献
[1] 谭浩强•C语言程序设计教程•北京:清华大学出版社, 5月
[2] 王路明•C语言程序设计教程•北京:北京邮电大学出版社, 5月
[3] 谭浩强·C++程序设计·北京:清华大学出版社·
11. 实训体会
经过这次实训也让我们同学之间的关系更加融洽。在制作作品的过程中我深深感受到了同学们互帮互助的融洽学习氛围。每当遇到困难时我身边的同学都会很热心的过来提供帮助。正是因为她们帮我解决了一个又一个的困难。我的作品才能够得以完成。经过这次实训我深刻体会到了同学之情的珍贵。我相信在今后的日子里一定会加倍的珍惜这份情谊。
这次实训还让我体会到了成功的喜悦。当经过努力把那些作品完成的时候,那种成就感,我想只有设计者本人能够体会。有了这次经历我相信我以后一定会认真的对待每个任务,争取把每件事情都做到最好。
这次的实训真真是苦不堪言啊,看着选好的题目,比赛评分系统的设计应该还算比较简单的了,但苦苦思索就是无法动手开编,那种完全没有头绪的感觉,直叫人为当初没有学好专业知识而叫苦不迭,可还是要将实训进行下去,只好依靠互联网的神奇力量找了一份参考,做出修改和设定后就算是完成了,运行成功后再次作了修改。
虽然报告是勉强过关了,但我能感觉到的是经过这次的实训,我们除了抗压能力隐忍能力耍小聪明的能力强了那么一丁点而已,这次的实训让我们真真领会了学习的严谨性和学好专业知识的重要性,现在的我们明白了掌握专业知识的必要性,因此更加迫切的需要黄老师带领我们去学习真正的专业技能,更加真实的希望以后的实训更加有长进了。
设计过程中现场提问(或答辩)记载:
1.问:对于选手和评委的人数设定是否符和要求?
答:是严格按照题目要求来做的,选手,评委都是可输入的。
2. 问:对于各奖项人数的设定是否符合实际情况?
答:一等奖设定的是1名,二等奖设定的是2名,三等奖设定的是3名,还算符合实际。
3. 问:一等奖的选手得分仿佛过于精确了,小数点后的位数是否能够减少几位?
答:是修改的时候没有改到的地方,在输出时%f改为%.2f即可解决。
指导教师评语:
成绩评定等级:
指导教师(签名):
年 2 月 17 日
附录:源程序代码
比赛评分系统的设计程序
#include<stdio.h>
main()
{ int n,m,b,s,i,j,x,a,fen[50],c=0,k=0,p,v,d,e,g;
double f,zhong=0,sum=0,pj,he[51];
printf("请输入比赛选手人数n以及裁判人数m中间以逗号隔开:");
scanf("%d,%d",&n,&m);
for(b=0;b<n;b++)
{
for(i=0;i<m;i++)
{
printf("请%d号裁判输入对%d号选手评分",i+1,b+1);
scanf("%d",&fen[i]);
}
for(j=0;j<m;j++)
for(x=j+1;x<m;x++)
if(fen[j]<fen[x])
{zhong=fen[x];
fen[x]=fen[j];
fen[j]=zhong;
}
c++;
sum=0;
for(a=0;a<m;a++)
sum=sum+fen[a];
pj=(sum-fen[0]-fen[1]-fen[m-2]-fen[m-1])/(m-4);
he[c]=pj;
printf("去掉2个最高分和2个最低分号%d选手的平均分为%f分\n",b+1,pj);
}
printf("\n *******获奖名单******\n");
for(j=1;j<=n;j++)
{ k=0;
for(x=1;x<=n;x++)
if(he[j]>he[x])
k++;
p=n-k;
if(p==1)
printf(" 第%d名选手获得一等奖\n",j);
if(p==2)
printf(" 第%d名选手获得二等奖\n",j);
if(p==3)
printf(" 第%d名选手获得三等奖\n",j);
}
p=0;
printf("\n *******成绩表*******\n");
for(v=1;v<50;v++)
{
for(j=1;j<=n;j++)
{k=0;
for(x=1;x<=n;x++)
if(he[j]>he[x])
k++;
p=n-k;
if(p==v)
{printf(" 第%d号选手获得第%d名成绩为%f\n",j,p,he[j]);break;}
}
}
for(g=1;g==1;)
{printf("\n是否继续查询选手成绩?1.是 2.否\n");
scanf("%d",&e);
switch(e)
{case 1:
printf("输入选手序号查询成绩:");
scanf("%d",&d);
printf("该选手的最终成绩为%f分",he[d]);
break;
case 2:
g=0;break;
default:printf("输入有误!");break;
}
}
}
展开阅读全文