问题描述
- 保龄球计分 空白填写
-
#include
#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) ", i, n, max);
else
printf(" 输入附加的第 %d 次滚球击倒柱数。(<= %d) ", c,max);
scanf("%d", &d);
if (d >=0 && d <= max) break;
printf(" 不合理的击倒柱数,请重新输入。 ");
}
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(" 各轮第二次得分 "); for(k=1; k <= i; k++) if (a[k].n < 2) printf(" /"); else printf("%5d", a[k].s); printf(" 各轮得分 "); for(k = 1; k <= ok; k++) printf("%5d", a[k].score); printf(" 累计总分 "); for(k = 1; k <= ok; k++) printf("%5d", a[k].total); printf(" "); }
}
解决方案
http://tieba.baidu.com/p/112621371