The following is a complete listing and output of a version of the Bowling Scores program that contains statements used as debugging aids (the boxed lines). This listing demonstrates how to use such statements and what they can tell us as we peruse the output. The roll scores of the two games that served as input are
game 1?/FONT>5, 4, 6, 4, 2, 4, 1, 4, 3, 4, 8, 1, 9, 0, 10, 10, 9, 0
game 2?/FONT>9, 1, 10, 7, 3, 9, 0, 10, 10, 5, 4, 6, 4, 10, 10, 10, 8
The prompts for input are in the program. They have been omitted from the output.
#include <stdio.h>
#define TRUE 1
#define FALSE 0
main()
/* Bowling Scores calculates and prints the game scores
for a series of bowling games. It also prints the
number of games bowled, the minimum, average, and
maximum of all game scores. The input consists, for
each game, of a sequence of roll scores. Each roll
represents the number of pins knocked down on the
corresponding roll. Its input must consist of at least
one game.
Main Variables
average - average of all game scores
gamescore - score for the current game
max - current maximum game score
min - current minimum game score
number - current number of games played
total - accumulated total of all game scores
*/
{
int gamescore;
int number = 0, max = 0, total = 0, min = 300;
int newgame = TRUE;
float average;
while (newgame)
{
printf("\n CALLING GAMECALC FOR GAME #%2d",number+1);
printf("\n-----------------------------\n");
gamescore = gamecalc(gamescore);
printf("-===>RETURNING FROM GAMECALC WITH GAMESCORE");
printf(" =%3d FOR GAME #%2d\n",gamescore, number+1);
printf("CALLING UPDATE WITH; MIN TOTAL MAX NUMBER\n");
printf("%26d%5d%5d%5d\n",min,total,max,number);
update(gamescore,&number,&min,&max,&total);
printf("If you want to bowl another game enter a 1 \n");
printf("If you wish to stop enter a 0 \n");
scanf("%d",&newgame);
printf("-===>RETURNING FROM UPDATE: MIN TOTAL MAX");
printf("NUMBER\n");
printf("%33d%6d%6d%5d\n",min,total,max,number);
}
average = ((float)total)\number;
printf("FINAL RESULTS FOR ALL GAMES FOLLON:\n");
printf("***********************************\n");
printf(" ACCUMULATED TOTAL = %5d\n\n",total);
printf(" MINIMUM GAME = %5d\n",min);
printf(" AVERAGE GAME = %10.4f\n",average);
printf(" MAXIMUM GAME = %5d\n\n",max);
printf("NUMBER OF GAMES PLAYED = %3d\n",number);
}
gamecalc(gamescore)
/* calculates gamescore for the current game.
Main variables
frame - the current frame
gamescore - score for the current game
rollscore - first roll score of the current frame
r1 - succeeding roll score after rollscore
*/
int gamescore;
{
int frame, rollscore, r1;
gamescore = 0;
frame = 1;
printf("Please enter the number of pins down on this roll\n");
scanf("%d",&rollscore);
printf("Please enter the number of pins down on this roll\n");
scanf("%d",&r1);
while (frame <= 10)
{
printf(" IN GAMECALC, GOING TO FRAMECALC WITH: GAMESCORE");
printf(" FRAME ROLLSCORE R1\n");
printf("%49d%9d%9d%7d\n",gamescore,frame,rollscore, r1);
framecalc(&gamescore,&frame,&rollscore,&r1);
printf(" IN GAMECALC, RETURNING FROM FRAMECALC WITH:");
printf("GAMESCORE FRAME ROLLSCORE R1\n");
printf("%53d%9d%9d%7d\n\n",gamescore,frame,rollscore,r1);
}
return(gamescore);
}
framecalc(pgamescore,pframe,prollscore,pr1)
/* Calculates the framescore for the current game,
adds it to gamescore, increases frame by 1 and
updates rollscore and r1.
Main variables
pframe - pointer to the current frame
pgamescore - pointer to the score for the current game
prollscore - pointer to first rollscore of current frame
pr1 - pointer to next rollscore of current frame
framescore - score for current frame
r2 - rollscore after r1
*/
int *pgamescore,*pframe,*prollscore,*pr1;
{
int framescore, r2;
printf(" STARTING FRAMECALC WITH: GAMESCORE FRAME");
printf(" ROLLSCORE R1\n");
printf("%36d%9d%9d%7d\n",*pgamescore,*pframe,*prollscore,*pr1);
if(*prollscore == 10) /* it is a strike */
{
printf("Please enter the number of pins down on this");
printf(" roll\n");
scanf("%d",&r2);
framescore = 10 + *pr1 + r2;
*prollscore = *pr1;
*pr1 = r2;
printf("AFTER STRIKE, FRAMESCORE = %2d\n", framescore);
}
else if ((*prollscore + *pr1) == 10) /* it is a spare */
{
printf("Please enter the number of pins down on this");
printf(" roll\n");
scanf("%d",&r2);
framescore = 10 + r2;
printf("AFTER SPARE, FRAMESCORE= %2d\n", framescore);
*prollscore = r2;
if (*pframe < 10)
{
printf("Please enter the number of pins down");
printf(" on this roll\n");
scanf("%d",pr1);
}
}
else /* it is an open frame */
{
framescore = *prollscore + *pr1;
printf("OPEN FRAME, FRAMESCORE %2d\n",framescore);
if (*pframe < 10)
{
printf("Please enter the number of pins");
printf(" down on this roll\n");
scanf("%d",prollscore);
printf("Please enter the number of pins");
printf(" down on this roll\n");
scanf("%d",pr1);
}
}
*pgamescore = *pgamescore + framescore;
*pframe = *pframe + 1;
printf(" LEAVING FRAMECALC WITH: GAMESCORE FRAME");
printf(" ROLLSCORE R1\n");
printf("%35d%9d%9d%7d\n\n",*pgamescore,*pframe,*prollscore,*pr1);
}
update(gamescore,pnumber,pmin,pmax,ptotal)
/* This prints gamescore, and updates number, min, max
and total to reflect gamescore.
Main variables
gamescore - current game score
pnumber - pointer to current number of games
pmin - pointer to current minimum game score
pmax - pointer to current maximum game score
ptotal - pointer to total of all game scores
*/
int gamescore, *pnumber, *pmin, *pmax;
int *ptotal;
{
printf("\n BEGINNING TO UPDATE WITH: GAMESCORE");
printf(" NUMBER MIN MAX TOTAL\n");
printf("%37d%8d%8d%4d%6d\n",
gamescore, *pnumber, *pmin, *pmax, *ptotal);
*pnumber = *pnumber + 1;
*ptotal = *ptotal + gamescore;
if (gamescore < *pmin)
*pmin = gamescore;
if (gamescore > *pmax)
*pmax = gamescore;
printf(" LEAVING UPDATE WITH: GAMESCORE NUMBER");
printf(" MIN MAX TOTAL\n");
printf("%35d%8d%8d%5d%6d\n\n",
gamescore,*pnumber,*pmin,*pmax,*ptotal);
}
The output of the program is as follows.
CALLING GAMECALC FOR GAME # 1
-----------------------------
IN GAMECALC, GOING TO FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
0 1 5 4
STARTING FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
0 1 5 4
OPEN FRAME, FRAMESCORE = 9
LEAVING FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
9 2 6 4
IN GAMECALC, RETURNING FROM FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
9 2 6 4
IN GAMECALC, GOING TO FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
9 2 6 4
STARTING FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
9 2 6 4
AFTER SPARE, FRAMESCORE = 12
LEAVING FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
21 3 2 4
IN GAMECALC, RETURNING FROM FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
21 3 2 4
IN GAMECALC, GOING TO FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
21 3 2 4
STARTING FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
21 3 2 4
OPEN FRAME, FRAMESCORE = 6
LEAVING FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
27 4 1 4
IN GAMECALC, RETURNING FROM FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
27 4 1 4
IN GAMECALC, GOING TO FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
27 4 1 4
STARTING FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
27 4 1 4
OPEN FRAME, FRAMESCORE = 5
LEAVING FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
32 5 3 4
IN GAMECALC, RETURNING FROM FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
32 5 3 4
IN GAMECALC, GOING TO FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
32 5 3 4
STARTING FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
32 5 3 4
OPEN FRAME, FRAMESCORE = 7
LEAVING FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
39 6 8 1
IN GAMECALC, RETURNING FROM FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
39 6 8 1
IN GAMECALC, GOING TO FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
39 6 8 1
STARTING FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
39 6 8 1
OPEN FRAME, FRAMESCORE = 9
LEAVING FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
48 7 9 0
IN GAMECALC, RETURNING FROM FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
48 7 9 0
IN GAMECALC, GOING TO FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
48 7 9 0
STARTING FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
48 7 9 0
OPEN FRAME, FRAMESCORE = 9
LEAVING FRAMECALS WITH: GAMESCORE FRAME ROLLSCORE R1
57 8 10 10
IN GAMECALC, RETURNING FROM FRAMECAL WITH: GAMESCORE FRAME ROLLSCORE R1
57 8 10 10
IN GAMECALC, GOING TO FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
57 8 10 10
STARTING FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
57 8 10 10
AFTER STRIKE, FRAMESCORE = 29
LEAVING FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
86 9 10 9
IN GAMECALC, RETURNING FROM FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
86 9 10 9
IN GAMECALC, GOING TO FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
86 9 10 9
STARTING FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
86 9 10 9
AFTER STRIKE, FRAMESCORE = 19
LEAVING FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
105 10 9 0
IN GAMECALC, RETURNING FROM FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
105 10 9 0
IN GAMECALC, GOING TO FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
105 10 9 0
STARTING FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
105 10 9 0
OPEN FRAME, FRAMESCORE = 9
LEAVING FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
114 11 9 0
IN GAMECALC, RETURNING FROM FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
114 11 9 0
- = = = > RETURNING FROM GAMECALC WITH GAMESCORE = 114 FOR GAME # 1
CALLING UPDATE WITH; MIN TOTAL MAX NUMBER
300 0 0 0
BEGINNING TO UPDATE WITH: GAMESCORE NUMBER MIN MAX TOTAL
114 0 300 0 0
LEAVING UPDATE WITH: GAMESCORE NUMBER MIN MAX TOTAL
114 1 114 114 114
- = = = > RETURNING FROM UPDATE: MIN TOTAL MAX NUMBER
114 114 114 1
CALLING GAMECALC FOR GAME # 2
-----------------------------
IN GAMECALC, GOING TO FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
0 1 9 1
STARTING FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
0 1 9 1
AFTER SPARE, FRAMESCORE = 20
LEAVING FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
20 2 10 7
IN GAMECALC, RETURNING FROM FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
20 2 10 7
IN GAMECALC, GOING TO FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
20 2 10 7
STARTING FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
20 2 10 7
AFTER STRIKE, FRAMESCORE = 20
LEAVING FRAMECAL WITH: GAMESCORE FRAME ROOLSCORE R1
40 3 7 3
IN GAMECALC, RETURNING FROM FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
40 3 7 3
IN GAMECALC, GOING TO FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
40 3 7 3
STARTING FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
40 3 7 3
AFTER SPARE, FRAMESCORE = 19
LEAVING FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
59 4 9 0
IN GAMECALC, RETURNING FROM FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
59 4 9 0
IN GAMECALC, GOING TO FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
59 4 9 0
STARTING FRAMECALS WITH: GAMESCORE FRAME ROLLSCORE R1
59 4 9 0
OPEN FRAME, FRAMESCORE = 9
LEAVING FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
68 5 10 10
IN GAMECALC, RETURNING FROM FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
68 5 10 10
IN GAMECALC, GOING TO FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
68 5 10 10
STARTING FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
68 5 10 10
AFTER STRIKE, FRAMESCORE = 25
LEAVING FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
93 6 10 5
IN GAMECALC, RETURNING FROM FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
93 6 10 5
IN GAMECALC, GOING TO FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
93 6 10 5
STARTING FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
93 6 10 5
AFTER STRIKE, FRAMESCORE = 19
LEAVING FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
112 7 5 4
IN GAMECALC, RETURNING FROM FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
112 7 5 4
IN GAMCALC, RETURNING FROM FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
112 7 5 4
STARTING FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
112 7 5 4
OPEN FRAME, FRAMESCORE = 9
LEAVING FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
121 8 6 4
IN GAMECALC, RETURNING FROM FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
121 8 6 4
IN GAMECALC, GOING TO FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
121 8 6 4
STARTING FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
121 8 6 4
AFTER SPARE, FRAMESCORE = 20
LEAVING FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
141 9 10 10
IN GARAMECALC, RETURNING FROM FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
141 9 10 10
IN GAMECALC, GOING TO FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
141 9 10 10
STARTING FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
141 9 10 10
AFTER STRIKE, FRAMESCORE = 30
LEAVING FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
171 10 10 10
IN GAMECALC, RETURNING FROM FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
171 10 10 10
IN GAMECALC, GOING TO FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
171 10 10 10
STARTING FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
171 10 10 10
AFTER STRIKE, FRAMESCORE = 28
LEAVING FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
199 11 10 8
IN GAMECALC, RETURNING FROM FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1
199 11 10 8
- = = = > RETURNTING FROM GAMECALC WITH GAMESCORE = 199 FOR GAME # 2
CALLING UPDATE WITH: MIN TOTAL MAX NUMBER
114 114 114 1
BEGINNING TO UPDATE WITH: GAMESCORE NUMBER MIN MAX TOTAL
199 1 114 114 114
LEAVING UPDATE WITH: GAMESCORE NUMBER MIN MAX TOTAL
199 2 114 199 313
- = = = > RETURNING FROM UPDATE: MIN TOTAL MAX NUMBER
114 313 199 2
FINAL RESULTS FOR ALL GAMES FOLLOW:
***********************************
ACCUMULATED TOTAL = 313
MINIMUM GAME = 114
AVERAGE GAME = 156.5000
MAXIMUM GAME = 199
NUMBER OF GAMES PLAYED = 2