c语言程序设计--保龄球计分系统,绝对可用,完美测试
- 格式:doc
- 大小:28.50 KB
- 文档页数:7
华中师范大学传媒学院课程设计课程名称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. 简单计分系统在最简单的保龄球计分系统中,每个选手在每局中只获得击倒的球瓶数目的得分。
例如,一次击倒4个球瓶,得4分;如果连续两次击倒球瓶的数目一样,第二次的分数将被累加。
这种计分系统适用于初学者或休闲娱乐场所,但对于专业比赛则不够准确和公平。
2. 高级计分系统在高级计分系统中,每局都有机会获得更多分数。
以下是保龄球比赛中高级计分系统的基本规则:a) XX制计分系统:每名选手在一局中最多可以获得10分。
如果一名选手在第一次投球中击倒全部10个球瓶,称之为“Strike”,并获得10分加上下两次投球所击倒的球瓶数目的额外分数。
如果一名选手在两次投球中全部击倒球瓶,称之为“Spare”,并获得10分加上下一次投球所击倒的球瓶数目的额外分数。
例如,一名选手在第一局的第一次投球中获得Strike,在第一轮时获得10分并加上下两轮的额外分数;在第一局的第二次投球中获得4分;在第二局的第一次投球中获得Spare,在下轮时获得10分加上下一轮的额外分数。
b) 第十局特殊规则:在比赛的最后一局,选手有机会进行额外的投球。
如果一名选手在第十局的第一次投球中获得Strike,他将有机会再投两次球;如果获得Spare,则有机会再投一次球。
这样一来,选手在第十局最多可以进行三次投球。
保龄球比赛中的计分系统解析保龄球是一项受欢迎的室内运动,其计分系统对于初学者来说可能会有一些困惑。
本文将对保龄球比赛中的计分系统进行解析,帮助读者更好地理解和享受这项运动。
一、保龄球计分系统概述保龄球计分系统采用了标准的十进制计分法,每场比赛共有十局。
每局中,参赛者有两次投球的机会,目标是尽可能击倒全部十支瓶。
击倒全部十支瓶称为“Strike”,击倒全部十支瓶之前先击倒部分的称为“Spare”。
每次投球之后,被击倒的瓶数将被记录下来,并根据击倒瓶数计算得分。
二、计分规则详解1. 普通投球得分计算在一局比赛中,如果参赛者在第一次投球中就全部击倒十支瓶,即Strike,那么他将获得该局的最高分数,十支瓶的得分为10,再加上接下来两次投球击倒的瓶数。
例如,如果接下来两次投球各击倒6支瓶,那么该局的得分就是10+6+6=22。
如果参赛者在两次投球中击倒了全部十支瓶,即Spare,那么他将获得该局的最高分数,十支瓶的得分为10,再加上接下来一次投球击倒的瓶数。
例如,如果接下来一次投球击倒4支瓶,那么该局的得分就是10+4=14。
对于一般投球,参赛者的得分只计算他在一次投球中击倒的瓶数。
例如,如果第一次击倒了5支瓶,第二次击倒了3支瓶,那么该局的得分就是5+3=8。
2. 第十局的计分规则第十局是保龄球比赛中的最后一局。
在这一局中,参赛者有额外的机会,根据投球的表现可能获得Strike或Spare。
如果参赛者在第十局中取得了Strike,他将获得额外两次的投球机会,直到没有击倒全部十支瓶为止。
如果参赛者在第十球之前就将全部十支瓶击倒,他将获得额外的一次投球机会。
3. 附加奖励得分在保龄球比赛中,还存在着一些附加奖励得分。
当参赛者取得Strike时,接下来两次投球中每击倒的瓶数都会算作附加奖励得分。
同样地,当参赛者取得Spare时,接下来一次投球中击倒的瓶数将视为附加奖励得分。
三、计分系统的例子分析为了更好地理解保龄球计分系统,我们来看一个具体的例子。
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语言源代码文件名。
保龄球比赛的裁判系统与评分方法保龄球是一项面向广大爱好者的室内运动,深受人们喜爱。
为了确保比赛的公平性和准确性,裁判系统与评分方法在保龄球比赛中起着关键作用。
本文将介绍保龄球比赛的裁判系统和评分方法,以及各种技术和规则的应用。
一、裁判系统1. 投球监控系统保龄球比赛使用先进的投球监控系统,通过安装在球道两侧的摄像机,实时监测并记录球员的每一次投球动作。
这些摄像机可以捕捉到球的轨迹、速度、旋转以及撞击针对的位置等重要数据。
裁判员可以通过监控系统对比赛中的争议情况进行回顾和判断,确保比赛的公平性。
2. 自动计分系统保龄球馆通常配备自动计分系统,用于记录球员的投球得分。
该系统通过识别每个球瓶上的标记,自动计算每个球员的击倒球瓶数量和得分。
裁判员可以通过该系统快速准确地了解比赛的进行情况,并及时提供相关信息给到参赛选手和观众。
二、评分方法保龄球比赛采用的评分方法是十分独特的。
下面将介绍常见的保龄球比赛评分方法:1. 标准计分法标准计分法是最常用的评分方法。
每个比赛回合有10个瓶,每次投球击倒的瓶数都记录在得分卡上。
当把所有瓶都击倒时,称为“STRIKE”,用“X”表示;如果在两次投球中成功将所有未击倒的瓶全部击倒,称为“SPARE”,用“/”表示;未全部击倒的瓶数表示为具体数字。
当有STRIKE或SPARE出现时,加上下次投球得分即可计算该回合的得分。
比赛最后一回合可以额外投掷2或3次,以满足投球规则。
2. 自动计分法自动计分系统大大简化了计分的过程。
球员只需关注自己投球和击倒的瓶数,系统会自动计算和显示得分。
这不仅减少了出错的可能性,也加快了比赛的进程。
三、技术和规则的应用1. 球道油路保龄球比赛的球道上涂有一层特殊的油路,用于影响球的滚动轨迹和速度。
裁判员负责检查和处理球道油路,以确保公平性和一致性。
2. 球权轮流制保龄球比赛中,球员按照轮流制进行投球。
比赛开始时,先投球的球员将轮流在各自的回合中投掷。
Windows高级软件开发大作业及评分标准说明1.学生按照学号除5取余数+1完成对应的题目。
2.题目6和7为选做题,按照完成质量,酌情加分。
题目及评分标准题目1:简单计算器要求:实现一个简单计算器,其类似于Windows附件中自带的计算器。
要求界面简洁大方,具有一个菜单栏,一个编辑框及若干按键。
按钮控件具有对鼠标敏感的功能,当鼠标位于不同的位置和状态时,控件会显示不同的颜色。
1.编程思路清晰,结果正确(满分30分)2.代码书写规范,关键部分有注释(满分10分)3.功能实现全面(满分30分)4.文档书写规范完整(满分20分)5.实现按钮控件对鼠标的敏感处理功能(满分10分)题目2:保龄球分数计算要求:实现一个保龄球分数计算系统。
要求界面简洁大方,根据菜单命令获取某选手的信息,所打场数,每局得分,每场最后得分,选手得分排名等。
1.编程思路清晰,保龄球计分算法正确(满分35分)2.代码书写规范,关键部分有注释(满分10分)3.功能实现全面(满分30分)4.文档书写规范完整(满分20分)5.对计分系统功能有一定扩展(满分5分)题目3:模拟时钟要求:绘制合适的时钟外形并显示当前时间。
1.编程思路清晰,图像美观(满分30分)2.代码书写规范,关键部分有注释(满分10分)3.时间显示正确(满分30分)4.文档书写规范完整(满分20分)5.可实现时间的调整与重新显示(满分10分)题目4:井字游戏要求:练习响应鼠标消息,练习矩形的绘制,谁先连成三个在一条直线上就算赢。
1.编程思路清晰,结果正确(满分30分)2.代码书写规范,关键部分有注释(满分10分)3.功能实现全面(满分30分)4.文档书写规范完整(满分20分)5.实现视图内指定区域对鼠标的敏感处理功能(满分10分)题目5:动物数据库要求:练习最基本的Windows控件和对话框程序。
练习如何动态地添加菜单选项。
该程序存储不同的动物数据,允许用户增加动物信息,每增加一种就在菜单里增加一个条目,用户可以通过菜单选择不同的动物并显示它们的信息。
#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);}。
程序设计题一:保龄球分数计算指导老师:王传栋(chdwang_em@)【问题描述】本程序完成多名学生的保龄球计分。
用户依序输入每局所打的球数,程序会根据保龄球的计分规则计算所得到的分数,并根据用户要求完成所得分数的排序和查找。
【功能要求】(1)学生信息包括:学号,姓名,出生(年,月,日),得分。
(2)需要实现的功能1)建立学生信息结构数组2)从键盘输入并显示每局的球数3)求得并显示每名学生的分数4)按分数递减选择排序5)显示按分数排序后学生信息6)按学号查学生信息和分数(顺序查找法)7)将排序后的内容存为文件,以后显示时直接从文件中调出而不用再执行排序算法。
【程序设计的具体说明】数据结构:结构类型的层次结构:struct student{ /* 学生信息结构 */char no[9]; /* 学号 */char name[9]; /* 姓名 */struct date birthday; /* 出生日期 */int score; /* 保龄球得分 */};为减少参数传递,程序中用到的学生结构体数组可以定义为一个全局变量:struct student stu[20];保龄球计分规则分析:(如不清楚,可以自己查找相关规则)(1)保龄球一场共10局,每一句最多打两球,至少打一球。
(2)每一局共有10个瓶子,击倒一个瓶子得1分。
若第1局到第9局的第一个球击倒10个瓶子(全倒),则跳入下一局,不需要打第2个球。
(3)若第10局的第1个球击倒10个瓶子,或者第10局的2个球加起来击倒10个瓶子(补中),则第10局可以打第3个球。
(4)保龄球10局最少打11个球,最多打21个球。
(5)计分方式若该局中第1球击倒10个瓶子,则本局分数加计下局的两球的分数;若一局中第1球加第2球共击倒10个球则本局分数会加计下局第1球的分数;若一局2球没有击倒10个瓶子,该局只计击倒瓶子的分数。
【程序设计的开发环境】VC++6.0,在内存中的各种操作可以采用一维数组方式或是指针方式。
目录一、保龄球计分.................................................................................................................. - 1 -1. 设计方案简介.............................................................................................................. - 1 -2. 设计题目实现.............................................................................................................. - 1 -1) 需求分析.............................................................................................................. - 1 -2) 概要设计.............................................................................................................. - 2 -3) 详细设计.............................................................................................................. - 3 -4) 调试分析.............................................................................................................. - 5 -5) 用户使用说明...................................................................................................... - 6 -6) 测试结果.............................................................................................................. - 6 -3. 设计评述...................................................................................................................... - 7 -4. 参考资料...................................................................................................................... - 7 -5. 附录:源程序.............................................................................................................. - 7 -二、传递闭包...................................................................................................................... - 9 -1.设计方案简介.......................................................................................................... - 9 -2. 设计题目实现.............................................................................................................. - 9 -1) 需求分析............................................................................................................ - 10 -2) 概要设计............................................................................................................ - 10 -3) 详细设计............................................................................................................ - 11 -4) 调试分析............................................................................................................ - 11 -5) 用户使用说明.................................................................................................... - 12 -6) 测试结果............................................................................................................ - 12 -3. 设计评述.................................................................................................................... - 13 -4. 参考资料.................................................................................................................... - 13 -5. 附录:源程序............................................................................................................ - 13 -三、校园导游.................................................................................................................... - 16 -1. 设计方案简介............................................................................................................ - 16 -2. 设计题目实现............................................................................................................ - 16 -1) 需求分析............................................................................................................ - 16 -2) 概要设计............................................................................................................ - 17 -3) 详细设计............................................................................................................ - 19 -4) 调试分析............................................................................................................ - 22 -5) 用户使用说明.................................................................................................... - 22 -6) 测试结果............................................................................................................ - 23 -3.设计评述................................................................................................................ - 24 -4. 参考资料.................................................................................................................... - 24 -5. 附录:源程序............................................................................................................ - 24 -一、保龄球计分1. 设计方案简介此次课程设计的主要内容是模拟保龄球计分系统。
保龄球比赛的计分系统解析保龄球作为一项受欢迎的休闲运动,拥有独特的计分系统,让参与者能够更好地了解比赛进展和各自的得分情况。
本文将对保龄球比赛的计分系统进行解析,帮助读者更好地理解和掌握保龄球比赛。
一、基本规则在开始解析保龄球比赛的计分系统之前,首先需要了解一些基本规则。
保龄球比赛通常以多人形式进行,每人轮流进行投球,每轮投球中每人有两次机会。
保龄球比赛共有10轮,每轮结束后根据各自的得分情况进行计算并累加,最终得分高者获胜。
二、计分规则1. 基本记分在保龄球比赛中,每击倒一瓶则得一分,最多可得10分。
击倒全部10瓶称为STRIKE(全中),得10分,并且本轮结束,不需再进行第二次投球。
如果第一次未全中,则需进行第二次投球,此时若再全中,则称为SPARE(补中),记为“/”,得下一次投球击倒瓶数的分数。
若未造成STRIKE或SPARE,则直接记为该轮两次投球击倒瓶数的分数。
2. 额外机会若最后一轮(第10轮)出现STRIKE或SPARE,将获得额外机会,可进行一到两次额外投球。
额外投球的得分将根据击倒的瓶数计算,并加在最后一轮的总分上。
3. 连击奖励在保龄球比赛中,连续STRIKE将获得连击奖励。
连击奖励会为累计在当前轮之前的每轮STRIKE的掷球增加其下一球的得分。
例如,第2轮全中后,第3轮继续全中,第3轮的第一次投球得分将加上第2轮的两次全中的得分作为奖励。
三、示例分析为了更好地理解保龄球比赛计分系统的运作,下面以一个示例进行分析。
假设某选手的投球情况如下:第一轮两次投球击倒9瓶和1瓶(SPARE),记为“9/”,得10分。
第二轮两次投球击倒3瓶和4瓶,记为“34”,得7分。
第三轮两次投球击倒10瓶(STRIKE),记为“X”,得10分(额外奖励)。
第四轮两次投球击倒7瓶和2瓶,记为“72”,得9分。
第五轮两次投球击倒10瓶(STRIKE),记为“X”,得10分(额外奖励)。
第六轮两次投球击倒10瓶(STRIKE),记为“X”,得10分(额外奖励)。
目录1 需求分析 (1)1.1问题描述 (1)1.2输入数据要求 (1)1.3输出数据要求 (2)1.4开发环境和工具 (2)1.5成员分工 (2)2总体设计 (3)2.1总体设计思路 (3)2.2模块结构图 (3)2.3模块说明 (4)3详细设计 (6)3.1数据类型定义 (6)3.2S CAN模块实现 (6)3.3S A VE以及R EAD模块实现 (8)3.4C OUNT模块实现 (9)4 测试结果与分析 (11)4.1.输入数据计算结果 (11)4.2数据的文件保存 (12)4.3从文件读入数据并计算结果 (12)5个人总结 (14)6 附录 (15)6.1源代码 (15)1 需求分析1.1问题描述从键盘读入比赛数据;从文件读入比赛数据;将从键盘输入的比赛数据存入文件(一个文件可存放多局比赛的数据)。
将比赛数据显示在屏幕上计算比赛结果及统计数据,并显示在屏幕上。
一局(GAME)保龄球分为10格,每格里有两次投球机会,如在第一次投球时全中,就不需要投第二球。
每一格可能出现三种情况:1.失球(MISS)无论何种情况,在一格的两次投球时,未能击倒10个瓶,此格的分数为击倒的瓶数,未击中用一个(-)符号表示。
2.补中(SPARE)当第二次投球击倒该格第一球余下的全部瓶子,称为补中,用一个(/)符号表示。
补中的记分是10分加上下一次投球击倒的瓶数。
3.全中(STRIKE)当每一格的第一次投球击倒全部竖立的十个瓶时,称为全中,用一个(×)符号表示。
全中的记分是10分(击倒的瓶)加该球员下两次投球击倒的瓶数。
但在第十格中情况比较特殊:(1)如第二次投球未补中,则第十格得分为第九格得分加上第十格所击倒瓶数。
(2)如第二次投球补中,则追加一次投球机会,第十格得分为第九格得他加上10加上追加一次投球击倒瓶数。
(3)如第一球为全中,则追上加二次投球机会,第十格得分为第九格得分加上10加追加二次投球击倒的瓶数。
保龄球计分程序打保龄球是用一个滚球去打击10个站立的柱,将柱击倒。
一局分10轮,每轮可滚球一次或多次,以击倒的柱数为依据计分。
一局得分为10轮得分之和,而每轮的得分不仅与本轮滚球情况有关,还可能与后续一两轮的滚球情况有关。
即,某轮某次滚球击倒的柱数不仅要计入本轮得分,还可能会计入前一两轮得分。
具体的滚球击柱规则和计分方法如下:⑴若某一轮的第一次滚球就击倒全部10个柱,则本轮不再滚球。
(若是第10轮则还需另加两次滚球)。
该轮得分为本次击倒柱数10与以后两次滚球所击倒柱数之和。
⑵若某一轮的第一次滚球未击倒10个柱,则可对剩下未倒的柱再滚球一次。
如果这两次滚球击倒全部10个柱,则本轮不再滚球(若是第10轮则还需另加一次滚球),该轮得分为本次倒柱数10与以后一次滚球所击倒柱数之和。
⑶若某一轮的两次滚球未击倒全部10个柱,则本轮不再继续滚球,该轮得分为这两次滚球击倒的柱数这和。
总之,若一轮中一次滚球或两次滚球击倒10个柱,则本轮得分是本轮首次滚球开始的连续三次滚球击倒柱数之和(其中有一次或两次不是本轮滚球)。
若一轮内二次滚球击倒柱数不足十个,则本轮得分即为这两次击倒柱数之和。
以实例说明如下:轮 1 2 3 4 5 6 7 8 9 10附加各轮第一次得分 1010107 9 8 810 9 10 8各轮第二次得分 / / / 2 1 1 2 / 1/ 2各轮得分302719918 9 20 20 2020累计总分305776 85 103 112 132 152 172 192编写一个程序,模拟打一局保龄球的过程,统计各轮得分和累计总分。
程序交互地逐轮逐次输入一次滚球击倒的柱数,计算该轮得分和累计总分。
输入输入文件仅包含一行,有最多22个[0,10]之间的整数,表示每轮滚球第一次或第二次击倒的球数,输入数据保证合法。
两个整数之间仅有一个空格。
输出输出文件有四行,分别为各轮第一次得分、各轮第二次得分、各轮得分、各轮累计总分等。
保龄球计分 课程设计一、课程目标知识目标:1. 学生能理解并掌握保龄球计分的基本规则,包括全中、补中、失误等情况的计分方法。
2. 学生能够运用基本的数学加减法进行保龄球比分计算,提高数学运算能力。
3. 学生了解保龄球比赛中的礼仪和规范,了解运动项目的公平性和竞技性。
技能目标:1. 学生通过实际操作,提高解决实际问题的能力,培养运用数学知识解决生活中问题的技能。
2. 学生在小组讨论和互动中,提升沟通、协作和团队意识。
情感态度价值观目标:1. 学生通过参与保龄球计分活动,培养对体育运动的兴趣,树立健康的生活方式。
2. 学生在比赛过程中,学会尊重对手,培养良好的竞技精神和公平竞争意识。
3. 学生通过团队合作,提升自信,培养克服困难的勇气和毅力。
分析课程性质、学生特点和教学要求:1. 本课程为体育与数学跨学科的综合实践活动,结合保龄球运动和数学计分,提高学生的综合运用能力。
2. 学生为四年级学生,具有一定的数学基础和体育活动经验,对新鲜事物充满好奇,喜欢动手操作。
3. 教学要求注重实践性和趣味性,通过小组合作、互动讨论等形式,让学生在轻松愉快的氛围中学习知识,培养技能和情感态度。
二、教学内容1. 保龄球基本规则介绍:全中、补中、失误等概念解释。
教材章节:《体育与健康》四年级下册,第七单元“球类运动”,第三节“保龄球”。
2. 保龄球计分方法:讲解不同情况下的计分方式,如全中、补中、失误的计分。
教材章节:《数学》四年级下册,第四单元“分数”,第三节“分数的加减法”。
3. 数学运算在实际中的应用:运用加减法进行保龄球比分计算。
教材章节:《数学》四年级下册,第四单元“分数”,第五节“分数在实际中的应用”。
4. 保龄球比赛礼仪和规范:介绍比赛中的行为规范和公平竞争意识。
教材章节:《体育与健康》四年级下册,第七单元“球类运动”,附录“运动礼仪与规范”。
教学大纲安排:第一课时:保龄球基本规则介绍,理解全中、补中、失误等概念。
保龄球游戏编程实现保龄球是一项非常受欢迎的室内运动,通过计算机编程实现保龄球游戏具有很大的趣味性和技术挑战性。
本文将介绍如何使用编程语言来实现一个简单的保龄球游戏。
1. 游戏概述保龄球游戏的目标是将球准确地投向球道的沉底区,将全部的球瓶击倒。
每局比赛通常包括十轮,每轮中玩家有两次机会进行投球。
分数是根据用于击倒球瓶的次数和额外加分计算得出的。
2. 游戏流程首先,我们需要设计游戏的用户界面。
这可以通过图形库或者控制台进行实现。
在游戏开始时,显示一个欢迎画面,并提示玩家输入其姓名。
接下来,显示一个初始的球道和球瓶布局。
游戏的主循环包含十个轮次。
每个轮次开始时,程序提示玩家进行投球。
玩家输入一个合法的投球动作,比如选择球速和球的位置。
计算机程序根据这些输入信息模拟球的路径,并判断是否成功击倒球瓶。
如果球击倒了球瓶,程序将更新球道上的球瓶布局,并计算得分。
然后,进行下一个投球机会。
如果没有击倒球瓶,同样进行下一个投球机会,直到两次投球机会用完。
3. 碰撞检测和物理模拟在编程实现保龄球游戏时,需要设计碰撞检测算法来判断球是否击中了球瓶。
可以使用球和球瓶的碰撞检测算法,以及球和球道的碰撞检测算法来实现这一功能。
根据碰撞检测结果,更新球瓶的状态并计算分数。
此外,还需要实现物理模拟来模拟球的运动轨迹。
根据球的速度、方向和重力等因素,可以使用物理模型来计算球的位置和速度。
这样,球就可以在球道上自由移动,并与球瓶进行碰撞。
4. 分数计算在保龄球游戏中,计分是根据击倒球瓶的次数和额外加分来确定的。
计分规则通常是在十轮比赛结束后进行计算。
每个轮次的得分由两部分组成:基础得分和额外加分。
基础得分是根据本轮击倒的球瓶数量计算的。
如果在第一次投球中成功击倒了所有球瓶,则得分为strike(10个球瓶)加上下一轮进行的两次投球中击倒的球瓶数量。
如果在两次投球中击倒了所有球瓶,则得分为spare(10个球瓶)加上下一球的击倒数量。
简单保龄球游戏编程在开始介绍简单保龄球游戏的编程之前,我们先来了解一下保龄球游戏的规则和基本要素。
保龄球是一种室内运动,通常由两支球队进行比赛,每支球队有2-6名球员。
每位球员轮流进行投球,并且试图将球击倒10个排列成三角形的瓶子。
每轮投球结束后,倒下的瓶子会被重新摆放。
根据倒下的瓶子数量来计分,而最高得分的球队将获胜。
保龄球游戏编程可以通过使用编程语言和相关的开发工具来实现。
最常用的编程语言之一是C++,它具有强大的图形和计算能力,非常适合用于保龄球游戏的编程开发。
接下来,我们将使用C++来编写一个简单的保龄球游戏。
首先,我们需要创建一个保龄球游戏的窗口界面。
可以使用相关的图形库来实现,例如使用OpenGL来绘制游戏界面。
在游戏界面中,我们可以绘制保龄球的球道和瓶子,以及指示球的路径等元素。
同时,还需要实现一些用户交互功能,例如按下空格键来发球,按下方向键来控制球的移动方向等。
接下来,我们需要编写保龄球球道的物理模拟和碰撞检测等功能。
球道可以看作是一个斜坡,球在滚动过程中受到重力的作用,并具有一定的摩擦力。
为了检测球和瓶子之间的碰撞,我们需要计算球的位置和速度,以及瓶子的位置和状态。
当球撞击到瓶子时,需要判断球的移动方向和速度,以及瓶子的倒下状态,并根据相应的规则进行计分。
此外,我们还可以添加一些其他功能来增加游戏的趣味性,例如在球道上放置一些障碍物,或者实现不同难度级别的模式等。
可以根据需要自行设计和开发。
总结一下,编写简单保龄球游戏的编程需要掌握C++编程语言和相关的图形库,并具备一定的物理模拟和碰撞检测等知识。
通过合理设计和编程实现,可以创建一个美观、流畅,并且具有一定趣味性的保龄球游戏。
希望以上的介绍对您有所帮助,祝您编写保龄球游戏的编程开发顺利!。
保龄球比赛中的计分技巧如何最大限度地利用保龄球得分系统保龄球是一项受到广泛喜爱的休闲运动,而保龄球比赛则是保龄球爱好者们展示技巧和竞争实力的舞台。
在保龄球比赛中,计分技巧是取得最高分数的关键。
本文将详细介绍如何最大限度地利用保龄球得分系统,从而在比赛中获得更好的成绩。
一、了解保龄球得分系统在开始深入探讨保龄球比赛的计分技巧之前,首先需要全面了解保龄球的得分系统。
保龄球比赛采用的是十进制记分法,即按照每轮击球的击倒瓶数进行记分。
击倒一瓶得1分,全中(Strike)得到10分加上下两球的分数,补中(Spare)得到10分加上下一球的分数。
每局比赛共有10轮,第10轮有机会进行额外的两球。
二、掌握保龄球的基本击球技巧要想在保龄球比赛中取得好成绩,首先需要掌握保龄球的基本击球技巧。
正确的击球技巧包括正确的握球姿势、起始位置和击球动作。
在击球过程中,需要保持良好的平衡和稳定性,并确保击球的力度和方向准确。
三、善用全中(Strike)全中是指在一轮中将所有十个瓶子都击倒,这是获得最高分数的途径之一。
击中全中后,得到的下两球的分数将被加到当前得分中。
因此,在比赛中善于击中全中对于取得好成绩至关重要。
四、善用补中(Spare)补中是指在当前轮未能全中,但在下一轮将所有剩余的瓶子都击倒。
击中补中后,得到的下一球的分数将被加到当前得分中。
掌握善用补中的技巧可以帮助我们最大化地利用保龄球得分系统。
五、适应不同场地条件和球道保龄球比赛中的球道状况会因各种因素而发生变化,例如油量、摩擦力等。
因此,对于不同的场地条件,我们需要根据实际情况调整自己的击球策略。
例如,在油量较多的球道上,我们可以使用更重的球以增加穿透力,而在油量较少的球道上则需要使用轻一些的球以提高控制能力。
六、保持良好的心理状态保持良好的心理状态对于发挥出最佳水平非常重要。
在比赛过程中,我们可能会遇到挫折和压力,但要保持冷静和专注。
控制自己的情绪,放松身心,能够更好地应对各种情况,提高自己的竞技水平。
题目:保龄球计分【问题描述】打保龄球是用一个滚球去撞击10个站立的瓶,将瓶击倒。
一局分10 轮,每轮可滚球1 次或多次,以击到的瓶数为依据计分,一局得分为10轮得分之和,而每轮的得分不仅与本轮的滚球情况有关,还可能与后一轮或两轮的滚球情况有关,即:某轮某次滚球击倒的瓶数不仅要计入本轮得分,还可能会计入前一轮或两轮得分。
计分规则如下:①若某一轮的第一次滚球就击倒全部10个瓶,则本轮不再滚球(若是第10轮还需加2次滚球),该轮得分为本次击倒瓶数10与以后2次滚球所击倒瓶数之和。
②若某一轮的第一次滚球未击倒全部10个球,则对剩下未击倒的瓶再滚球一次,如果这2次滚球击倒全部10个瓶,则本轮不再滚球(若是第10轮还需加1次滚球),该轮得分为这2次击倒瓶数10与以后1次滚球所击倒瓶数之和。
③若某一轮2次滚球未击倒全部10个瓶,则本轮不在滚球,该轮得分为这2次滚球所击倒瓶数之和。
【实现提示】①模拟10个人各打一局保龄球比赛过程,统计每局各轮得分和累计总分。
②逐人逐轮逐次输入一次滚球击倒的瓶数。
③对10人的得分由低到高排序并显示。
④最后,把排序的存入文件中。
代码:/* Note:Your choice is C IDE */#include "stdio.h"#include "string.h"#include "stdlib.h"void main(){FILE *fp;int sum1(int *k);int sum2(int *k);int a[10][10][2];int sum[10][10];int sum_person[10]={0,0,0,0,0,0,0,0,0,0};int i,j,n,p;int b[10]={1,2,3,4,5,6,7,8,9,10},c;int *p1,*p2;char g[20],f[20],h[1];char str1[]={"As the rank and the score of each player shown below :\n"};char str2[]={"RANK"};char str3[]={"NO."};char str4[]={"SCORE"};char str5[]={" "};for (n=0;n<=9;n++) /*一局内,输入每轮每次击打保龄球个数,保存到a[n][i][j]*/{for (i=0;i<=9;i++){for(j=0;j<=1;j++){printf("请输入%d号选手第%d轮第%d次保龄球击打个数:",n+1,i+1,j+1);scanf("%d",&a[n][i][j]);if (a[n][i][0]==10){a[n][i][1]=0;break;}}}}for (n=0;n<=9;n++) /*统计每人每局每轮得分,并相应赋值到sum_person[n],sum[n][i]*/ {for (i=0;i<=9;i++){p1=&a[n][i][0];p=*p1+*(p1+1);switch(i){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:if (*p1==10)sum[n][i]=sum1(p1);else if (p==10)sum[n][i]=sum2(p1);elsesum[n][i]=p;break;case 8:if (*p1==10||p==10)sum[n][i]=sum2(p1);elsesum[n][i]=p;break;case 9:sum[n][i]=p;break;}}p2=&sum[n][0];for (j=0;j<=9;j++)sum_person[n]= sum_person[n]+(*(p2+j));}for (i=0;i<=9;i++) /*十个选手得分排名*/{for (n=i;n<=9;n++){if (sum_person[n]>sum_person[i]){c=sum_person[n];sum_person[n]=sum_person[i];sum_person[i]=c;c=b[n];b[n]=b[i];b[i]=c;}}}/*成绩输出到D:\\work\\bowling-grade.txt文件*/if ((fp=fopen("D:\\work\\bowling-grade.txt","w"))==NULL){printf("cant open file!\n");exit(0);}fputs(str1,fp);fputs("\n",fp);printf("比赛得分与排名如下:\n");printf("排名:选手: 得分:\n");fputs(str2,fp);fputs(str5,fp);fputs(str3,fp);fputs(str5,fp);fputs(str4,fp);fputs("\n",fp); for (n=0;n<=9;n++){printf("第%d名: No.%d %d\n",n+1,b[n],sum_person[n]);itoa(b[n],f,10);itoa(sum_person[n],g,10);itoa(n+1,h,10);fputs(f,fp);fputs(str5,fp);fputs(str3,fp);fputs(h,fp);fputs(str5,fp);fputs(g,fp);fputs("\n",fp);}fclose(fp);}int sum1(int *k) /*每轮第一次击球=10时,得分规则*/{int sum=0,m;for(m=0;m<=5;m++)sum+=(*(k+m));return(sum);}int sum2(int *k) /*每轮两次击球之和=10时,得分规则*/ {int sum=0,m;for(m=0;m<=3;m++)sum+=(*(k+m));return(sum);}输入情况:运行结果及输出:。
标准文档一、课程设计目的将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。
通过课程设计,学生在下述各方面的能力应该得到锻炼:(1)进一步巩固、加深学生所学专业课程《C语言教程》的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。
(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。
(3)利用所学知识,开发小型应用系统,掌握运用C语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。
(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。
(5)掌握自顶而下的设计方法,将大问题进行模块化,领会结构化程序设计的方法。
(6)熟练掌握C语言的基本语法,灵活运用各种数据类型。
(7)进一步掌握在集成环境下如何调试程序(单步调试,设置断点、观察表达式,分块调试)和修改程序。
二、课程设计名称及内容课程设计名称:运动会比赛计分系统设计内容:设计一个运动会比赛计分系统,该系统要求对运动会比赛得分进行管理和维护。
三、任务和要求要求:初始化输入:N-参赛学校总数,M-男子竞赛项目数,W-女子竞赛项目数各项目名次取法有如下几种:(1)取前5名:第一名得分7分,第二名得分5,第三名得分3,第四名得分2,第五名得分1;(2)取前3名:第一名得分5,第二名得分3,第三名得分2;(3)用户自定义:各名次权值由用户指定。
四、设计方案提示(1)界面系统以菜单方式工作(2)输入数据并存入文件使用到结构体变量和动态链表,由程序提醒用户填写比赛结果,输入各项目获奖运动员信息。
对输入的信息进行合法性判断,直到输入正确为止。
都输入完成后,调用写文件函数对指定的文件进行写操作,把输入的信息写入到文件中。
(3)显示所有记录将文件中的所有记录以表格的形式输出。
如果文件未打开会出现“文件打开失败!按任意键返回...”,关闭文件。
#include"stdio、h”#include"stdlib、h"int totscore();voidpaixu(struct people st[],int n);/*排序函数*/struct people{int num;int score;};/*定义结构体存储人与其对应得分数*/intK=1;void main(){int J;printf(”第%d局比赛成绩录入:\n",K);ﻩprintf("\n");FILE*fp;/* FILE*fp就是声明,声明fp就是指针,用来指向FILE类型得对象*/ int i,n;/*n就是参加比赛人数*/struct peoplest[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);}/* intfprintf( FILE *stream,constchar*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(structpeople 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);}。