C语言大赛现场评分系统
- 格式:doc
- 大小:227.50 KB
- 文档页数:9
华中师范大学传媒学院课程设计课程名称C语言课程设计题目__________________专业__________________ 班级__________________ 学号__________________ 姓名__________________ 成绩__________________ 指导教师_________________________年_______ 月_______日课程设计任务书设计题目:设计比赛评分系统(给分原则:满分为10分;裁判给出分数后,去掉一个最高分和一个最低分后的平均分为选手的最后得分(精确到小数点后两位)。
)设计目的:1. 巩固和加深课堂所学知识;2. 将课本上的理论知识和实际应用有机的结合起来,培养同学们分析和解决实际问题的能力;3. 学会编制结构清晰、风格良好、数据结构选择恰当的C语言程序;设计任务:(在规定的时间内完成下列任务)功能:1、设参赛人数为为裁判人数为(不少于11的奇数)位,2、录入参赛人员的资料和得分情况好,统计最后得分,3、按最后得分结果从高分到低分排序,4、公布一、二、三等奖的得奖选手名单。
5、此系统能够查询选手的得分情况。
具体要求:设计报告按统一撰写格式要求,应包含以下内容:1、题目:2、设计目的:2、设计内容:写出简要的程序功能描述、程序运行条件所需工具软件、输入/输出描述等。
3、程序结构:①函数定义说明;②用到的库函数(宏)的功能说明、调用关系说明、参数传送方式说明等;③主要算法描述等(各模块功能实现)。
13、设计要求:①绘制设计系统的结构层次图,各功能实现的算法、绘制结构化流程图。
②程序流程图、源程序(程序必须有简单注释,源程序若太长,可作为附录)③设计输入、输出界面。
(输出)5、(1)程序结构设计特点;(2)设计、调试程序心得、体会或不足。
附录:①参考文献百度文库C语言设计(第三版)谭浩强清华大学出版社C语言设计试题汇编(第二版)搜搜文献C语言上机指导指导教师签名:2011 年9 月5日教研室主任(或责任教师)签名:2011 年月日。
一、运动会成绩处理基本过程如下:本系统的特色:(1) 本系统采用模块化(自定义函数)开发方法,基础信息处理模块、运动员检录信息处理模块、预赛信息处理模块、决赛信息处理模块(2) 本系统采用由总装模块(主函数)调用的方式实现各个功能模块的集成。
(3)设置一全局变量,使程序具有报告运动会比赛项目完成情况的功能。
(4)当比赛开始时候,本系统打开运动会开始画面,项目全部完成的时候,本系统将打开结束画面。
存储检录信息的数据对象基础信息录入模块:/*把参赛运动员的基础信息录入到数组变量中保存,下述程序仅能完成一批次6个人的运动员基础信息处理任务)*/#define num 6#define L1 7main(){Int i;char sports_no[num][L1], student_no[num][L1],name[num][L1],goods[num]={0,0,0,0,0,0};for(i=1;i<=num;i=i+1){printf("\ninput %d ‘s sports_no :",i);scanf("\%s", sports_no[i-1]);printf("\ninput %d ‘s student_no :",i );scanf("%s", student_no[i-1]);printf("\ninput %d ‘s name:",i);scanf("%s", name[i-1]);}\*把运动员基本信息保存在文件中*\#include<stdio.h>main()FILE *fp;int i;char name[2][7];fp=fopen("lds.txt","w");for(i=1;i<=2;i++){scanf("%s",name[i-1]);fwrite(name[i-1],7,1,fp);}fclose(fp);}\*从文件中输出运动员基本信息*\ #include<stdio.h>main(){FILE *fp;int i;char name[2][7];fp=fopen("lds.txt","r");for(i=1;i<=2;i++)fread(name[i-1],7,1,fp);}fclose(fp);printf("\n");for(i=1;i<=2;i++) printf("\n%s",name[i-1]);}预赛处理:(1)填写检录名单(具有手动终止检录功能,下述程序仅能完成一批次最多6个人的检录信息处理任务)main(){int i;int k;char sports_no[6][7]={"","","","","",""}; \\本语句形成简单表,而要形成多列表则要定义字符型三维数组。
C语言程序设计设计题目: 竞赛比赛打分系统专业...……………………….......班级...... ……………......姓名: …………….学号.. ………………….........目录一总体设计(包含几大功能模块) (1)二详细设计(各功能模块的具体实现算法——流程图) (4)三调试分析(包含各模块的测试用例, 及测试结果) 63.1源程序 (6)3.2调试与测试 (12)四总结 (15)一总体设计(包含几大功能模块)I. insert record to a fileN .search record by nameC.searc.recor.b.codeL.lis.al.th.recordsS.sort the records by total二、详细设计(各功能模块的具体实现算法——流程图)2.1各函数的功能和实现I. insert record to a file:输入田径记录分数文件。
可用函数void input来实现此操作N .search record by name输入田径运动员的名字C.searc.recor.b.code输入田径运动员号码可用void find()来实现L.lis.al.th.records分数列表S.sort the records by total计算总分数Q.quit退出可用一个函数exit()来实现, 首先将信息保存到文件中, 释放动态创建的内存空间, 再退出此程序。
流程图详见A4纸上手绘三调试分析(包含各模块的测试用例, 及测试结果)3.1源程序#include <stdio.h>#define JUDEGNUM 3 /* 裁判数*/#define NAMELEN 20 /* 姓名最大字符数*/#define CODELEN 10 /* 号码最大字符数*/#define FNAMELEN 80 /* 文件名最大字符数*/#define BUFFSIZE 128 /* 缓冲区最大字符数*/char judgement[JUDEGNUM][NAMELEN+1] = {"judgementA","judgementB","judgementC"}; struct AthleteScore{char name[NAMELEN+1]; /* 姓名*/char code[CODELEN+1]; /* 学号*/int score[JUDEGNUM]; /* 各裁判给的成绩*/int total; /* 总成级*/};struct LinkNode{char name[NAMELEN+1]; /* 姓名*/char code[CODELEN+1]; /* 号码*/int score[JUDEGNUM]; /* 各裁判给的成绩*/int total; /* 总成级*/struct LinkNode *next;}*head; /* 链表首指针*/int total[JUDEGNUM]; /* 各裁判给的总成绩*/FILE *filepoint; /* 文件指针*/char filename[FNAMELEN];/* 文件名*//* 从指定文件读入一个记录*/int GetRecord(FILE *fpt,struct AthleteScore *sturecord){char buf[BUFFSIZE];int i;if(fscanf(fpt,"%s",buf)!=1)return 0; /* 文件结束*/strncpy(sturecord->name,buf,NAMELEN);fscanf(fpt,"%s",buf);strncpy(sturecord->code,buf,CODELEN);for(i=0;i<JUDEGNUM;i++)fscanf(fpt,"%d",&sturecord->score[i]);for(sturecord->total=0,i=0;i<JUDEGNUM;i++)sturecord->total+=sturecord->score[i];return 1;}/* 对指定文件写入一个记录*/void PutRecord(FILE *fpt,struct AthleteScore *sturecord){int i;fprintf(fpt,"%s\n",sturecord->name);fprintf(fpt,"%s\n",sturecord->code);for(i=0;i<JUDEGNUM;i++)fprintf(fpt,"%d\n",sturecord->score[i]);return ;}/* 显示运动员记录*/void ShowAthleteRecord(struct AthleteScore *rpt){int i;printf("\nName : %s\n",rpt->name);printf("Code : %s\n",rpt->code);printf("score :\n");for(i=0;i<JUDEGNUM;i++)printf(" %-15s : %4d\n",judgement[i],rpt->score[i]);printf("Total : %4d\n",rpt->total);}/* 列表显示运动员成绩*/void Listathleteinfo(char *fname){FILE *fp;struct AthleteScore s;clrscr();if((fp=fopen(fname,"r"))==NULL){printf("Can't open file %s.\n",fname);return ;}while(GetRecord(fp,&s)!=0){ShowAthleteRecord(&s);}fclose(fp);return;}/* 构造链表*/struct LinkNode *CreatLinklist(char *fname){FILE *fp;struct AthleteScore s;struct LinkNode *p,*u,*v,*h;int i;if((fp=fopen(fname,"r"))==NULL){printf("Can't open file %s.\n",fname);return NULL;}h=NULL;p=(struct LinkNode *)malloc(sizeof(struct LinkNode));while(GetRecord(fp,(struct AthleteScore *)p)!=0){v=h;while(v&&p->total<=v->total){u=v;v=v->next;}if(v==h)h=p;elseu->next=p;p->next=v;p=(struct LinkNode *)malloc(sizeof(struct LinkNode));}free(p);fclose(fp);return h;}/* 顺序显示链表各表元*/void OutputLinklist(struct LinkNode *h){clrscr();while(h!=NULL){ShowAthleteRecord((struct AthleteScore *)h);printf("\n");while(getchar()!='\n');h=h->next;}return;}/* 按运动员姓名查找记录*/int SearchbyName(char *fname, char *key){FILE *fp;int c;struct AthleteScore s;clrscr();if((fp=fopen(fname,"r"))==NULL){printf("Can't open file %s.\n",fname);return 0;}c=0;while(GetRecord(fp,&s)!=0){if(strcmp(,key)==0){ShowAthleteRecord(&s);c++;}}fclose(fp);if(c==0)printf("The athlete %s is not in the file %s.\n",key,fname);return 1;}/* 按运动员号码查找记录*/int SearchbyCode(char *fname, char *key){FILE *fp;int c;struct AthleteScore s;clrscr();if((fp=fopen(fname,"r"))==NULL){printf("Can't open file %s.\n",fname);return 0;}c=0;while(GetRecord(fp,&s)!=0){if(strcmp(s.code,key)==0){ShowAthleteRecord(&s);c++;break;}}fclose(fp);if(c==0)printf("The athlete %s is not in the file %s.\n",key,fname);return 1;}void InsertRecord(){FILE *fp;char c,i,j,n;struct AthleteScore s;clrscr();printf("Please input the athletes score record file's name: \n");scanf("%s",filename);if((fp=fopen(filename,"r"))==NULL){printf("The file %s doesn't exit.\ndo you want to creat it? (Y/N) ",filename);getchar();c=getchar();if(c=='Y'||c=='y'){fp=fopen(filename,"w");printf("Please input the record number : ");scanf("%d",&n);for(i=0;i<n;i++){printf("Input the athlete's name: ");scanf("%s",&);printf("Input the athlete's code: ");scanf("%s",&s.code);for(j=0;j<JUDEGNUM;j++){printf("Input the %s mark: ",judgement[j]);scanf("%d",&s.score[j]);}PutRecord(fp,&s);}fclose(fp);}}fclose(fp);return;}int main(){int i,j,n;char c;char buf[BUFFSIZE];while(1){clrscr();printf("\n-------------- Input a command -----------\n");printf(". ..inser.recor.t..file......|\n");printf(". .......|\n");printf(". ..searc.recor.b.code.......|\n");printf(". ..lis.al.th.records....... |\n");printf(". ..sor.th.record.b.total.....|\n");printf(". ..quit............... |\n");printf("------------------------------------------\n");printf("Please input a command:\n");scanf("%c",&c); /* 输入选择命令*/switch(c){case 'i':InsertRecord();getch();break;case 'n': /* 按运动员的姓名寻找记录*/printf("Please input the athlete's name:\n");scanf("%s",buf);SearchbyName(filename,buf);getch();break;case 'c': /* 按运动员的号码寻找记录*/printf("Please input the athlete's code:\n");scanf("%s",buf);SearchbyCode(filename,buf);getch();break;case 'l': /* 列出所有运动员记录*/Listathleteinfo(filename);getch();break;case 's': /* 按总分从高到低排列显示*/if((head=CreatLinklist(filename))!=NULL)OutputLinklist(head);getch();break;case 'q':return 1;default:break;}}return 1;}3.2调试与测试主要程序运行结果: 运行开始I. insert record to a fileN .search record by name C.searc.recor.b.codeL.lis.al.th.recordsS.sort the records by total五.设计总结经过一周的课程设计, 我学到了很多东西:①巩固和加深了对数据结构的理解, 提高综合运用本课程所学知识的能力。
c语言自动评分系统的设计与实现设计一个C语言的自动评分系统需要明确评分规则和评分目标。
以下是一个简单的C语言自动评分系统的设计思路和实现步骤:1. 确定评分规则:根据评分目标,确定评分规则。
例如,对于一个简单的C 语言程序,评分规则可以包括语法错误、逻辑错误、运行时间等。
2. 设计评分算法:根据评分规则,设计评分算法。
例如,可以使用静态代码分析工具或动态测试技术来检查程序中是否存在语法错误或逻辑错误。
可以使用计时器来测量程序的运行时间。
3. 编写评分代码:根据评分算法,编写评分代码。
可以使用C语言编写代码,也可以使用其他编程语言。
4. 测试评分代码:对评分代码进行测试,确保其能够正确地评估程序的性能和错误。
5. 集成评分系统:将评分代码集成到自动评分系统中,以便自动评估程序的性能和错误。
以下是一个简单的C语言自动评分系统的实现示例:```cinclude <>include <>include <>include <>define MAX_LINE_LENGTH 1000define MAX_ERRORS 10int main(int argc, char argv[]) {FILE fp;char line[MAX_LINE_LENGTH];int line_num = 1;int error_count = 0;clock_t start_time, end_time;double elapsed_time;if (argc != 2) {printf("Usage: %s <file>\n", argv[0]); exit(1);}fp = fopen(argv[1], "r");if (fp == NULL) {printf("Error: could not open file %s\n", argv[1]);exit(1);}while (fgets(line, MAX_LINE_LENGTH, fp) != NULL) { // Check for syntax errorsif (strstr(line, "error") != NULL) {error_count++;printf("Error on line %d: %s\n", line_num, line); }line_num++;}fclose(fp);if (error_count > MAX_ERRORS) {printf("Too many errors (%d > %d)\n", error_count, MAX_ERRORS);exit(1);} else if (error_count > 0) {printf("Program contains %d error%s.\n", error_count,error_count > 1 ? "s" : "");exit(0); // return 0 for success, 1 for failure} else {printf("Program is free of errors.\n");exit(0); // return 0 for success, 1 for failure}}```该程序接受一个参数,即要评估的C语言源代码文件名。
C语言智能评分系统的开发陈晶晶;陈华;范宜标【摘要】现有应用于C语言考试的自动评分阅卷系统能够很好地完成对客观题的评分工作,但对于改错、编程这类考核学生实际操作能力的题型的评分比较刻板,不能准确反映学生的实际水平。
为解决这个问题,研发了一种新型C语言智能评分系统,该系统利用C语言的结构特点进行灵活评分,从而使评分结果更加趋近于人工阅卷结果,实现了C语言这门逻辑思维能力及编程应用能力很强的课程的完全无纸化考试,减少了教师的阅卷工作量,避免受评分过程的人工主观意识的影响,提高了评分的公正性、合理性及准确性。
%At present, most automatic marking systems for C Language perform well in marking objective questions, but it is rigid for examining students’ actual operation ability such as error correction questions, program design questions etc. Therefore, the paper introduces a new-type C Language programming intelligent marking system, which can mark intelligently according to the structure features of C language and the grading result may be closer to the one of manual marking. As a result, the system makes non-paper examination possible in C Language instruction, reduces teachers’ marking workload, avoids subjective consciousness influence in grading process, and enhances grading fairness, rationality, and accuracy as well.【期刊名称】《龙岩学院学报》【年(卷),期】2016(034)002【总页数】6页(P75-80)【关键词】C语言;评分系统;算法;流程图;伪代码【作者】陈晶晶;陈华;范宜标【作者单位】龙岩学院福建龙岩 364000;福建师范大学福建福州 350117;龙岩学院福建龙岩 364000【正文语种】中文【中图分类】TP311.11C语言程序设计是理工科专业的一门重要的专业基础课程。
武汉理工大学华夏学院课程设计课程名称C语言课程设计题目比赛评分系统的设计专业软件工程班级软件1121班姓名成绩_________________指导教师王绪梅2013年2月25日至2013年3月1 日课程设计任务书学生姓名:专业班级:软件1121指导教师:王绪梅工作单位:信息工程系设计题目:比赛评分系统的设计要求完成的主要任务:1. 任务描述学校要举办一个歌咏比赛,请设计一个比赛评分程序,对参赛的选手进行评分。
(给分的原则为:满分为10分;计分方法是:裁判给出分数后,去掉两个最高分和两个最低分后的平均分为选手的最后得分(精确到小数点后两位).)要求系统实现以下功能:⑴设参赛人数为n位(n<50),裁判人数为m(m为不少于11的奇数)位;⑵系统能录入参赛人员资料;参赛选手按序号依次比赛,统计最后得分;⑶能够查阅选手的得分情况;⑷比赛结束后,显示出“名次表”;⑸公布一、二、三等奖的得奖选手名单。
2.本课程涉及的知识点变量的定义、输入和输出函数、数组的应用、循环语句、选择语句等等。
3. 要求完成的任务⑴完成整个规定任务的设计及调试,最后得出正确结果,并经教师检查及答辩;⑵写出规范的课程设计报告,在设计思想描述时一定要画出程序算法流程图;⑶课程设计结束后交设计说明书等文档和设计内容:⑷从2月26日起,学生每天至少要到设计教室半天以上;设计报告撰写格式要求:设计报告的主要内容是详细写出在设计过程中所用到的主要技术或方法;课程设计报告按通用格式书写,具体要求见资料:“课程设计说明书的书写内容与格式”时间安排:第一天:学生先在实验室集中,由指导教师介绍课程设计的目的、布置任务后选题;第二天-第四天:学生在实验室完成设计,经教师检查并回答提问,确认设计完成;第五天:教师在计算机上先检查设计报告、学生修改后打印提交指导教师签字:2013年2月20日系主任签字:2013年2月23日目录1.设计题目................................................................. 错误!未定义书签。
C语言课程设计-歌手比赛系统
C语言歌手比赛系统是一款能够方便评委对歌手参赛作品进行打分的软件系统。
它采
用C语言作为开发语言,利用结构化编程的编码思想,结合界面处理技术,将模块间的复
杂关系归纳到一个明确的思路,利用控制台输入输出的技术让评委对参赛者作品进行评分。
首先,基于C语言,编写各个模块函数,完成参赛方的登记功能,同时具备查看、修改、删除等功能,以及保存所有参赛歌手的相关信息,如性别、歌手名称、介绍、歌曲名称、作品类型等;
其次,通过编写算法程序,对评委对歌手的打分情况进行总结,统计个每位参赛者的
总得分,最终以此来确定参赛歌手的获奖名次;
最后,基于C语言,编写出控制台处理界面,让评委在电脑上使用控制台输入输出操作,进行比赛打分,这样可以节省评委的纸笔式打分时间,提高速度和效率。
总之,C语言歌手比赛系统可以实现参赛歌手信息的记录、评委打分以及获奖者的记录,采用面向对象的编程理念,提高了比赛系统的可靠性与性能,极大地丰富了评委的体验,提升了比赛的效率。
C++实现歌⼿⽐赛评分系统本⽂实例为⼤家分享了C++实现歌⼿⽐赛评分系统的具体代码,供⼤家参考,具体内容如下(⼀)需求和规格说明对⼀次歌⼿⽐赛的成绩进⾏管理,功能要求:1、输⼊每个选⼿的数据包括编号、姓名、⼗个评委的成绩,根据输⼊计算出总成绩和平均成绩(去掉最⾼分,去掉最低分)。
2、显⽰主菜单如下:1)输⼊选⼿数据2)评委打分3)成绩排序(按平均分)4)数据查询5)追加选⼿数据6)写⼊数据⽂件7)退出系统。
(⼆)设计根据上述需求,运⽤链表存储歌⼿的数据,1.数据的⽣成歌⼿⽐赛选⼿⾸先我们需要歌⼿的基本信息,将每⼀位⽤户的编号、姓名输⼊系统中,然后进⾏评委打分,之后我们对数据进⾏处理分析,计算出总分和平均值,并以.txt⽂件的格式储存起来。
2.数据的存储结构考虑到⼀个宿舍的⼈员是有限的,所以可以⽤链表进⾏存储。
宿舍的⼈员设计为结构体变量:struct singer{undefinedlong lNum;char name[20];float fScore[10];float sum1, sum2, max, min, average;struct singer *pNext;};其中包含选⼿编号、姓名、评委打分、总分(去除最⾼分和最低分)、最⾼分数、最低分数和平均分。
然后我们在主函数当中定义⼀个结构指针struct singer *spHead,作为链表的头结点,然后依次创建下⼀个结构体对他们进⾏遍历输⼊存储。
3.功能的设计函数功能的介绍接收选⼿数据:struct singer *CreatLiList(void);评委打分:void score(struct singer *);遍历输出数歌⼿数据:void TraverLiList(struct singer *);追加选⼿数据:int AppendNode(struct singer *,long , char *, float*);删除数据:int DeleteNode(struct singer *,long);搜索数据:int SearchNode(struct singer *,long );退出系统,删除链表数据:struct singer *ReleaseLiList(struct singer *);链表数据根据平均分排序:struct singer* SortList(struct singer* );将数据写⼊⽂件:将数据写⼊⽂件:void input(struct singer *);(1)输⼊选⼿数据⽤户选择功能1之后,我们对输⼊的歌⼿的编号和姓名进⾏统计存储,直到⽤户输⼊-1时,我们默认接受数据完毕,返回主程序功能页⾯。
#include"stdio.h"#include"stdlib.h"int totscore();void paixu(struct people st[],int n);/*排序函数*/struct people{ int num;int score;};/*定义结构体存储人和其对应的分数*/int K=1;void main(){int J;printf("第%d局比赛成绩录入:\n",K);printf("\n");FILE *fp;/* FILE *fp 是声明,声明fp是指针,用来指向FILE类型的对象*/ int i,n;/*n是参加比赛人数*/struct people st[80];puts("------请输入总人数:");scanf("%d",&n);for(i=0;i<n;i++)/*完成一一对应的存储过程*/{printf(" 请输入第%d人击倒的瓶数\n",i+1);st[i].num=i+1;st[i].score= totscore();/*引用结构体元素的形式a[i].b*/}for(i=0;i<n;i++)/*输出没有排序前的数据结果*/{ printf("\n");printf("第%d人击倒的瓶数是:%d\n",st[i].num,st[i].score);printf("\n");}/*将存储后的数据排序*/paixu(st,n);puts("======================排序后========================");printf("\n");printf("第%d局的比赛结果排序情况:\n",K);printf(" 排名\t 选手\t 得分\n");printf("\n");for(i=0;i<n;i++){ printf("第%d名\t 第%d人\t %d\n",i+1,st[i].num,st[i].score);printf("\n");}/*排序后的结果存储到Result.txt */if((fp=fopen("Result.txt","a+"))==NULL){puts("====不能打开文件====");exit(0);}/* int fprintf( FILE *stream, const char *format, ... );fprintf()函数根据指定的format(格式)发送信息(参数)到由stream(流)指定的文件. fprintf()只能和printf()一样工作. fprintf()的返回值是输出的字符数,发生错误时返回一个负值. */fprintf(fp,"以下是第%d局比赛结果的排名:",K);fprintf(fp,"\n");fprintf(fp," 排名\t 选手\t 得分\n");for(i=0;i<n;i++){fprintf(fp,"第%d名\t 第%d人\t %d\n",i+1,st[i].num,st[i].score);fprintf(fp,"\n");}fclose(fp);K++;printf("是否继续录入下一局数据?1/0");printf("\n");scanf("%d",&J);while((J!=1)&&(J!=0)){printf("输入错误,请重新输入:1/0 ?");scanf("%d",&J);}printf("\n");printf("\n");if(J==1){main();}else{system("Result.txt");system("pause"); /*使输出窗口暂停*/}}/*排序子函数,实现以总分为标准,将结构体成员按分数降序排列*/void paixu(struct people st[],int n){ int i,j;struct people t;/*声明中间量t也是结构体*/for(i=0;i<n-1;i++)for(j=i+1;j<n;j++){if(st[i].score<st[j].score){ t=st[i];st[i]=st[j];st[j]=t;}}}/*求每局总分数的子函数*/int totscore(){int a[19][5],i,j,t,m,k,x,q,w,sum=0,y=0,r=0,p=0;/*i控制第几轮数目,j控制第几次数目,t为寄存第一次击倒瓶子数变量,m为第二次击倒瓶子数变量,k为第十轮第三次击倒瓶子数目变量,x为寄存k的变量,最后要t+m+x统计第十轮总数*/for(i=1;i<=10;i++){for(j=0;j<1;)/*用i表示第i轮,j表示第i轮的第(j+1)次*/{printf(" 请输入第%d轮第一次击倒的瓶数:\n",i);puts("------注意输入击倒的瓶数不要高于10------");scanf("%d",&a[i][j]);/*上面是第i论的(j+1)次击球数目,根据第一次的击球数又分为下面三种情况决定第二次击球,主要讨论a[i][j]<=0两种情况*/while(a[i][j]>10){printf("error数值溢出,请重新输入第%d轮第一次击倒的瓶数:\n",i);puts(" ------请输入击倒的瓶数不要大于10-----");scanf("%d",& a[i][j]);}t=a[i][j];/*只有数据正确才会脱离while语句,赋值给变量t,放便于数据的变化,而数组专门用来存放每轮每次的击倒球数目,所以具体分以下两种情况*//*情况一,第一次击球少于10个时*/if(a[i][j]<10){printf(" 请输入第%d轮第二次击倒的瓶数:\n",i);printf("------注意输入击倒的瓶数不要高于%d------\n",10-t);j++;/*此时下面这个a[i][j]已经是第i轮的第二次击球了,并且又分为第十轮以下第十轮以上的情况*/scanf("%d",&a[i][j]);if(a[i][j]<=10-t){m=a[i][j];}else{while(a[i][j]>10-t){printf("error数值溢出,请输入第%d轮第二次击倒的瓶数:\n",i);printf("------注意输入击倒的瓶数不要高于%d------\n",10-t);scanf("%d",&a[i][j]);}/*如果输入的一直大于10-t就一直显示错误*/m=a[i][j];}/*由于第10轮又有特殊情况,所以下面又加以区分:*/if((m<=10-t)&&(i<10))/*在第十轮以下时,直接计算两次总和输出*/{printf("第%d轮击倒的瓶数是%d\n",i,m+t);printf("\n");x=0; /*防止最后结果是随机数以下一样*/}if((m<10-t)&&(i==10))/*第十轮的第二次击球如果少于10-t个,将失去第三次击球机会所以也是直接输出结果*/{printf("第%d轮击倒的瓶数是%d\n",i,m+t);printf("\n");x=0;}if((m==10-t)&&(i==10))/*第十轮第二次正好击倒10-t个瓶子,则第十轮第一第二次总和为10瓶子,所以获得第三次击球奖励,之后再计算三次总和*/{puts(" 请再次输入一次击倒的瓶数");puts("------输入击倒的瓶数不要大于10------");scanf("%d",&k);if(k<=10)x=k;/*引入K便于最后总分的计算,因为只是希望数组a[i][j]存储两次的击球数目,否则不利于总分的计算*/else{ while(k>10){puts("error数据溢出,请再次输入一次击倒的瓶数:");printf("------输入击倒的瓶数不要大于10------");scanf("%d",&k);}x=k;}printf("第%d轮击倒的瓶数是%d\n",i,m+t+x);printf("\n");}}/*至此情况1完毕*//* 情形2,第一次击球就已经够10个时*/if(t==10) /*t表示第一次的击球数目,在前面已经有写,这里注释提醒*/{if(i==10)/*第10论的第一次击球够10个时*/{puts(" 输入额外的第一次击倒的瓶数:");puts("------注意输入击倒的瓶数不要高于10 ------");scanf("%d",&w);while(w>10){puts("error数据溢出,请重新输入第一次额外击倒的瓶数:");puts(" ------请输入击倒的瓶数不要大于10-----");scanf("%d",&w);}if(w<=10){ y=w;if(y==10){ puts(" 输入第二次额外击倒的瓶数!");puts(" ------请输入击倒的瓶数不要大于10-----");scanf("%d",&p);if(p<=10)r=p;/*引入r的作用与引入k的作用是一样的,便于计算总分*/else{while(p>10){puts("error数据溢出,请输入第二次额外击倒的瓶数:");puts(" ------请输入击倒的瓶数不要大于10-----");scanf("%d",&p);}r=p;x=0;/*防止最后结果是随机数*/}}else/*是y=w<=10的<10情况,即是第一次额外击球不够10个,这里第二次就是把剩下的进行击球*/{puts(" 输入第二次额外击倒的瓶数!");printf(" ------请输入击倒的瓶数不要大于%d的分数!------\n",10-y);scanf("%d",&p);if(p<=10-y)r=p;else{while(p>10-y){puts(" 输入第二次额外击倒的瓶数!");printf(" ------请输入击倒的瓶数不要大于%d的分数!------\n",10-y);scanf("%d",&p);}r=p;x=0;/*避免计算结果时产生随机数*/}}}printf("第%d轮击倒的瓶数是%d\n",i,10+y+r);printf("\n");printf("\n");j++;a[i][j]=0;}if(i<10) /*如果第十轮之前的第一次击球已经10个,直接到省去二次击球*/ {printf("第%d轮击倒的瓶数是%d\n",i,a[i][j]);printf("\n");j++;a[i][1]=0;x=0;r=0;y=0;/*防止最后结果是随机数*/}}}}/*该局总分的计算*/for(i=1;i<=10;i++){for(j=0;j<2;j++){q=a[i][j];sum=sum+q;}}printf("¥该局总分:%d¥\n",sum+x+y+r);printf("\n");return (sum+x+y+r);}。
沈阳航空航天大学课程设计任务书学院:专业:班级:学号:题目:唱歌比赛评委评分系统一、课程设计时间二、课程设计内容参加唱歌比赛3位选手的名称和出场顺序存放在文件file22.txt中;评委共有7个。
每当一个选手表演之后,7个评委都分别评分(0~10分),而选手的最终得分计算规则为:去掉7个评分的最高和最低分,取剩下5个评分的平均值。
程序最后打印出3位选手的成绩。
三、课程设计要求程序质量:✧贯彻结构化的程序设计思想。
✧用户界面友好,功能明确,操作方便。
✧用户界面中的菜单至少应包括“读取并显示选手名单”、“表演与评分”、“打印最后成绩”、“退出”4项。
✧代码应适当缩进,并给出必要的注释,以增强程序的可读性。
课程设计说明书:✧课程结束后,上交课程设计说明书和源程序。
课程设计说明书的内容参见提供的模板。
四、指导教师和学生签字指导教师:________ 学生签名:________五、成绩六、教师评语目录一、需求分析 (1)二、设计分析 (2)三、主要界面截图 (4)四、技术要点 (9)五、个人总结 (14)六、参考文献 (15)七、源程序 (15)一、需求分析根据任务书给定的“课程设计内容”和“课程设计要求”作如下的需求分析。
该系统是一个分数录入以及评定系统,其使用者被假定为某歌唱比赛的管理人员,系统应该具有安全、稳定、功能齐全的特点。
1. 安全性分析系统管理的数据涉及到参赛的所有选手,为防止他人恶意修改,所以在进入评分系统前有密码程序,只有掌握了正确的密码才能进入程序进行各项操作。
2. 稳定性分析指系统比较健壮,只要是用户的合理操作,系统都应给出合理正确的回应,而不是出现令用户感到意外的系统错误或系统崩溃。
3. 主要功能分析(1)密码程序:在程序尾端设置好密码,只有掌握密码的管理员才能进入程序进行成绩录入,修改等操作,避免信息被他人修改,造成比赛不公(2)菜单:有一个功能强大又清晰明了的菜单能极大程度方便管理员的操作(3)数据输入:在每个输入前都有详细分类和提示,简单明了,根据提示输入参赛选手号数,姓名,各个评委打分成绩(4)数据保存:对于输入的数据,或被修改的数据应该保存到某个磁盘文件中,实现永久存储。
《程序设计基础(C语言)》课程设计说明书学院:XXXXXXXX班级: XXXXXX学号: XXXXXXXXX姓名: XXX教师: XXX日期: 2012年月日题目名称:大赛评分系统算法分析:(提示:该部分内容填写课程设计所实现的系统具有哪些功能模块,每个模块能完成的功能及需要考虑的逻辑算法。
)1.该程序功能(1)在大赛中,有十个评委为参赛的选手打分,分数为1~100分。
选手最后得分为:去掉一个最高分和一个最低分后其余8个分数的平均值。
(2)同时对评委评分进行裁判,即在10个评委中找出最公平(即评分最接近平均分)和最不公平(即与平均分的差距最大)的评委。
2.程序实现程序的要求是根据十个评委对参赛选手的打分情况,求出这个选手的平均成绩和最公平及最不公平的裁判。
首先,我先考虑到程序的数据输入,可以用scanf 函数来解决,并将输入的数据存放于数组中。
随后对存放在数组中的数据进行排序,这步为执行找出最不公平的裁判提高了效率,只需将排好序的数组的首尾分值与平均值进行比较即可。
将排好序的数组中间的八个数求平均值即为此选手的成绩,可见排序法可大大的简化程序。
接下来是最后一个任务就是找最公平的裁判,此过程我使用拆半法,先将靠近中间的一个裁判假设为最公平的,再将他前面的裁判与之比较,找出前半部分的最公平的裁判,再将之与后半部分的进行比较,得出最终的最公平的裁判。
为了方便管理员更好的使用界面操作,我还设置了每输入完一组数据并得到结果后,或接着输入下组数据或按0跳出界面。
流程设计:1.分数的输入部分;2.对分数进行的排序部分;3.计算平均值的部分;4.找出最不公平裁判部分;5.找出最公平裁判部分;6.数据的输出部代码设计:#include <stdio.h>#include <math.h>#include <conio.h> /*调用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]<tm[j]) /*选择结构*/{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);}运行结果:管理员输入评委对任意选手的打分,输入完毕后程序如下菜单界面:管理员输入输入完毕后,按[Enter]健,程序运行界面如下:管理员输入输入完毕后,按[Enter]健,程序运行界面如下:接着又输入一组数据后运行如下:运行如下:输入0,按[Enter]健,退出系统:。
C语言程序课程设计—歌手比赛系统C语言程序课程设计——歌手比赛系统一、引言随着计算机技术的不断发展,计算机应用越来越广泛,其中,音乐类比赛系统的需求也日益增长。
为了满足这一需求,我们设计了一个基于C语言的歌手比赛系统。
本文将详细介绍该系统的设计思路、实现方法以及特色功能。
二、系统设计1、功能设计本系统主要功能包括:选手信息管理、比赛流程管理、评委评分管理、得分统计与排名、现场大屏幕显示等。
通过这些功能,确保歌手比赛的公平、公正与高效。
2、模块设计根据系统功能,我们将系统分为以下几个模块:(1)选手信息模块:管理参赛选手的基本信息,包括姓名、性别、年龄、所属单位等。
(2)比赛流程模块:管理比赛流程,包括比赛时间、比赛地点、比赛轮次、每轮选手名单等。
(3)评委评分模块:管理评委评分,包括评分标准、评委评分、评分统计等。
(4)得分统计与排名模块:根据评委评分统计选手得分,并根据得分进行排名。
(5)现场大屏幕显示模块:将比赛进程、选手得分与排名等信息实时展示在大屏幕上,方便现场观众查看。
3、数据库设计为了存储和处理选手信息、比赛流程、评委评分等数据,我们设计了一个关系型数据库。
主要表格包括:选手信息表、比赛流程表、评委评分表、得分排名表等。
三、系统实现1、界面设计系统界面采用简洁明了的风格,以方便用户操作。
界面包括:选手信息展示区、比赛流程展示区、评委评分展示区、得分排名展示区、大屏幕显示控制区等。
2、功能实现(1)选手信息管理:实现添加、修改、删除选手信息等功能。
(2)比赛流程管理:实现添加、修改、删除比赛流程等功能。
(3)评委评分管理:实现评委对选手的评分、评分修改、评分提交等功能。
(4)得分统计与排名:根据评委评分统计选手得分,并根据得分进行排名,生成得分排名表。
(5)现场大屏幕显示:通过与大屏幕显示设备的通信,实时展示比赛进程、选手得分与排名等信息。
四、特色功能1、实时更新功能:系统能够根据比赛进程实时更新选手信息、比赛流程、评委评分等内容,确保信息的准确性。
哈尔滨工业大学科技成果——C语言编程题自动评分系统主要研究内容随着学生数目的不断增加和远程教育的发展,如何利用计算机来准确迅速地评测人的知识能力水平尤其是应用实践能力成为新的研究热点。
其中“程序设计语言”的无纸考试和自动评分是当前计算机辅助教学领域比较热门的一个研究方向。
但现有的“程序设计语言”考试系统的自动阅卷评分均采用客观题型,即单选、多选和正误判断等标准化试题,而对最能反映学生对程序设计语言掌握程度及应用技能的主观编程题却缺少有效实用的解决办法,一般的课程结业考试均为人工批改编程题。
如果能实现编程题的计算机自动评分,不但可以把教师从繁琐枯燥的批卷工作中解放出来,确保学生成绩更加公正、合理。
对于实现无纸考试,尤其是远程教学具有重要的实际应用意义和推广价值。
C语言编程题自动评分系统v1.0是一种新型的C语言在线考试和评分系统。
不同于已有的程序设计考试系统,C语言编程题自动评分系统v1.0不但可以对客观题型进行自动阅卷评分,还可以对学生C 语言程序进行自动评分。
该系统与其他机考系统的不同之处在于:不是“机上考试+程序备份+人工机上阅卷”的模式,而是“机上考试+机器阅卷自动评分”的模式。
技术特点及优势1、能够实现主观编程题的自动评分,为程序设计语言的考试提供了一种全新的模式,突破了以往网上考试系统只能进行客观题自动评分的局限性。
2、不仅能根据程序的结构和语义进行自动评分,而且还能根据程序的运行结果自动评分,对于不完整和有语法错误的程序也能根据教师指定的采分点语句进行评分。
3、实时反馈:学生在客户端进行考试时,向服务器端提交答案后,可以立即获得评分结果,促进学生的学习、提高学生的编程实践能力。
4、从实践角度来看,它将“上机实验”和考试很好的结合在一起,进一步提高了学生的实践能力,加深了学生对编程知识的掌握。
#include<iostream>#include<string>#include<fstream>#include<iomanip>using namespace std;class singer //歌手类的定义{protected:int no; //编号char name[20]; //姓名char sex[10]; //性别int age; //年龄char song[20]; //参赛曲目char department[30]; //选送单位char program[30]; //比赛项目名称char time[20]; //比赛时间char place[20]; //比赛地点int score; //比赛成绩singer *mynext; //指向下一个歌手的指针public:singer(); //歌手类无参构造函数的定义singer(int pnum,char pname[],char psex[],int page,char psong[],char pdepart[],charprogram[],char time[],char place[],int score); //歌手类有参构造函数的定义singer(int pnum,char pname[],char psex[],int page,char psong[],char pdepart[],charprogram[],char time[],char place[],int score,singer *next); //歌手类有参构造函数的定义int getnum(); //提取歌手编号函数的定义char *getname() ; //提取歌手名字函数的定义char *getsex(); //提取歌手性别函数的定义int getage(); //提取歌手年龄函数的定义void getagee(int as); //设置歌手年龄函数的定义void getscoree(int ak);char *getsong(); //提取员歌手参赛曲目函数的定义char *getdepart(); //提取歌手选送单位函数的定义char *getprogram(); //提取比赛项目名称函数的定义char *gettime(); //提取比赛时间函数的定义char *getplace(); //提取比赛地点函数的定义int getscore(); //提取比赛成绩函数的定义singer *getnext(); //提取指向下一个歌手指针函数的定义void setnext(singer *next); //设置指向下一个歌手指针函数的定义void output1(); //输出歌手信息函数的定义void output2(); //输出赛事信息函数的定义void output(); //输出全部信息函数的定义};singer::singer() //歌手类无参构造函数no=0;strcpy(name,"");strcpy(sex,"");age=0;strcpy(song,"");strcpy(department,"");strcpy(program,"");strcpy(time,"");strcpy(place,"");score=0;mynext=NULL;}singer::singer(int pnum,char pname[],char psex[],int page,char psong[],char pdepart[],char pprogram[],char ptime[],char pplace[],int pscore) //歌手类有参构造函数{no=pnum;strcpy(name,pname);strcpy(sex,psex);age=page;strcpy(song,psong);strcpy(department,pdepart);strcpy(program,pprogram);strcpy(time,ptime);strcpy(place,pplace);score=pscore;mynext=NULL;}singer::singer(int pnum,char pname[],char psex[],int page,char psong[],char pdepart[],char pprogram[],char ptime[],char pplace[],int pscore,singer *next) //歌手类有参构造函数{no=pnum;strcpy(name,pname);strcpy(sex,psex);age=page;strcpy(song,psong);strcpy(department,pdepart);strcpy(program,pprogram);strcpy(time,ptime);strcpy(place,pplace);score=pscore;mynext=next;}int singer::getnum() { return no; }char *singer::getname() { return name; }char *singer::getsex() { return sex; }char *singer::getdepart() { return department; }int singer::getage() { return age; }char *singer::getprogram(){return program;}char *singer::gettime(){return time;}char *singer::getplace(){return place;}int singer::getscore(){return score;}void singer::getagee(int as) { age=as; }void singer::getscoree(int ak){score=ak;}void singer::setnext(singer *next) { mynext=next; } singer *singer::getnext() { return mynext; }void singer::output1(){cout<<"编号:"<<no<<endl;cout<<"姓名:"<<name<<endl;cout<<"性别:"<<sex<<endl;cout<<"年龄:"<<age<<endl;cout<<"参赛歌曲:"<<song<<endl;cout<<"选送单位:"<<department<<endl;}void singer::output2(){cout<<"比赛项目:"<<program<<endl;cout<<"姓名:"<<name<<endl;cout<<"比赛时间:"<<time<<endl;cout<<"比赛地点:"<<place<<endl;cout<<"得分:"<<score<<endl;}void singer::output(){cout<<"编号:"<<no<<endl;cout<<"姓名:"<<name<<endl;cout<<"性别:"<<sex<<endl;cout<<"年龄:"<<age<<endl;cout<<"参赛歌曲:"<<song<<endl;cout<<"选送单位:"<<department<<endl;cout<<"比赛项目:"<<program<<endl;cout<<"比赛时间:"<<time<<endl;cout<<"比赛地点:"<<place<<endl;cout<<"得分:"<<score<<endl;}class operate:public singer{private:singer *myfirst; //指向歌手链表中结点的指针public:operate(int nnum,char nname[],char nsex[],int nage,char nsong[],char ndepart[],char nprogram[],char ntime[],char nplace[],int nscore);~operate(); //operate类析构函数的定义void load(); //从文件中加载歌手信息void add(); //增加歌手信息void input(int number); //键盘输入新歌手基本信息void insert(int nnum,char nname[],char nsex[],int nage,char nsong[],char ndepart[],char nprogram[],char ntime[],char nplace[],int nscore);bool findnum(); //按编号查询歌手信息bool findprogram(); //按项目名称查询赛事信息bool modify(); //修改歌手信息bool deletesinger(); //删除歌手信息void save(); //歌手信息存盘void showa(); //显示所有歌手信息void showb(); //显示比赛赛事。
#include<stdio.h>#include<malloc.h>#define LEN sizeof(struct People)struct People{int num;char name[20];char team[20];char nation[20];float score[7];double aver;struct People *next;};int n; //n为全局变量,本文件模块中个函数均可使用它struct People *creat(void) //定义函数。
此函数返回一个指向链表头的指针{struct People *head;struct People *p1,*p2;int i;n=0;head=NULL;while(n<10){n=n+1;p1=(struct People*)malloc(LEN); //开辟一个新单元scanf("%d %s %s %s ",&p1->num,p1->name,p1->team,p1->nation);for(i=0;i<7;i++)scanf("%f",&p1->score[i]);if(n==1)head=p1;else p2->next=p1;p2=p1;}p2->next=NULL;return(head);}void compare( struct People *head){struct People *p1,*max1,*min1;double max,min,sum;int i;p1=max1=min1=head;while(p1!=NULL){sum=max=min=p1->score[0];for(i=1;i<7;i++){max=p1->score[i]>max?p1->score[i]:max;min=p1->score[i]<min?p1->score[i]:min;sum+=p1->score[i];}sum=sum-max-min;p1->aver=sum/5;max1=p1->aver>max1->aver?p1:max1;min1=p1->aver<min1->aver?p1:min1;p1=p1->next;}printf("第一名:\n");printf("%d %s %s %s %.2lf\n",max1->num,max1->name,max1->team,max1->nation,max1->aver );printf("第十名:\n");printf("%d %s %s %s %.2lf\n",min1->num,min1->name,min1->team,min1->nation,min1->aver); }int main(){struct People *c;c=creat();compare(c);return 0;}。
宜春学院数学与计算机科学学院课程设计说明书课程名称:计算机实训课程代码:题目:大赛现场评分系统年级/专业/班: 14计科1班学生姓名:鄢剑涛学号: **************:***开题时间: 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]<min,则min=f[i][j]。
当第i个选手的m个得分输入完毕,去掉一个最高分max,去掉一个最低分min,第i个选手的最后的分数为sf[i] = (sf[i] - Max - Min ) / (m -2),n个选手的最后得分为sf[o],sf[1],…..,sf[n]全部计算完后,将其从高到低排序,输出参赛选手的名次表。
宜春学院数学与计算机科学学院课程设计说明书课程名称:计算机实训课程代码:题目:大赛现场评分系统年级/专业/班: 14计科1班学生姓名:鄢剑涛学号: **************:***开题时间: 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]<min,则min=f[i][j]。
当第i个选手的m个得分输入完毕,去掉一个最高分max,去掉一个最低分min,第i个选手的最后的分数为sf[i] = (sf[i] - Max - Min ) / (m -2),n个选手的最后得分为sf[o],sf[1],…..,sf[n]全部计算完后,将其从高到低排序,输出参赛选手的名次表。
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 <stdio.h>#include <math.h>#include <stdlib.h>#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 ("\n选手%d正在比赛\n",i);printf ("请输入选手的编号:");scanf ("%d", &sh[i]);sf[i] = 0;Max = 0;Min = 100;for (j = 1;j <= m;j++){printf ("裁判%d给出的分数为:", 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 ("去除一个最低分:%.3f\n",Max);printf ("去除一个最低分:%.3f\n",Min);sf[i] = (sf[i] - Max - Min ) / (m -2);printf ("选手%2d的最终得分为%.3f\n",sh[i], sf[i]);printf ("\n*************\n\n");}}/*函数功能:对分数从高到低排序函数参数:整型函数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",h[i],f[i]);//}}/*函数功能:对名次表进行打印函数参数:整型数组h,存放编号实型数组f1,存放最后得分整型变量n,存放参评人员*/void Print (int h[], float f[], int n){printf ("排名\t编号\t成绩\n");for (int i = 1; i <= n; i++){printf ("%2d\t%2d\t%.3f\n",i, h[i], f[i]);}}/*函数功能:统计评委的得分函数参数:整型数组ph,存放评委的编号实型数组pf,存放评委的得分整型变量m,存放评委的人数实型数组sf,存放选手的最后得分实型数组f:存放每个评委给选手的评分整型变量n,存放参赛选手的人数*/void CountJudgeScore(int ph[], float pf[], int m, float sf[],float f[],int n) {int i, j;//以下几行均为计算pf[j],pf[j]高的裁判的评判水平高for(j=1; j<=m; j++){pf[j] = 0;for (i=1; i<=n; i++){pf[j] = pf[j] + (f[i*m+j] - sf[i]) * (f[i*m+j] - sf[i]);}pf[j] = 10 - sqrt(pf[j] / n);printf ("裁判%d的分数为:%.3f\n",j,pf[j]);}}int main (){int j, m, n;int sh[Athlete]; //选手编号数组int ph[Judge]; //裁判编号数组float sf[Athlete]; //选手的最后得分float pf[Judge]; //裁判的得分float f[Athlete] [Judge];//评委给选手的评分printf("*******************欢迎使用大赛现场评分系统************************\n");printf ("请输入选手的人数:");scanf ("%d",&n);printf ("\n请输入裁判的人数:");scanf ("%d",&m);printf ("注:分数为十分制", j);for (int j = 1; j <= m; j++){ph [j] = j ;}printf ("选手的分数:\n");CountAthlereScore(sh, sf, n, *f, m);//对分数从高到低排序Sort (sh, sf, n);// 对名次表进行打印Print (sh, sf, n);//计算各位评委的分数printf ("裁判的分数如下:\n");CountJudgeScore(ph, pf, m, sf, *f, n);//对评委的分数进行排名及打印printf ("**********评委排名表*********\n");Sort (ph, pf, m); //评委得分排序Print (ph, pf, m); //打印评委排名printf ("\n*****************************************\n");printf (" ************************* \n\n");printf (" 系统结束,谢谢使用!!\n\n");printf (" *************************\n");printf ("******************************************\n");system("pause");}五、测试和运行1.大赛评分系统六、总结这个程序为大赛现场统分系统,很好的能简化在比赛中计分过程,并且能够在选手比赛之后就把分数统计出来,而且能在比赛之后就把比赛的排名列出来,大大减少了因为计算排名的时间,而且,本系统最出色的一点就是测定各位评委的评分水准,这也同时保证了比赛的准确性,公平性,公正性。
这个程序也很好的考察了c语言中的各个知识点,for循环语气,if-else判断语气,函数还有一维数组和二维数组的应用,还有的就是充分的考察了c 语言综合能力,将数组和函数紧密的联系在一起,灵活地运用了c语言。