打保龄球是用一个滚球去撞击10个站立的瓶,将瓶击倒。一局分10 轮,每轮可滚球1 次或多次,以击到的瓶数为依据计分,一局得分为10轮得分之和,而每轮的得分不仅与本轮的滚球情况有关,还可能与后一轮或两轮的滚球情况有关,即:某轮某次滚球击倒的瓶数不仅要计入本轮得分,还可能会计入前一轮或两轮得分。计分规则如下
若某一轮的第一次滚球就击倒全部10个瓶,则本轮不再滚球(若是第10轮还需加2次滚球),该轮得分为本次击倒瓶数10与以后2次滚球所击倒瓶数之和。
若某一轮的第一次滚球未击倒全部10个球,则对剩下未击倒的瓶再滚球一次,如果这2次滚球击倒全部10个瓶,则本轮不再滚球(若是第10轮还需加1次滚球),该轮得分为这2次击倒瓶数10与以后1次滚球所击倒瓶数之和。
若某一轮2次滚球未击倒全部10个瓶,则本轮不在滚球,该轮得分为这2次滚球所击倒瓶数之和。
源文件:
#include\#include\
void li(int a[11][11]); int qiu();
void paixu(struct people st[],int n); /*定义结构体存储人和其对应的分数*/ struct people { int num; int score; };
void main() { FILE *fp; int i,n;
struct people st[80]; puts(\请输入总人数:\ scanf(\
   for(i=0;i    printf(\请输入第%d人击倒的瓶数\\n\      st[i].num=i+1;        st[i].score=qiu();    }     for(i=0;i    {  printf(\第%d人击倒的瓶数是:%d\   printf(\   }  /*将存储后的数据排序*/      paixu(st,n);    puts(\排序=============================================\  for(i=0;i   {  printf(\第]人击倒瓶的总数是]\  printf(\  }  /*排序后的结果存储到binbin.txt*/      if((fp=fopen(\  {      puts(\不能打开文件======\ exit(0);   }   for(i=0;i      fprintf(fp,\第%d人击倒瓶的总数是]\\n\  }  fclose(fp); }  /*排序子函数2*/  void paixu(struct people st[],int n) { int i,j;    struct people t;   for(i=0;i      if(st[i].score>st[j].score)    { t=st[i];        st[i]=st[j];       st[j]=t;   }    } }  /*求每局总分数的子函数2*/ int qiu() {    2  后 int a[19][8],i,j,t,m,q,w,x,sum=0,k,y=0,Q=0,p;    for(i=1;i<=10;i++)    {   for(j=0;j<1;)    {          printf(\请输入第%d轮第一次击倒的瓶数\\n\         puts(\注意输入击倒的瓶数不要高于10-------------\        scanf(\  t=a[i][j];                               /*此阶段分为三中情况1.a[i][j]<10  2.a[i][j]==10  3.a[i][j]>10显然这是情形一*/         if(a[i][j]<10)   {         printf(\请输入第%d轮第二次击倒的瓶数\\n\           printf(\注意输入击倒的瓶数不要高于%d--------------\\n\           j++;             scanf(\        if(a[i][j]<=10-t)      {         m=a[i][j];            }      else      {      while(a[i][j]>10-t)       {          printf(\错误!!!请输入第%d轮第二次击倒的瓶数\\n\              printf(\注意输入击倒的瓶数不要高于%d-----------\\n\                  scanf(\      }                   m=a[i][j];      }    3      if((a[i][j]<=10-t)&&(i<10))     {        printf(\该轮击倒的瓶数是%d\\n\   x=0;     }       if((a[i][j]<10-t)&&(i==10))      {        printf(\该轮击倒的瓶数是%d\\n\   x=0;      }       if((a[i][j]==10-t)&&(i==10))      {          puts(\请再次输入一次击倒的瓶数\      puts(\输入击倒的瓶数不要大于10----------\     scanf(\     if(k<=10)        x=k;/*引入K便于最后总分的计算,       因为前两次的可以方便用数组a[i][j]存贮二此次不可在用数组存储,      否则步利于总分的计算*/     else       {  while(k>10)            {             puts(\再次输入一次击倒的瓶数\             printf(\输入击倒的瓶数不要大于10------------\            scanf(\      }        x=k;        }        printf(\该轮击倒的瓶数是%d\\n\     }      }                        /* 情形2*/     if(a[i][j]==10)     {        if(i==10)      {       puts(\输入额外的第一次击倒的瓶数:\               puts(\注意输入击倒的瓶数不要高于10 ----------\   4