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)数据保存:对于输入的数据,或被修改的数据应该保存到某个磁盘文件中,实现永久存储。
宜春学院数学与计算机科学学院课程设计说明书课程名称:计算机实训课程代码:题目:大赛现场评分系统年级/专业/班: 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语言。