C语言课程设计之评分系统.doc_第1页
C语言课程设计之评分系统.doc_第2页
C语言课程设计之评分系统.doc_第3页
C语言课程设计之评分系统.doc_第4页
C语言课程设计之评分系统.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课 程 设 计课程名称 c语言课程设计 题 目 _专 业 _班 级 _学 号 _姓 名 _成 绩 _指导教师 _年_ 月_日 课程设计任务书设计题目:设计比赛评分系统 (给分原则:满分为10分;裁判给出分数后,去掉一个最高分和一个最低分后的平均分为选手的最后得分(精确到小数点后两位)。)设计目的:1. 巩固和加深课堂所学知识;2. 将课本上的理论知识和实际应用有机的结合起来,培养同学们分析和解决实际问题的能力; 3. 学会编制结构清晰、风格良好、数据结构选择恰当的c语言程序;设计任务:(在规定的时间内完成下列任务)功能:1、 设参赛人数为 为裁判人数为 (不少于11的奇数)位,2、 录入参赛人员的资料和得分情况好,统计最后得分,3、 按最后得分结果从高分到低分排序,4、 公布一、二、三等奖的得奖选手名单。5、 此系统能够查询选手的得分情况。具体要求:设计报告按统一撰写格式要求,应包含以下内容:1、 题目:2、设计目的:2、设计内容:写出简要的程序功能描述、程序运行条件所需工具软件、输入/输出描述等。3、程序结构: 函数定义说明; 用到的库函数(宏)的功能说明、调用关系说明、参数传送方式说明等; 主要算法描述等(各模块功能实现)。13、设计要求:绘制设计系统的结构层次图,各功能实现的算法、绘制结构化流程图。程序流程图、源程序(程序必须有简单注释,源程序若太长,可作为附录)设计输入、输出界面。(输出)5、(1)程序结构设计特点;(2)设计、调试程序心得、体会或不足。设计报告:(一)主程序的流程 程序先通过宏定义符号常量n(选手数),m(评委数),p(评分选项数)的值分别为19,17,13.这样不仅简单不易出错,而且便于常量的更改,只需改变#include命令行就可以一改全改。 接着定义了评委评分,选手得分和选手姓名的数组以便最终将选手最后得分与姓名对应。进入程序主体,要想将比赛结果完整的输出,我们必须要让程序在将评委得分与选手姓名输入时自动计算出选手最终得分以及实现名次排序与姓名的一一对应。为了实现19位选手得分的正确录入,先用for循环嵌套通过评委数量与选手数量控制评分项的完整输入,再用scanf语句对应二维数组a使评分与选手结合,在k=n时跳出循环,至此评分录入完毕。评分录入后还得计算出选手最终得分。为了去掉一个最高分,一个最低分,程序调用自编函数sort将评分按大小排序,接着调用average函数去除一个最高分与最低分算出选手最终得分。最后将选手得分排序。公布获奖结果时还必须出现选手的姓名。接着再用一个for循环通过k控制姓名数量,通过scanf函数实现选手姓名的录入,在kn是跳出循环,至此选手姓名录入结束。最终的获奖名次必须与选手姓名一一对应。调用自编函数arran,通过一维数组num与二维数组name将上面的评分与选手姓名一一对应。最后程序用printf函数和for循环将最后的比赛名次与获奖选手姓名一一对应的完整输出,程序到此结束。 (二)各分程序模块之间的调用关系主程序由三个程序模块构成,分别为自编函数sort,average,arran。每一个模块用来实现一个特定的功能,由主程序调用其他函数,其他函数也可以互相调用,以减少重复编写程序段的工作量。在选手评分录入完成后,为了准确计算出选手的最终得分,程序首先调用了average函数。从六个评委的评分中先通过调用sort函数将评分按大小进行排序,然后去掉一个最低分,去掉一个最高分,用average函数算出平均数aver作为选手得分。选手姓名录入完成以及选手最终得分名次排序后,还必须将选手得分与选手姓名一一对应,程序在此调用arran函数。arran函数通过定义一维数组num和二维数组name实现了选手得分以及选手姓名的一一对应。函数调用至此结束。如:int i,j,max;float temp1;char temp219;for(i=0;in;i+)max=i;for(j=i;jn;j+)if(nummaxnumj)max=j;temp1=numi;strcpy(temp2,namei);numi=nummax;strcpy(namei,namemax);nummax=temp1;strcpy(namemax,temp2);首先我们先定义一个整型变量,i,j。和一个最大的的值max变量,temp1表示分数的高低,然后再定义一个字符型数组temp219。该数组表示可容纳19个元素。接下来在利用for语句进行循环来把评分的名次给排列起来,用for语句,当i=0,in;i+表示第一次循环max=i,再利用for语句赋予i=j使jn;j+(for语句循环变量赋予初值,循环条件,循环变量增值语句)即表示当max为第i次循环时得到这i=j成本,而jn;j+并且满足if语句这个最大值评分分数小于第j次循环所得分数时,那么这个最高分数便为第j次循环的最大值。那么此时分数temp1=numi然后再利用strcpy函数(它表示字符串复制函数作用是将字符数串2复制到字符数组1中去巴表示名字的定义变量temp2赋予给temp1所表示的分数,也就是说第i次for循环所得到的最高分利用字符串函数strcpy(namei,namemax)所示的为所获最高分的那个让你的名字赋予给第i个名字,也就是第i个名字所得分数为演讲比赛分数最高。最后一次循环来排出评分的高低并把相应的名字进行一一对应上去,以此结束了整个编程程序的循环。运行程序使用说明:运行程序时,当提示:请输入第k+1位选手的成绩时,输入12个小于等于50的数,数与数之间用空格键隔开,每输入12个数据后按下回车键,将进行下一位选手成绩的输入,依次下去,当输完八位参赛选手的成绩后,按下回车键,系统将提示输入参赛选手的姓名,此时从键盘上输入八位参赛选手的姓名(vc+ 17.0支持输汉字的功能),姓名与姓名之间同样用空格键隔开,输完姓名后,按下回车键,将出现运行结果。四.源程序及系统文件使用说明源程序如下:#include#include#define n 19#define m 17#define p 13 main()void sort(float array,int n);float average(float arraym);void arran(float num,char namen19);float bm;int i,j,k;float amp;float numn;char namen19;for (k=0;kn;k+)for(i=0;im;i+) bi=0;printf(请输入第%d位参赛选手的成绩:,k+1);for (i=0;im;i+)for(j=0;jp;j+)scanf(%f,&aij);bi=bi+aij;sort(b,m);numk=average(b);printf(n请输入参赛选手的姓名:n );for(k=0;kn;k+)scanf(%s,namek); arran(num,name); printf(nnn参赛选手成绩如下:nn); for(i=0;in;i+) printf(%10s %.3f分nn,namei,numi); printf(本次比赛选手获奖结果如下:nn); printf( 一等奖:n %10s %.3f分nn 二等奖:n ,name0,num0); for(k=1;k3;k+)printf(%10s %.3f分 ,namek,numk); printf(nn 三等奖:n ); for(k=3;k5;k+) printf(%10s %.3f分 ,namek,numk);printf(n);void sort(float array,int n ) int i,j,k;float t; for(i=0;in-1;i+) k=i; for(j=i+1;jn;j+) if(arrayjarrayk) k=j; t=arrayk;arrayk=arrayi;arrayi=t; void arran(float num,char namen19)int i,j,max;float temp1;char temp219;for(i=0;in;i+)max=i;for(j=i;jn;j+)if(nummaxnumj)max=j;temp1=numi;strcpy(temp2,namei);numi=nummax;strcpy(namei,namemax);nummax=temp1;strcpy(namemax,temp2);float average(float arraym)void sort(float array,int n );int i;float aver,sum;sort(array,m);sum=array1;for(i=2;im-1;i+)sum=sum+arrayi;aver=sum/(m-2);return(aver);1.本程序共用了3个函数,分别是函数sort、函数average和函数arran,下面分别对他们进行阐述:函数sortvoid sort(float array,int n ) int i,j,k;float t; for(i=0;in-1;i+) k=i; for(j=i+1;jn;j+) if(arrayjarrayk) k=j; t=arrayk;arrayk=arrayi;arrayi=t; 主要用于对每位参赛选手的成绩进行排序,从大到小排列,此函数用了两个for语句for(i=0;in-1;i+) k=i; for(j=i+1;jn;j+) if(arrayjarrayk) k=j; t=arrayk;arrayk=arrayi;arrayi=t; ,第一个for语句主要用于外层循环即从第一位选手到第八位选手的循环,第二个for语句主要适用于由六位评委产生的那六的分的循环;一个if语句和一个换值语句。if语句用于数据的比较,如果满足要求,换值语句用于把它们的值交换一下,依次进行下去,从而对每位选手的成绩进行排序。函数average float average(float arraym)void sort(float array,int n );int i;float aver,sum;sort(array,m);sum=array1;for(i=2;im-1;i+)sum=sum+arrayi;aver=sum/(m-2);return(aver);用了一个数组array、调用了sort函数、用了一个for循环语句,调用了sort函数,每位选手产生的六组数据,成绩放在数组中,用for语句循环从而实现对每位选手的分数进行处理,处理时从第二个加到第五个数,然后除以四,从而实现了去掉一个最高分,去掉一个最低分,求剩余评委的平均分,即是每位选手的最终得分,用此函数实现了对分数的处理。函数arran void arran(float num,char namen19)int i,j,max;float temp1;char temp219;for(i=0;in;i+)max=i;for(j=i;jn;j+)if(nummaxnumj)max=j;temp1=numi;strcpy(temp2,namei);numi=nummax;strcpy(namei,namemax);nummax=temp1;strcpy(namemax,temp2);主要是用于对每位参赛选手的分数进行排序,其姓名也随之调整。此函数用了一维数组num和二维数组name、用了两个for语句、一个if语句和复制函数strcpy,两个for语句形成了内外两层循环,if语句用于选手成绩的比较,从大到小进行排序,复制函数strcpy把分数和选手的姓名放在一起,当分数在排序的过程中调整的时候,其姓名也随之进行调整。2.程序引用了一维数组array、b、num和二维数组name、a。3.程序使用了三个符号常量 #define n 19 #define m 17 #define p 2 ,在下面的程序中多次使用这些常数,在调整选手数、评委数和评委打分项数时,需要改动很多处的数据,不仅麻烦而且很容易出错,使用了符号常量后只需改动一项即可,方便、简单。4.程序还引用了变量n、i、j、k。5.程序多次使用for循环语句,如for(i=0;im;i+) bi=0;printf(请输入第%d位参赛选手的成绩:,k+1); 用于循环提示输入低k+1位选手的成绩。程序如下:#include#include#define n 19main()void sort(float array,int n);float average(float array17);void arran(float num,char namen19);float b17;int i,j,k;float a172;float numn;char namen19;for (k=0;kn;k+)for(i=0;i17;i+) bi=0;printf(请输入第%d位参赛选手的成绩:,k+1);for (i=0;i17;i+)for(j=0;j2;j+)scanf(%f,&aij);bi=bi+aij;sort(b,17);numk=average(b);printf(请输入参赛选手的姓名:nnn);for(k=0;kn;k+)scanf(%s,namek); arran(num,name); printf(nnn参赛选手成绩如下:nn); for(i=0;in;i+) printf(%10s %f分nn,namei,numi); printf(本次比赛选手获奖结果如下:nn); printf(一等奖:%10s %f分nn二等奖:n,name0,num0); for(k=1;k3;k+)printf(%10s %f分 ,namek,numk); printf(n三等奖:nn); for(k=3;k5;k+) printf(%10s %f分 ,namek,numk);void sort(float array,int n ) int i,j,k;float t; for(i=0;in-1;i+) k=i; for(j=i+1;jn;j+) if(arrayjarrayk) k=j; t=arrayk;arrayk=arrayi;arrayi=t; void arran(float num,char namen19)int i,j,max;float temp1;char temp219;for(i=0;in;i+)max=i;for(j=i;jn;j+)if(nummaxnumj)max=j;temp1=numi;strcpy(temp2,namei);numi=nummax;strcpy(namei,namemax);nummax=temp1;strcpy(namemax,temp2);float average(float array17)void sort(float array,int n );int i;float aver,sum;sort(array,17);sum=array1;for(i=2;in17=m2=p0=p0=ibi=0输出第 k+1位选手的成绩i+1=iii0=j输入aijbi+0ij=bij numkik输入namekii输出nameinumiik输出“namek,numk”kk输出“namek,numk”k5结 束nynny五.实习体会 一周的课程设计已经结束了。回想学习c语言 的过程中,既有快乐又有烦恼。 从领到书的那一刻,我就很郁闷,c 语言程序设计到底事学什么的,有什么用。刚开始上课时,还在迷茫这门课程是用来做什么的。不过,这些感受都是在对这门课程不了解的情况下产生的。后来慢慢的接触多了,听老师讲的多了,了解多了,渐渐的产生了兴趣。尤其是学到语句和函数时,上机操作程序,经过编译,调试和运行后,出现界

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论