Next: Summary
Up: Introduction to C++ Programming
Previous: Exercises
The if-else statement allows a choice to be made between two
possible alternatives. Sometimes a choice must be made between more
than two possibilities. For example the sign function in mathematics
returns -1 if the argument is less than zero, returns +1 if the
argument is greater than zero and returns zero if the argument is
zero. The following C++ statement implements this function:
if (x < 0)
sign = -1;
else
if (x == 0)
sign = 0;
else
sign = 1;
This is an if-else statement in which the statement following the
else is itself an if-else statement. If x is less than
zero then sign is set to -1, however if it is not less than
zero the statement following the else is executed. In that
case if x is equal to zero then sign is set to zero and
otherwise it is set to 1.
Novice programmers often use a sequence of if statements rather
than use a nested if-else statement. That is they write the
above in the logically equivalent form:
if (x < 0) sign = -1; if (x == 0) sign = 0; if (x > 0) sign = 1;
This version is not recommended since it does not make it clear that
only one of the assignment statements will be executed for a given
value of x. Also it is inefficient since all three conditions
are always tested.
If nesting is carried out to too deep a level and indenting is not
consistent then deeply nested if or if-else statements
can be confusing to read and interpret. It is important to note that
an else always belongs to the closest if without an
else.
When writing nested if-else statements to choose between
several alternatives use some consistent layout such as the following:
if (condition1)
statement1;
else if (condition2)
statement2;
. . .
else if (condition-n)
statement-n;
else
statement-e;
Assume that a real variable x is known to be greater than or
equal to zero and less than one. The following multiple choice
decision increments
count1 if 0
x
0.25, increments count2 if
0.25
x
0.5, increments count3 if
0.5
x
0.75 and increments count4 if
0.75
x
1.
if (x < 0.25) count1++; else if (x < 0.5) count2++; else if (x < 0.75) count3++; else count4++;
Note how the ordering of the tests here has allowed the simplification
of the conditions. For example when checking that x lies
between 0.25 and 0.50 the test x < 0.50 is only carried out if
the test x < 0.25 has already failed hence x is greater
than 0.25. This shows that if x is less than 0.50 then
x must be between 0.25 and 0.5.
Compare the above with the following clumsy version using more complex conditions:
if (x < 0.25) count1++; else if (x >= 0.25 && x < 0.5) count2++; else if (x >= 0.5 && x < 0.75) count3++; else count4++;