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