一道程序填空题
打保龄球是用一个滚球去打出十个站立的柱,将柱击倒。一局分十轮,每轮可滚球一次或多次,以击倒的柱数为依据计分。一局得分为十轮得分之和,而每轮的得分不仅与本轮滚球情况有关,还...
打保龄球是用一个滚球去打出十个站立的柱,将柱击倒。一局分十轮,每轮可滚球一次或多次,以击倒的柱数为依据计分。一局得分为十轮得分之和,而每轮的得分不仅与本轮滚球情况有关,还可能与后续一两轮的;滚球情况有关。即,某轮某次滚球击倒的柱数不仅要计入本轮得分,还可能会计入前一两轮得分。具体的滚球击柱规则和计分方法如下:
1 若某一轮的第一次滚球就击倒全部十个柱,则本轮不再滚球。(若是第十轮则还需另加两次滚球)。该轮得分为本次倒柱数10与以后两次滚球所击倒柱数之和。
2 若某一轮的第一次滚球未击倒十个柱,则可对剩下未倒的柱再滚球一次。如果这两次滚球击倒全部十个柱,则本轮不再滚球(若是第十轮则还需另加一次滚球),该轮得分为本次倒柱数10与以后一次滚球所击倒柱数之和。
3 若某一轮的两次滚球未击倒全部十个柱,则本轮不再继续滚球,该轮得分为这两次滚球击倒的柱数这和。 总之,若一轮中一次滚球或两次滚球击倒十个柱,则本轮得分是本轮首次滚球开始的连续三次滚球击倒柱数之和(其中有一次或两次不是本轮滚球)。若一轮内二次滚球击倒柱数不足十个,则本轮得分即为这两次击倒柱数之和。
本程序是模拟打一局保龄球的过程,统计各轮得分和累计总分。程序交互地逐轮逐次输人一次滚球击倒的柱数,计算该轮得分和累计总分。为记录因一轮内击倒十柱,还暂不能计算该轮得分和累计总分的情况,程序引人变量Oh,用来记录当前已完成完整计算的轮次。程序每输人一次滚球击倒柱数,就检查还未完成完整计算的轮次,并计算之。
(程序)1
#include<stdio. h>
#define N 13
struct { int n;/* 一轮内滚球次数 */
int f;/* 第一次击倒柱数 */
int s;/* 第一次击倒柱数 */
int score; /* 本轮得分 */
int total;/* 至本轮累计总分 */
int m; /* 完成本轮得分计算,还需滚球次数 */
} a 〔N〕;
int ok = 0; /* 已完成完整计算的轮次数 */
int ball(int i, int n, int max) /* 完成一次滚球,输入正确击倒柱数 */
{ int d, j, k; staic c=1;
while(1)
{ if (i<=10)
printf(" 输入第%d轮的第%d次滚球击倒柱数。(<=%d)\n", i, n, max);
else
printf(" 输入附加的第%d次滚球击倒柱数。(<=%d)\n", C++, max);
scanf("%d", &d);
if (d >=0 && d<=max) break;
printf(" 不合理的击倒柱数,请重新输入。\n");
}
if (ok <__(1)__)
{ /* 对以前未完成计算的轮次分别计算得分与累计总分 */
for(j=ok+1; __(2)__; j++)
{ a[j].score +=d;
if (--a[j].m==0)
{a[j].total=(__(3)__)+a[j].score; ok =__(4)__;}
}
}
return d;
}
main()
{ int i, /* 轮次 */ first, second, k;
for(i=1; ok < 10; i++)
{ /* 处理第一次滚球 */
a[i].score = a[i].f = first = ball(i,1,10);
if (first == 10) a[i].m=2;
a[i].n=1;
if (first <10 && (i <=10 || i==11 &&ok <10 ))
{ /* 处理第二次滚球*/
__(5)__=second=ball(i,2,10-first);
if (first + second ==10) a[i].m=1;
__(6)__;
}
if(i <= 10 && first <10 && fist +second <10)
{ a[i].total =(i>1 ? a[i-1].total:0)+a[i].score;
__(7)__;
}
printf(" 各轮第一次得分");
for(k=1; k<=1; k++) printf("%5d", a[k].f);
printf("\n各轮第二次得分 ");
for(k=1; k<=i; k++)
if (a[k].n <2) printf(" /"); else printf("%5d", a[k].s);
printf(" \n 各轮得分 ");
for(k=1; k <= ok; k++) printf("%5d", a[k].score);
printf("\n 累计总分 ");
for(k=1; k<= ok; k++) printf("%5d", a[k].total);
printf("\n\n");
}
} 展开
1 若某一轮的第一次滚球就击倒全部十个柱,则本轮不再滚球。(若是第十轮则还需另加两次滚球)。该轮得分为本次倒柱数10与以后两次滚球所击倒柱数之和。
2 若某一轮的第一次滚球未击倒十个柱,则可对剩下未倒的柱再滚球一次。如果这两次滚球击倒全部十个柱,则本轮不再滚球(若是第十轮则还需另加一次滚球),该轮得分为本次倒柱数10与以后一次滚球所击倒柱数之和。
3 若某一轮的两次滚球未击倒全部十个柱,则本轮不再继续滚球,该轮得分为这两次滚球击倒的柱数这和。 总之,若一轮中一次滚球或两次滚球击倒十个柱,则本轮得分是本轮首次滚球开始的连续三次滚球击倒柱数之和(其中有一次或两次不是本轮滚球)。若一轮内二次滚球击倒柱数不足十个,则本轮得分即为这两次击倒柱数之和。
本程序是模拟打一局保龄球的过程,统计各轮得分和累计总分。程序交互地逐轮逐次输人一次滚球击倒的柱数,计算该轮得分和累计总分。为记录因一轮内击倒十柱,还暂不能计算该轮得分和累计总分的情况,程序引人变量Oh,用来记录当前已完成完整计算的轮次。程序每输人一次滚球击倒柱数,就检查还未完成完整计算的轮次,并计算之。
(程序)1
#include<stdio. h>
#define N 13
struct { int n;/* 一轮内滚球次数 */
int f;/* 第一次击倒柱数 */
int s;/* 第一次击倒柱数 */
int score; /* 本轮得分 */
int total;/* 至本轮累计总分 */
int m; /* 完成本轮得分计算,还需滚球次数 */
} a 〔N〕;
int ok = 0; /* 已完成完整计算的轮次数 */
int ball(int i, int n, int max) /* 完成一次滚球,输入正确击倒柱数 */
{ int d, j, k; staic c=1;
while(1)
{ if (i<=10)
printf(" 输入第%d轮的第%d次滚球击倒柱数。(<=%d)\n", i, n, max);
else
printf(" 输入附加的第%d次滚球击倒柱数。(<=%d)\n", C++, max);
scanf("%d", &d);
if (d >=0 && d<=max) break;
printf(" 不合理的击倒柱数,请重新输入。\n");
}
if (ok <__(1)__)
{ /* 对以前未完成计算的轮次分别计算得分与累计总分 */
for(j=ok+1; __(2)__; j++)
{ a[j].score +=d;
if (--a[j].m==0)
{a[j].total=(__(3)__)+a[j].score; ok =__(4)__;}
}
}
return d;
}
main()
{ int i, /* 轮次 */ first, second, k;
for(i=1; ok < 10; i++)
{ /* 处理第一次滚球 */
a[i].score = a[i].f = first = ball(i,1,10);
if (first == 10) a[i].m=2;
a[i].n=1;
if (first <10 && (i <=10 || i==11 &&ok <10 ))
{ /* 处理第二次滚球*/
__(5)__=second=ball(i,2,10-first);
if (first + second ==10) a[i].m=1;
__(6)__;
}
if(i <= 10 && first <10 && fist +second <10)
{ a[i].total =(i>1 ? a[i-1].total:0)+a[i].score;
__(7)__;
}
printf(" 各轮第一次得分");
for(k=1; k<=1; k++) printf("%5d", a[k].f);
printf("\n各轮第二次得分 ");
for(k=1; k<=i; k++)
if (a[k].n <2) printf(" /"); else printf("%5d", a[k].s);
printf(" \n 各轮得分 ");
for(k=1; k <= ok; k++) printf("%5d", a[k].score);
printf("\n 累计总分 ");
for(k=1; k<= ok; k++) printf("%5d", a[k].total);
printf("\n\n");
}
} 展开
1个回答
展开全部
#include<stdio.h>
#define N 13
struct { int n; /* 一轮内滚球次数 */
int f; /* 第一次击倒柱数 */
int s; /* 第二次击倒柱数 */
int score; /* 本轮得分 */
int total; /* 至本轮累计总分 */
int m; /* 完成本轮得分计算,还需滚球次数 */
} a[N];
int ok = 0;/* 已完成完整计算的轮次数 */
int ball(int i, int n, int max) /* 完成一次滚球,输入正确击倒柱数 */
{ int d, j, k;
static c=1;
while(1)
{ if (i<=10)
printf(" 输入第%d轮的第%d次滚球击倒柱数。(<=%d)\n", i, n, max);
else
printf(" 输入附加的第%d次滚球击倒柱数。(<=%d)\n", c++, max);
scanf("%d", &d);
if (d >=0 && d<=max) break;
printf(" 不合理的击倒柱数,请重新输入。\n");
}
if (ok < i-1)
{ /* 对以前未完成计算的轮次分别计算得分与累计总分 */
for(j=ok+1; j<i; j++)
{ a[j].score +=d;
if (--a[j].m==0)
{a[j].total=(j<1?a[j-1].total:0)+a[j].score; ok=j;}
}
}
return d;
}
main()
{ int i, first, second, k;
for(i=1; ok < 10; i++)
{ /* 处理第一次滚球 */
a[i].score = a[i].f = first = ball(i,1,10);
if (first == 10) a[i].m=2;
a[i].n=1;
if (first <10 && (i <=10 || i==11 &&ok <10 ))
{ /* 处理第二次滚球*/
a[i].score+=a[i].s=second=ball(i,2,10-first);
if (first + second ==10) a[i].m=1;
a[i].n=2;
}
if(i <= 10 && first <10 && first +second <10)
{ a[i].total =(i>1 ? a[i-1].total:0)+a[i].score;
ok=i;
}
printf(" 各轮第一次得分");
for(k=1; k<=1; k++) printf("%5d", a[k].f);
printf("\n各轮第二次得分 ");
for(k=1; k<=i; k++)
if (a[k].n <2) printf(" /"); else printf("%5d", a[k].s);
printf(" \n 各轮得分 ");
for(k=1; k <= ok; k++) printf("%5d", a[k].score);
printf("\n 累计总分 ");
for(k=1; k<= ok; k++) printf("%5d", a[k].total);
printf("\n\n");
}
}
#define N 13
struct { int n; /* 一轮内滚球次数 */
int f; /* 第一次击倒柱数 */
int s; /* 第二次击倒柱数 */
int score; /* 本轮得分 */
int total; /* 至本轮累计总分 */
int m; /* 完成本轮得分计算,还需滚球次数 */
} a[N];
int ok = 0;/* 已完成完整计算的轮次数 */
int ball(int i, int n, int max) /* 完成一次滚球,输入正确击倒柱数 */
{ int d, j, k;
static c=1;
while(1)
{ if (i<=10)
printf(" 输入第%d轮的第%d次滚球击倒柱数。(<=%d)\n", i, n, max);
else
printf(" 输入附加的第%d次滚球击倒柱数。(<=%d)\n", c++, max);
scanf("%d", &d);
if (d >=0 && d<=max) break;
printf(" 不合理的击倒柱数,请重新输入。\n");
}
if (ok < i-1)
{ /* 对以前未完成计算的轮次分别计算得分与累计总分 */
for(j=ok+1; j<i; j++)
{ a[j].score +=d;
if (--a[j].m==0)
{a[j].total=(j<1?a[j-1].total:0)+a[j].score; ok=j;}
}
}
return d;
}
main()
{ int i, first, second, k;
for(i=1; ok < 10; i++)
{ /* 处理第一次滚球 */
a[i].score = a[i].f = first = ball(i,1,10);
if (first == 10) a[i].m=2;
a[i].n=1;
if (first <10 && (i <=10 || i==11 &&ok <10 ))
{ /* 处理第二次滚球*/
a[i].score+=a[i].s=second=ball(i,2,10-first);
if (first + second ==10) a[i].m=1;
a[i].n=2;
}
if(i <= 10 && first <10 && first +second <10)
{ a[i].total =(i>1 ? a[i-1].total:0)+a[i].score;
ok=i;
}
printf(" 各轮第一次得分");
for(k=1; k<=1; k++) printf("%5d", a[k].f);
printf("\n各轮第二次得分 ");
for(k=1; k<=i; k++)
if (a[k].n <2) printf(" /"); else printf("%5d", a[k].s);
printf(" \n 各轮得分 ");
for(k=1; k <= ok; k++) printf("%5d", a[k].score);
printf("\n 累计总分 ");
for(k=1; k<= ok; k++) printf("%5d", a[k].total);
printf("\n\n");
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询