additional control structures

50
1 Additional Control Structures

Upload: mariko-phillips

Post on 01-Jan-2016

40 views

Category:

Documents


4 download

DESCRIPTION

Additional Control Structures. 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. Switch Statement. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Additional Control Structures

1

Additional Control Structures

Page 2: 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

Page 3: Additional Control Structures

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 : // optionalStatement n; // optional

}

Page 4: Additional Control Structures

4

float weightInPounds = 165.8 ;char weightUnit ;

. . . // user enters letter for desired weightUnitswitch ( 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 ;

}

Page 5: Additional Control Structures

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

Page 6: Additional Control Structures

6

Switch(letter)

{case ‘X’ : Statement1;

break;

case ‘L’ :

case ‘M’: Statement2;

break;

case ‘S’ : Statement3;

break;

default : Statement4;

}

Statement5;

Page 7: Additional Control Structures

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.

Page 8: Additional Control Structures

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

Page 9: Additional Control Structures

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.”

}

Page 10: Additional Control Structures

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.

Page 11: Additional Control Structures

11

Do-While StatementIs 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.

Page 12: Additional Control Structures

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

Page 13: Additional Control Structures

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.

Page 14: Additional Control Structures

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);

Page 15: Additional Control Structures

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.)

Page 16: Additional Control Structures

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

Page 17: Additional Control Structures

17

A Count-Controlled Loop

SYNTAX

for ( initialization ; test expression ; update ) {

0 or more statements to repeat

}

Page 18: Additional Control Structures

18

The for loop contains

an initialization

an expression to test for continuing

an update to execute after each

iteration of the body

Page 19: Additional Control Structures

19

Example of Repetition

int num;

for ( num = 1 ; num <= 3 ; num++ )

{

cout << num << “Potato” << endl;

}

Page 20: Additional Control Structures

20

Example of Repetition num

int num;

for ( num = 1 ; num <= 3 ; num++ )

cout << num << “Potato” << endl;

OUTPUT

?

Page 21: Additional Control Structures

21

Example of Repetition num

OUTPUT

1

int num;

for ( num = 1 ; num <= 3 ; num++ )

cout << num << “Potato” << endl;

Page 22: Additional Control Structures

22

Example of Repetition num

OUTPUT

1

int num;

for ( num = 1 ; num <= 3 ; num++ )

cout << num << “Potato” << endl;

true

Page 23: Additional Control Structures

23

Example of Repetition num

int num;

for ( num = 1 ; num <= 3 ; num++ )

cout << num << “Potato” << endl;

OUTPUT

1

1Potato

Page 24: Additional Control Structures

24

Example of Repetition num

OUTPUT

2

int num;

for ( num = 1 ; num <= 3 ; num++ )

cout << num << “Potato” << endl;

1Potato

Page 25: Additional Control Structures

25

Example of Repetition num

OUTPUT

2

true

1Potato

int num;

for ( num = 1 ; num <= 3 ; num++ )

cout << num << “Potato” << endl;

Page 26: Additional Control Structures

26

Example of Repetition num

int num;

for ( num = 1 ; num <= 3 ; num++ )

cout << num << “Potato” << endl;

OUTPUT

2

1Potato

2Potato

Page 27: Additional Control Structures

27

Example of Repetition num

OUTPUT

3

int num;

for ( num = 1 ; num <= 3 ; num++ )

cout << num << “Potato” << endl;

1Potato

2Potato

Page 28: Additional Control Structures

28

Example of Repetition num

OUTPUT

3

true

1Potato

2Potato

int num;

for ( num = 1 ; num <= 3 ; num++ )

cout << num << “Potato” << endl;

Page 29: Additional Control Structures

29

Example of Repetition num

int num;

for ( num = 1 ; num <= 3 ; num++ )

cout << num << “Potato” << endl;

OUTPUT

3

1Potato

2Potato

3Potato

Page 30: Additional Control Structures

30

Example of Repetition num

OUTPUT

4

int num;

for ( num = 1 ; num <= 3 ; num++ )

cout << num << “Potato” << endl;

1Potato

2Potato

3Potato

Page 31: Additional Control Structures

31

Example of Repetition num

OUTPUT

4

false

1Potato

2Potato

3Potato

int num;

for ( num = 1 ; num <= 3 ; num++ )

cout << num << “Potato” << endl;

Page 32: Additional Control Structures

32

Example of Repetition num

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;

Page 33: Additional Control Structures

33

The output was:

1Potato2Potato3Potato

Page 34: Additional Control Structures

34

int count ;

for ( count = 4 ; count > 0 ; count-- )

{

cout << count << endl;

}

cout << “Done” << endl;

Count-controlled Loop

OUTPUT: 4321Done

Page 35: Additional Control Structures

35

What is output?

int count;

for ( count = 0 ; count < 10 ; count++ ){

cout << “”;}

Page 36: Additional Control Structures

36

OUTPUT

**********

NOTE: the 10 asterisks are all on one line. Why?

Page 37: Additional Control Structures

37

What output from this loop?

int count;

for (count = 0; count < 10; count++) ;

{

cout << “”;

}

Page 38: Additional Control Structures

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

Page 39: Additional Control Structures

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 ;

Page 40: Additional Control Structures

40

Nested For Loops

For( lastNum=1; lastNum<=7; lastNum++)

{

for(numToPrint=1; numToPrint<=lastNum; numToPrint++)

cout << numToPrint;

cout << endl;

}

Page 41: Additional Control Structures

41

Output

It prints the following triangle of numbers.

1

12

123

1234

12345

123456

1234567

Page 42: Additional Control Structures

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

Page 43: Additional Control Structures

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

Page 44: Additional Control Structures

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.”

Page 45: Additional Control Structures

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.

Page 46: Additional Control Structures

46

Imagine using . . .

a character, a length, and a width to draw a box, for example,

using the values ‘&’, 4, and 6 would display

&&&&&&

&&&&&&

&&&&&&

&&&&&&

Page 47: Additional Control Structures

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);

Page 48: Additional Control Structures

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;

}

Page 49: Additional Control Structures

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

Page 50: Additional Control Structures

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