A.5. Chapter 7

A.5.1. Exercise 1 Solution

One possible solution is:

int factorial = 1;

for (i = num; i > 0; i--)
{
    factorial *= i;
}
lblAnswer.Text = factorial.ToString();

In the for loop, notice how the initial state of the loop is set to the number to factor (expression1) and how the loop control expression (expression3) uses the decrement operator to walk "backward" through the loop.

A.5.2. Exercise 2 Solution

The solution shown for Exercise 1 produces the correct answers . . . provided you don't enter a large number to factorial. Because factorials can produce very large numbers, one problem is using an int data type for variable factorial. Even a factorial as small as 13 overflows the range of an int. It would be better to use a double to extend its range.

A more subtle problem is that the test expression, i > 0, causes the loop to execute one more time than is really necessary. The reason is that the last iteration of the loop ends up multiplying the current value of factorial by 1 which, of course, has no impact on the result. You can correct this inefficiency by changing the second expression of the for loop to

i > 1

This does away with the unnecessary loop iteration that multiplies factorial by 1.

A.5.3. Exercise 3 Solution

One solution is

const int FOURPOUNDS = 64; const double GRAMSPEROUNCE = 28.3495231; int i; double grams; string buff; for (i = 1; i <= FOURPOUNDS; i++) { grams = (double) i * GRAMSPEROUNCE; buff = string.Format("{0, 4} {1, 15}", i, grams); lstResult.Items.Add(buff); ...

Get Beginning C# 3.0 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.