📄 8-2-14.c
字号:
/*中国系统分析员顾问团,http://www.csai.cn*/
/*程序员下午考试指南书籍源码*/
#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 <= i; 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");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -