Solutions to Homework Assignment #5

1. Let Si be a statement and Ci be a condition. i, j, k, kind are integer variables. For each of the following statements, draw a flowchart using the basic one-entry-one-exit control structures.

(a) if (C1)

if (C2)

for (i = 0; i<100; i++) S1;

else

for (j = 100; j>0; j--) S2;

else

for (k = 0; k<i+j; k++) S3;

(b) do {

while (C1) S1;

S2;

} while (C2);

@

(c) switch (kind) {

case 1: {

while (C1) {S1; S2;}

break;

}

case 2: {

for (i=0; i<100; i+=kind) S3;

break;

}

case 3:

do {S4;} while (C2);

}

2. Consider the following  program segment:

int a[5][4][3];
int i, j, k;

@

for (i=0; i<5; i++)

  for (j=0; j<4; j++)

    for (k=0; k<3; k++) a[i][j][k] = i + j + k;

Suppose the starting address of array a[0][0][0] is 0X22FEF0. Write the value or address of each of the following expressions. Explain your answers.

(a) a+2 = the address of a[2][0][0] = 0X22FEF0 + 0X60 = 0X22FF50

(b) *(a+2)+3 = the address of a[2][3][0] = 0X22FEF0 + 0X84 = 0X22FF74

(c) **(a+3)+1 = the address of a[3][0][1] = 0X22FEF0 + 0X94 = 0X22FF84

(d) *(*(a+3)+1)+1 = the address of a[3][1][1] = 0X22FEF0 + 0XA0 = 0X22FF90

(e) *(*(*(a+4)+3)+2) = the value of a[4][3][2] = 9

3. For each of the following program segments, answer how many loop iterations are executed. Explain your answers.

(a)

for (i=0; i<100; i=i+3)

  for (j=i; j>=0; j--) {

    a = a + i + j;

} 

The loop variable i of outer loop has values 0, 3, 6, ¼, and up to 99. The inner loop takes i+1 iterations. The total number of iterations executed by the two loops is:

The loop has a total of 1717 iterations.

(b)

i= 100;

j = 10;

k = 15;

while (i>=j+k) {

  i = i - 4;

  j = j + 3;

  k = k - 5;

}

We can modify the above program to add a temporary variable temp as j+k:

i= 100;

j = 10;

k = 15;

temp = 25

while (i-temp>=0) {

  i = i - 4;

  j = j + 3;

  k = k - 5;

  temp = temp - 2;

}

The initial value of i-temp is 75 and, the value i-temp is decremented by 2. Hence, the values of i-temp are 75, 73, 71, ¼, and down to 1. The loop has a total of 38 iterations.

(c)

i = 500;

j = 300;

do {

  if (i<j) {i++; j--;}

  else {i--; j++;}

} while (i!=j);

In this program segment, i is greater than or equal to j, therefore, only the else clause of the conditional statement is executed. The value of i-j is 200 initially and it is decremented by two after each iteration. Hence, it takes 100 iterations to make the loop condition i!=j become false.

4. For the following restaurant order procedure, (a) draw a flowchart to show the procedure, (b) modify the flowchart of (a) using only the basic one-entry-one-exit control structures.


1. Ask and read waiter's name.
2. Ask and read table number.
3. Show the menu.
4. Select an item.
5. If the item selected is between 1 and 8, then enter the number of the selected item.
6. Record the order and go to Step 3.
7. If the item selected in Step 4 is 0, then complete the order.
8. List all items ordered and their quantity.
9. List the total price.
10. List the waiter's name and the table number.

(a)

(b)