factor. while (n % 2 == 0 && n /= 2) ; Here the loop condition provides all the necessary computation,
so there is no real need for a body. The loop condition not only tests that n is even, it also divides n by
two and ensures that the loop will terminate should n be zero. ¨ The do Statement The do statement
(also called do loop) is similar to the while statement, except that its body is executed first and then the
loop condition is examined. The general form of the do statement is: do statement; while (expression);
First statement is executed and then expression is evaluated. If the outcome of the latter is nonzero
then the whole process is repeated. Otherwise, the loop is terminated. The do loop is less frequently
used than the while loop. It is useful for situations where we need the loop body to be executed at least
once, regardless of the loop condition. For example, suppose we wish to repeatedly read a value and
print its square, and stop when the value is zero. This can be expressed as the following loop: do { cin
>> n; cout << n * n << '\n'; } while (n != 0); Unlike the while loop, the do loop is never used in situations
where it would have a null body. Although a do loop with a null body would be equivalent to a similar
while loop, the latter is always preferred for its superior readability. ¨ The for Statement The for
statement (also called for loop) is similar to the while statement, but has two additional components: an
expression which is evaluated only once before everything else, and an expression which is evaluated
once at the end of each iteration. The general form of the for statement is: for (expression1;
expression2; expression3) statement; First expression1 is evaluated. Each time round the loop,
expression2 is evaluated. If the outcome is nonzero then statement is executed and expression3 is
evaluated. Otherwise, the loop is terminated. The general for loop is equivalent to the following while
loop: expression1; while (expression2) { statement; expression3; } The most common use of for loops
is for situations where a variable is incremented or decremented with every iteration of the loop. The
following for loop, for example, calculates the sum of all integers from 1 to n. sum = 0; for (i = 1; i <= n;
++i) sum += i; This is preferred to the while-loop version we saw earlier. In this example, i is usually
called the loop variable. C++ allows the first expression in a for loop to be a variable definition. In the
above loop, for example, i can be defined inside the loop itself: for (int i = 1; i <= n; ++i) sum += i;
Contrary to what may appear, the scope for i is not the body of the loop, but the loop itself. Scope-wise,
the above is equivalent to: int i; for (i = 1; i <= n; ++i) sum += i; Any of the three expressions in a for loop
may be empty. For example, removing the first and the third expression gives us something identical to
a while loop: for (; i != 0;) // is equivalent to: while (i != 0) something; // something; Removing all the
expressions gives us an infinite loop. This loop's condition is assumed to be always true: for (;;) //
infinite loop something; For loops with multiple loop variables are not unusual. In such cases, the
comma operator is used to separate their expressions: for (i = 0, j = 0; i + j < n; ++i, ++j) something;
Because loops are statements, they can appear inside other loops. In other words, loops can be
nested. For example, for (int i = 1; i <= 3; ++i) for (int j = 1; j <= 3; ++j) cout << '(' << i << ',' << j << ")\n";
produces the product of the set {1,2,3} with itself, giving the output: (1,1) (1,2) (1,3) (2,1) (2,2) (2,3)
(3,1) (3,2) (3,3) ¨ The continue Statement The continue statement terminates the current iteration of a
loop and instead jumps to the next iteration. It applies to the loop immediately enclosing the continue
statement. It is an error to use the continue statement outside a loop. In while and do loops, the next
iteration commences from the loop condition. In a for loop, the next iteration commences from the
loop’s third expression. For example, a loop which repeatedly reads in a number, processes it but
ignores negative numbers, and terminates when the number is zero, may be expressed as: do { cin >>
num; if (num < 0) continue; // process num here... } while (num != 0); This is equivalent to: do { cin >>
num; if (num >= 0) { // process num here... } } while (num != 0); A variant of this loop which reads in a
number exactly n times (rather than until the number is zero) may be expressed as: for (i = 0; i < n; ++i)
{ cin >> num; if (num < 0) continue; // causes a jump to: ++i // process num here... } When the continue
statement appears inside nested loops, it applies to the loop immediately enclosing it, and not to the
outer loops. For example, in the following set of nested loops, the continue applies to the for loop, and
not the while loop: while (more) { for (i = 0; i < n; ++i) { cin >> num; if (num < 0) continue; // causes a
jump to: ++i // process num here... } //etc... } ¨ The break Statement A break statement may appear
inside a loop (while, do, or for) or a switch statement. It causes a jump out of these constructs, and