Instructor's solution to Asst.4, Q.2B

Question
Trace the following program and determine the output.
10 int main()
11 {
12   int i, j, rem; 
13   j=40;
14   printf("Before loop, j=%d\n", j);
15   for (i=1; i<=j; j--)
16   {
17     rem=j%i;
18     j=j/i;
19     if (rem!=0)
20 	{ 
21 	  i=rem;
22 	  printf("Case 1: remainder is nonzero\n");
23 	}  
24 	else 
25 	{ 
26 	  i=i+1;
27 	  printf("Case 2: remainder is zero\n");
28 	}  
29 	printf("i=%d, j=%d\n", i,j);	
30   }
31   printf("After loop: i=%d, j=%d\n", i,j);    
32   return(0);
33 }
Solution
line# |  i  |  j  | rem | condition | output 
---------------------------------------------
 13   |  ?  | 40  | ?   |           |
---------------------------------------------
 14   |     | 40  |     |           | Before loop, j=40
---------------------------------------------
 15   |  1  | 40  |     |1<=40 T |
---------------------------------------------
 17   |  1  | 40  |  0  |           |
---------------------------------------------
 18   |  1  | 40  |  0  |           |
---------------------------------------------
 19   |  1  | 40  |  0  |0!=0 F =>line 24=>26
---------------------------------------------
 26   |  2  | 40  |  0  |           |
---------------------------------------------
 27   |  2  | 40  |  0  |           | Case 2: remainder is zero
---------------------------------------------
 29   |  2  | 40  |  0  |           | i=2, j=40 
---------------------------------------------
 15   |  2  | 39  |  0  |2<=39 T |
---------------------------------------------
 17,18|  2  | 19  |  1  |           |
---------------------------------------------
 19   |  2  | 19  |  1  | 1!=0  T   |
---------------------------------------------
 20   |  1  | 19  |  1  |           |
---------------------------------------------
 21   |     |     |     |           | Case 1: remainder is nonzero
---------------------------------------------
 29   |  1  | 19  |  1  |           | i=1, j=19
---------------------------------------------
 15   |  1  | 18  |  1  |1<=18 T |
---------------------------------------------
 17,18|  1  | 18  |  0  |           |
---------------------------------------------
 19   |  1  | 18  |  0  |0!=0 F =>line 24=>26
---------------------------------------------
 26   |  2  | 18  |  0  |           |
---------------------------------------------
 27   |  2  | 18  |  0  |           | Case 2: remainder is zero
---------------------------------------------
 29   |  2  | 18  |  0  |           | i=2, j=18 
---------------------------------------------
 15   |  2  | 17  |  0  |2<=17 T |
---------------------------------------------
 17,18|  2  |  8  |  1  |           |
---------------------------------------------
 19   |  2  |  8  |  1  | 1!=0  T   |
---------------------------------------------
 20   |  1  |  8  |  1  |           |
---------------------------------------------
 21   |     |     |     |           | Case 1: remainder is nonzero
---------------------------------------------
 29   |  1  |  8  |  1  |           | i=1, j=8
---------------------------------------------
 15   |  1  |  7  |  1  |1<=7  T  |
---------------------------------------------
 17,18|  1  |  7  |  0  |           |
---------------------------------------------
 19   |  1  |  7  |  0  |0!=0 F =>line 24=>26
---------------------------------------------
 26   |  2  |  7  |  0  |           |
---------------------------------------------
 27   |  2  |  7  |  0  |           | Case 2: remainder is zero
---------------------------------------------
 29   |  2  |  7  |  0  |           | i=2, j=7  
---------------------------------------------
 15   |  2  |  6  |  0  |2<=6  T |
---------------------------------------------
 17,18|  2  |  3  |  0  |           |
---------------------------------------------
 19   |  2  |  3  |  0  | 0!=0  F =>line 24=>26   
---------------------------------------------
 26   |  3  |  3  |  0  |           |                          
---------------------------------------------
 27   |  3  |  3  |  0  |           | Case 2: remainder is zero
---------------------------------------------
 29   |  3  |  3  |  0  |           | i=3, j=3  
---------------------------------------------
 15   |  3  |  2  |  0  |3<=2 F => exit loop
---------------------------------------------
 31   |  3  |  2  |  0  |           | After loop: i=3, j=2
---------------------------------------------
 32   |  program ends with exit code 0            
---------------------------------------------
Summary of output:
Before loop, j=40
Case 2: remainder is zero
i=2, j=40
Case 1: remainder is nonzero
i=1, j=19
Case 2: remainder is zero
i=2, j=18
Case 1: remainder is nonzero
i=1, j=8
Case 2: remainder is zero
i=2, j=7
Case 2: remainder is zero
i=3, j=3
After loop: i=3, j=2

Back to AMAT 2120 main page