1
Additional Control Structures
2
Chapter 9 Topics
Switch Statement for Multi-way Branching
Do-While Statement for Looping
For Statement for Looping
Using break and continue Statements
To be able to choose the most appropriate
looping statement for a given problem
3
Switch Statement
Is a selection control structure for multi-way branching.
SYNTAX
switch ( IntegralExpression )
{
case Constant1,
Statement 1; // optional
case Constant2,
Statement 2; // optional
.
.
.
default,// optional
Statement n; // optional
}
4
float weightInPounds = 165.8 ;
char weightUnit ;
.,,// user enters letter for desired weightUnit
switch ( weightUnit )
{
case?P?,
case?p?,
cout << weightInPounds <<,pounds,<< endl ;
break ;
case?O?,
case?o?,
cout << 16.0 * weightInPounds <<,ounces,<< endl ;
break ;
case?K?,
case?k?,
cout << weightInPounds / 2.2 <<,kilos,<< endl ;
break ;
case?G?,
case?g?,
cout << 454.0 * weightInPounds <<,grams,<< endl ;
break ;
default,
cout <<,That unit is not handled!,<< endl ;
break ;
}
5
Switch Statement
the value of IntegralExpression (of char,
short,int,long or enum type ) determines
which branch is executed
case labels are constant ( possibly named )
integral expressions,Several case labels
can precede a same statement
6
Switch(letter)
{case?X?,Statement1;
break;
case?L?,
case?M?,Statement2;
break;
case?S?,Statement3;
break;
default,Statement4;
}
Statement5;
7
In this example,
letter is the switch expression.
The statement means
If letter is?X?,execute Statement1 and continue with
Statement5.
If letter is?L? or?M?,execute Statement2 and
continue with Statement5.
If letter is?S?,execute Statement3 and continue with
Statement5.
If letter is none of the characters mentioned,
execute Statement4 and continue with Statement5.
The Break statement causes an immediate
exit from the Switch statement,
8
Control in Switch Statement
control branches to the statement following the case
label that matches the value of IntegralExpression,
Control proceeds through all remaining statements,
including the default,unless redirected with break
if no case label matches the value of
IntegralExpression,control branches to the default
label(if present)——otherwise control passes to the
statement following the entire switch statement
forgetting to use break can cause logical errors
9
Switch (grade) // Wrong Version
{
case?A?,
case?B?,cout <<“Good Work”;
case?C?,cout <<“Average Work”;
case?D?,
case?F?,cout <<“Poor Work”;
numberInTrouble++;
default,cout << grade <<“is not a valid letter grade.”
}
10
If grade is?A?,the resulting output is this:
Good WorkAverage WorkPoor WorkA is not a
valid letter grade.
Remember:
After a branch is taken to a specific case
label,control proceeds sequentially until
either a Break statement or the end of the
Switch statement occurs,
11
Do-While Statement
Is a looping control structure in which the loop
condition is tested at the end(bottom) of the
loop.
SYNTAX
do
{
Statement
} while ( Expression ) ;
Loop body statement can be a single statement or a block.
Note that the Do-While statement ends with a semicolon.
12
void GetYesOrNo ( /* out */ char& response )
// Inputs a character from the user
// Postcondition,response has been input
// && response == ‘y’ or ‘n’
{
do
{
cin >> response ; // skips leading whilespace
if ( ( response !=?y? ) && ( response !=?n? ) )
cout <<,Please type y or n,,;
} while ( ( response !=?y? ) && ( response !=?n? ) ) ;
}
Function Using Do-While
13
Do-While Loop vs,While Loop
POST-TEST loop
(exit-condition)
The looping condition
is tested after
executing the loop
body.
Loop body is always
executed at least
once.
PRE-TEST loop
(entry-condition)
The looping condition
is tested before
executing the loop
body.
Loop body may not
be executed at all.
14
Example
While Solution
sum=0;
counter=1;
while(counter<=n)
{
sum=sum+counter;
counter++;
}
Do-While Solution
sum=0;
counter=1;
do
{
sum=sum+counter;
counter++;
} while(counter<=n);
15
If n is a positive number,both of these versions
are equivalent.
But if n is 0 or negative,the two loops give
different results.
In the While version,the final value of sum is 0 because the
loop body is never entered.
In the Do-While version,the final value of sum is 1 because
the body executes once and then the loop test is made.
Example (Cont.)
16
Do-While Loop
When the expression is tested and found to be false,
the loop is exited and control passes to the
statement that follows the do-while statement.
Statement
Expression
DO
WHILE
FALSE
TRUE
17
A Count-Controlled Loop
SYNTAX
for ( initialization ; test expression ; update )
{
0 or more statements to repeat
}
18
The for loop contains
an initialization
an expression to test for continuing
an update to execute after each
iteration of the body
19
Example of Repetition
int num;
for ( num = 1 ; num <= 3 ; num++ )
{
cout << num <<,Potato” << endl;
}
20
Example of Repetitionnum
int num;
for ( num = 1 ; num <= 3 ; num++ )
cout << num <<,Potato” << endl;
OUTPUT
21
Example of Repetitionnum
OUTPUT
1
int num;
for ( num = 1 ; num <= 3 ; num++ )
cout << num <<,Potato” << endl;
22
Example of Repetitionnum
OUTPUT
1
int num;
for ( num = 1 ; num <= 3 ; num++ )
cout << num <<,Potato” << endl;
true
23
Example of Repetitionnum
int num;
for ( num = 1 ; num <= 3 ; num++ )
cout << num <<,Potato” << endl;
OUTPUT
1
1Potato
24
Example of Repetitionnum
OUTPUT
2
int num;
for ( num = 1 ; num <= 3 ; num++ )
cout << num <<,Potato” << endl;
1Potato
25
Example of Repetitionnum
OUTPUT
2
true
1Potato
int num;
for ( num = 1 ; num <= 3 ; num++ )
cout << num <<,Potato” << endl;
26
Example of Repetitionnum
int num;
for ( num = 1 ; num <= 3 ; num++ )
cout << num <<,Potato” << endl;
OUTPUT
2
1Potato
2Potato
27
Example of Repetitionnum
OUTPUT
3
int num;
for ( num = 1 ; num <= 3 ; num++ )
cout << num <<,Potato” << endl;
1Potato
2Potato
28
Example of Repetitionnum
OUTPUT
3
true
1Potato
2Potato
int num;
for ( num = 1 ; num <= 3 ; num++ )
cout << num <<,Potato” << endl;
29
Example of Repetitionnum
int num;
for ( num = 1 ; num <= 3 ; num++ )
cout << num <<,Potato” << endl;
OUTPUT
3
1Potato
2Potato
3Potato
30
Example of Repetitionnum
OUTPUT
4
int num;
for ( num = 1 ; num <= 3 ; num++ )
cout << num <<,Potato” << endl;
1Potato
2Potato
3Potato
31
Example of Repetitionnum
OUTPUT
4
false
1Potato
2Potato
3Potato
int num;
for ( num = 1 ; num <= 3 ; num++ )
cout << num <<,Potato” << endl;
32
Example of Repetitionnum
When the loop control condition is evaluated
and has value false,the loop is said to be
“satisfied” and control passes to the
statement following the For statement.
4
falseint num;
for ( num = 1 ; num <= 3 ; num++ )
cout << num <<,Potato” << endl;
33
The output was:
1Potato
2Potato
3Potato
34
int count ;
for ( count = 4 ; count > 0 ; count-- )
{
cout << count << endl;
}
cout <<,Done” << endl;
Count-controlled Loop
OUTPUT,4
3
2
1
Done
35
What is output?
int count;
for ( count = 0 ; count < 10 ; count++ )
{
cout <<,*” ;
}
36
OUTPUT
**********
NOTE,the 10 asterisks are all on one line,Why?
37
What output from this loop?
int count;
for (count = 0; count < 10; count++) ;
{
cout <<,*” ;
}
38
no output from the for loop! Why?
the ; right after the ( ) means that the body
statement is a null statement
in general,the Body of the for loop is whatever
statement immediately follows the ( )
that statement can be a single statement,a
block,or a null statement
actually,the code outputs one * after the loop
completes its counting to 10
OUTPUT
39
Several Statements in Body Block
const int MONTHS = 12 ;
int count ;
float bill ;
float sum = 0.0 ;
for (count = 1; count <= MONTHS; count++ )
{
cout <<,Enter bill:,;
cin >> bill ;
sum = sum + bill ;
}
cout <<,Your total bill is,,<< sum << endl ;
40
Nested For Loops
for( lastNum=1; lastNum<=7; lastNum++)
{
for(numToPrint=1; numToPrint<=lastNum; numToPrint++)
cout << numToPrint;
cout << endl;
}
41
Output
It prints the following triangle of numbers.
1
12
123
1234
12345
123456
1234567
42
Break Statement
break statement can be used with
Switch or any of the 3 looping
structures
it causes an immediate exit from the
Switch,While,Do-While,or For
statement in which it appears
if the break is inside nested structures,
control exits only the innermost
structure containing it
43
Continue Statement
is valid only within loops
terminates the current loop iteration,but
not the entire loop
in a For or While,continue causes the rest
of the body statement to be skipped--in a
For statement,the update is done
in a Do-While,the exit condition is tested,
and if true,the next loop iteration is begun
44
Be sure to note
the difference between continue and break.
The Continue statement means,Abandon the current
iteration of the loop,and go on to the next iteration.”
The Break statement means,Exit the entire loop
immediately.”
45
Guidelines for Choosing a Looping Statement
If the loop is a simple count-controlled loop,the For statement
is natural.
If the loop is an event-controlled loop whose body should
execute at least once,a Do-While statement is appropriate.
If the loop is an event-controlled loop and nothing is
known about the first execution,use a While statement.
When in doubt,use a While statement.
Using Break statement and Continue statement only after
careful consideration.
46
Imagine using,,,
a character,a length,and a width to draw a
box,for example,
using the values?&?,4,and 6 would display
&&&&&&
&&&&&&
&&&&&&
&&&&&&
47
Write prototype for void function
called DrawBox ( ) with 3 parameters,
The first is type char,the other 2 are type int.
void DrawBox( char,int,int );
NOTE,Some C++ books include identifiers in
prototypes,Any valid C++ identifiers,as long as
each is different,can be used.
void DrawBox( char letter,int num1,int num2);
48
void DrawBox(char what,int down,int across)
// 3 function parameters
{
int row,col; // 2 local variables
for ( row = 0; row < down; row++ )
{
for (col = 0; col < across; col++ )
{
cout << what;
}
cout << endl;
}
return;
}
49
#include <iostream>
void DrawBox (char,int,int); // prototype
int main ( )
{
char letter = ‘&’;
DrawBox(letter,4,2*3); // arguments
DrawBox(‘V’,9,3); // appear in call
return 0;
}
THE DRIVER PROGRAM
50
Write a function using prototype
void DisplayTable ( int ) ; // prototype
The function displays a specified multiplication
table,For example,the call DisplayTable(6)
displays this table:
1 x 6 = 6
2 x 6 = 12
3 x 6 = 18
.
.
.
12 x 6 = 72
Additional Control Structures
2
Chapter 9 Topics
Switch Statement for Multi-way Branching
Do-While Statement for Looping
For Statement for Looping
Using break and continue Statements
To be able to choose the most appropriate
looping statement for a given problem
3
Switch Statement
Is a selection control structure for multi-way branching.
SYNTAX
switch ( IntegralExpression )
{
case Constant1,
Statement 1; // optional
case Constant2,
Statement 2; // optional
.
.
.
default,// optional
Statement n; // optional
}
4
float weightInPounds = 165.8 ;
char weightUnit ;
.,,// user enters letter for desired weightUnit
switch ( weightUnit )
{
case?P?,
case?p?,
cout << weightInPounds <<,pounds,<< endl ;
break ;
case?O?,
case?o?,
cout << 16.0 * weightInPounds <<,ounces,<< endl ;
break ;
case?K?,
case?k?,
cout << weightInPounds / 2.2 <<,kilos,<< endl ;
break ;
case?G?,
case?g?,
cout << 454.0 * weightInPounds <<,grams,<< endl ;
break ;
default,
cout <<,That unit is not handled!,<< endl ;
break ;
}
5
Switch Statement
the value of IntegralExpression (of char,
short,int,long or enum type ) determines
which branch is executed
case labels are constant ( possibly named )
integral expressions,Several case labels
can precede a same statement
6
Switch(letter)
{case?X?,Statement1;
break;
case?L?,
case?M?,Statement2;
break;
case?S?,Statement3;
break;
default,Statement4;
}
Statement5;
7
In this example,
letter is the switch expression.
The statement means
If letter is?X?,execute Statement1 and continue with
Statement5.
If letter is?L? or?M?,execute Statement2 and
continue with Statement5.
If letter is?S?,execute Statement3 and continue with
Statement5.
If letter is none of the characters mentioned,
execute Statement4 and continue with Statement5.
The Break statement causes an immediate
exit from the Switch statement,
8
Control in Switch Statement
control branches to the statement following the case
label that matches the value of IntegralExpression,
Control proceeds through all remaining statements,
including the default,unless redirected with break
if no case label matches the value of
IntegralExpression,control branches to the default
label(if present)——otherwise control passes to the
statement following the entire switch statement
forgetting to use break can cause logical errors
9
Switch (grade) // Wrong Version
{
case?A?,
case?B?,cout <<“Good Work”;
case?C?,cout <<“Average Work”;
case?D?,
case?F?,cout <<“Poor Work”;
numberInTrouble++;
default,cout << grade <<“is not a valid letter grade.”
}
10
If grade is?A?,the resulting output is this:
Good WorkAverage WorkPoor WorkA is not a
valid letter grade.
Remember:
After a branch is taken to a specific case
label,control proceeds sequentially until
either a Break statement or the end of the
Switch statement occurs,
11
Do-While Statement
Is a looping control structure in which the loop
condition is tested at the end(bottom) of the
loop.
SYNTAX
do
{
Statement
} while ( Expression ) ;
Loop body statement can be a single statement or a block.
Note that the Do-While statement ends with a semicolon.
12
void GetYesOrNo ( /* out */ char& response )
// Inputs a character from the user
// Postcondition,response has been input
// && response == ‘y’ or ‘n’
{
do
{
cin >> response ; // skips leading whilespace
if ( ( response !=?y? ) && ( response !=?n? ) )
cout <<,Please type y or n,,;
} while ( ( response !=?y? ) && ( response !=?n? ) ) ;
}
Function Using Do-While
13
Do-While Loop vs,While Loop
POST-TEST loop
(exit-condition)
The looping condition
is tested after
executing the loop
body.
Loop body is always
executed at least
once.
PRE-TEST loop
(entry-condition)
The looping condition
is tested before
executing the loop
body.
Loop body may not
be executed at all.
14
Example
While Solution
sum=0;
counter=1;
while(counter<=n)
{
sum=sum+counter;
counter++;
}
Do-While Solution
sum=0;
counter=1;
do
{
sum=sum+counter;
counter++;
} while(counter<=n);
15
If n is a positive number,both of these versions
are equivalent.
But if n is 0 or negative,the two loops give
different results.
In the While version,the final value of sum is 0 because the
loop body is never entered.
In the Do-While version,the final value of sum is 1 because
the body executes once and then the loop test is made.
Example (Cont.)
16
Do-While Loop
When the expression is tested and found to be false,
the loop is exited and control passes to the
statement that follows the do-while statement.
Statement
Expression
DO
WHILE
FALSE
TRUE
17
A Count-Controlled Loop
SYNTAX
for ( initialization ; test expression ; update )
{
0 or more statements to repeat
}
18
The for loop contains
an initialization
an expression to test for continuing
an update to execute after each
iteration of the body
19
Example of Repetition
int num;
for ( num = 1 ; num <= 3 ; num++ )
{
cout << num <<,Potato” << endl;
}
20
Example of Repetitionnum
int num;
for ( num = 1 ; num <= 3 ; num++ )
cout << num <<,Potato” << endl;
OUTPUT
21
Example of Repetitionnum
OUTPUT
1
int num;
for ( num = 1 ; num <= 3 ; num++ )
cout << num <<,Potato” << endl;
22
Example of Repetitionnum
OUTPUT
1
int num;
for ( num = 1 ; num <= 3 ; num++ )
cout << num <<,Potato” << endl;
true
23
Example of Repetitionnum
int num;
for ( num = 1 ; num <= 3 ; num++ )
cout << num <<,Potato” << endl;
OUTPUT
1
1Potato
24
Example of Repetitionnum
OUTPUT
2
int num;
for ( num = 1 ; num <= 3 ; num++ )
cout << num <<,Potato” << endl;
1Potato
25
Example of Repetitionnum
OUTPUT
2
true
1Potato
int num;
for ( num = 1 ; num <= 3 ; num++ )
cout << num <<,Potato” << endl;
26
Example of Repetitionnum
int num;
for ( num = 1 ; num <= 3 ; num++ )
cout << num <<,Potato” << endl;
OUTPUT
2
1Potato
2Potato
27
Example of Repetitionnum
OUTPUT
3
int num;
for ( num = 1 ; num <= 3 ; num++ )
cout << num <<,Potato” << endl;
1Potato
2Potato
28
Example of Repetitionnum
OUTPUT
3
true
1Potato
2Potato
int num;
for ( num = 1 ; num <= 3 ; num++ )
cout << num <<,Potato” << endl;
29
Example of Repetitionnum
int num;
for ( num = 1 ; num <= 3 ; num++ )
cout << num <<,Potato” << endl;
OUTPUT
3
1Potato
2Potato
3Potato
30
Example of Repetitionnum
OUTPUT
4
int num;
for ( num = 1 ; num <= 3 ; num++ )
cout << num <<,Potato” << endl;
1Potato
2Potato
3Potato
31
Example of Repetitionnum
OUTPUT
4
false
1Potato
2Potato
3Potato
int num;
for ( num = 1 ; num <= 3 ; num++ )
cout << num <<,Potato” << endl;
32
Example of Repetitionnum
When the loop control condition is evaluated
and has value false,the loop is said to be
“satisfied” and control passes to the
statement following the For statement.
4
falseint num;
for ( num = 1 ; num <= 3 ; num++ )
cout << num <<,Potato” << endl;
33
The output was:
1Potato
2Potato
3Potato
34
int count ;
for ( count = 4 ; count > 0 ; count-- )
{
cout << count << endl;
}
cout <<,Done” << endl;
Count-controlled Loop
OUTPUT,4
3
2
1
Done
35
What is output?
int count;
for ( count = 0 ; count < 10 ; count++ )
{
cout <<,*” ;
}
36
OUTPUT
**********
NOTE,the 10 asterisks are all on one line,Why?
37
What output from this loop?
int count;
for (count = 0; count < 10; count++) ;
{
cout <<,*” ;
}
38
no output from the for loop! Why?
the ; right after the ( ) means that the body
statement is a null statement
in general,the Body of the for loop is whatever
statement immediately follows the ( )
that statement can be a single statement,a
block,or a null statement
actually,the code outputs one * after the loop
completes its counting to 10
OUTPUT
39
Several Statements in Body Block
const int MONTHS = 12 ;
int count ;
float bill ;
float sum = 0.0 ;
for (count = 1; count <= MONTHS; count++ )
{
cout <<,Enter bill:,;
cin >> bill ;
sum = sum + bill ;
}
cout <<,Your total bill is,,<< sum << endl ;
40
Nested For Loops
for( lastNum=1; lastNum<=7; lastNum++)
{
for(numToPrint=1; numToPrint<=lastNum; numToPrint++)
cout << numToPrint;
cout << endl;
}
41
Output
It prints the following triangle of numbers.
1
12
123
1234
12345
123456
1234567
42
Break Statement
break statement can be used with
Switch or any of the 3 looping
structures
it causes an immediate exit from the
Switch,While,Do-While,or For
statement in which it appears
if the break is inside nested structures,
control exits only the innermost
structure containing it
43
Continue Statement
is valid only within loops
terminates the current loop iteration,but
not the entire loop
in a For or While,continue causes the rest
of the body statement to be skipped--in a
For statement,the update is done
in a Do-While,the exit condition is tested,
and if true,the next loop iteration is begun
44
Be sure to note
the difference between continue and break.
The Continue statement means,Abandon the current
iteration of the loop,and go on to the next iteration.”
The Break statement means,Exit the entire loop
immediately.”
45
Guidelines for Choosing a Looping Statement
If the loop is a simple count-controlled loop,the For statement
is natural.
If the loop is an event-controlled loop whose body should
execute at least once,a Do-While statement is appropriate.
If the loop is an event-controlled loop and nothing is
known about the first execution,use a While statement.
When in doubt,use a While statement.
Using Break statement and Continue statement only after
careful consideration.
46
Imagine using,,,
a character,a length,and a width to draw a
box,for example,
using the values?&?,4,and 6 would display
&&&&&&
&&&&&&
&&&&&&
&&&&&&
47
Write prototype for void function
called DrawBox ( ) with 3 parameters,
The first is type char,the other 2 are type int.
void DrawBox( char,int,int );
NOTE,Some C++ books include identifiers in
prototypes,Any valid C++ identifiers,as long as
each is different,can be used.
void DrawBox( char letter,int num1,int num2);
48
void DrawBox(char what,int down,int across)
// 3 function parameters
{
int row,col; // 2 local variables
for ( row = 0; row < down; row++ )
{
for (col = 0; col < across; col++ )
{
cout << what;
}
cout << endl;
}
return;
}
49
#include <iostream>
void DrawBox (char,int,int); // prototype
int main ( )
{
char letter = ‘&’;
DrawBox(letter,4,2*3); // arguments
DrawBox(‘V’,9,3); // appear in call
return 0;
}
THE DRIVER PROGRAM
50
Write a function using prototype
void DisplayTable ( int ) ; // prototype
The function displays a specified multiplication
table,For example,the call DisplayTable(6)
displays this table:
1 x 6 = 6
2 x 6 = 12
3 x 6 = 18
.
.
.
12 x 6 = 72