1、题目:保龄球计分保龄球计分 【问题描述】【问题描述】打保龄球是用一个滚球去撞击 10 个站立的瓶,将瓶击倒。一局分 10 轮, 每轮可滚球 1 次或多次,以击到的瓶数为依据计分,一局得分为 10 轮得分之和,而每轮 的得分不仅与本轮的滚球情况有关,还可能与后一轮或两轮的滚球情况有关,即:某轮某次 滚球击倒的瓶数不仅要计入本轮得分,还可能会计入前一轮或两轮得分。计分规则如下: 若某一轮的第一次滚球就击倒全部 10 个瓶,则本轮不再滚球(若是第 10 轮还需 加 2 次滚球) ,该轮得分为本次击倒瓶数 10 与以后 2 次滚球所击倒瓶数之和。 若某一轮的第一次滚球未击倒全部 10 个球, 则对剩下
2、未击倒的瓶再滚球一次, 如 果这 2 次滚球击倒全部 10 个瓶, 则本轮不再滚球 (若是第 10 轮还需加 1 次滚球) , 该轮得分为这 2 次击倒瓶数 10 与以后 1 次滚球所击倒瓶数之和。 若某一轮 2 次滚球未击倒全部 10 个瓶,则本轮不在滚球,该轮得分为这 2 次滚球 所击倒瓶数之和。 【实现提示】实现提示】 模拟 10 个人各打一局保龄球比赛过程,统计每局各轮得分和累计总分。 逐人逐轮逐次输入一次滚球击倒的瓶数。 对 10 人的得分由低到高排序并显示。 最后,把排序的存入文件中。 代码代码: /* Note:Your choice is C IDE */ #include “
3、stdio.h“ #include “string.h“ #include “stdlib.h“ void main() FILE *fp; int sum1(int *k); int sum2(int *k); int a10102; int sum1010; int sum_person10=0,0,0,0,0,0,0,0,0,0; int i,j,n,p; int b10=1,2,3,4,5,6,7,8,9,10,c; int *p1,*p2; char g20,f20,h1; char str1=“As the rank and the score of each player sho
4、wn below :n“; char str2=“RANK“; char str3=“NO.“; char str4=“SCORE“; char str5=“ “; for (n=0;n=9;n+) /*一局内,输入每轮每次击打保龄球个数一局内,输入每轮每次击打保龄球个数,保存到保存到 anij*/ for (i=0;i=9;i+) for(j=0;j=1;j+) printf(“请输入请输入%d 号选手第号选手第%d 轮第轮第%d 次保龄球击打个数:次保龄球击打个数:“,n+1,i+1,j+1); scanf(“%d“, if (ani0=10) ani1=0;break; for (n=0
5、;n=9;n+) /*统计每人每局每轮得分, 并相应赋值到统计每人每局每轮得分, 并相应赋值到 sum_personn,sumni*/ for (i=0;i=9;i+) p1=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) sumni=sum1(p1); else if (p=10) sumni=sum2(p1); else sumni=p; break; case 8: if (*p1=10|p=10) sumni=sum2(p1); el
6、se sumni=p;break; case 9: sumni=p;break; p2= for (j=0;j=9;j+) sum_personn= sum_personn+(*(p2+j); for (i=0;i=9;i+) /*十个选手得分排名十个选手得分排名*/ for (n=i;nsum_personi) c=sum_personn; sum_personn=sum_personi; sum_personi=c; c=bn; bn=bi; bi=c; /*成绩输出到成绩输出到 D:workbowling-grade.txt 文件文件*/ if (fp=fopen(“D:workbowl