Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 Chapter 9 Additional Control Structures Dale/Weems/Headington.

Similar presentations


Presentation on theme: "1 Chapter 9 Additional Control Structures Dale/Weems/Headington."— Presentation transcript:

1

2 1 Chapter 9 Additional Control Structures Dale/Weems/Headington

3 2 Chapter 9 Topics l Switch Statement for Multi-way Branching l Do-While Statement for Looping l For Statement for Looping Using break and continue Statements

4 3 switch Statement

5 4 Switch Statement Is a selection control structure for multi-way branching. SYNTAX switch ( IntegralExpression ) { case Constant1 : Statement(s); // optional case Constant2 : Statement(s); // optional. default :// optional Statement(s); // optional }

6 5 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 ; }

7 Case Label l an integral expression l operands must be literal or named constants l value is compared to switch expression l case 'X' :

8 switch Observations break is required after statement(s) (if omitted all following statements execute) l { } not required around multiple statements l default clause is a GPP break after last statement is optional –See switch.cpp

9 8 do-while Statement

10 9 Do-While Statement Is a looping control structure in which the loop condition is tested after each iteration of the loop. SYNTAX do { Statement } while ( Expression ) ; Loop body statement can be a single statement or a block.

11 10 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 whitespace if ( ( response != ‘y’ ) && ( response != ‘n’ ) ) cout << “Please type y or n : “ ; } while ( ( response != ‘y’ ) && ( response != ‘n’ ) ) ; } Function Using Do-While

12 11 Do-While Loop vs. While Loop l POST-TEST loop (exit-condition) l The looping condition is tested after executing the loop body. l Loop body is always executed at least once. l PRE-TEST loop (entry-condition) l The looping condition is tested before executing the loop body. l Loop body may not be executed at all.

13 12 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

14 while v. do-while Sentinel // skip to period datafile >> inputChar; while (inputChar != '.') datafile >> inputChar; // skip to period7 do datafile >> inputChar; while (inputChar != '.') l No priming read needed in this case l (Still needed in many cases)

15 while v. do-while Sentinel cout << "Enter your age: "; cin >> age; while (age <= 0) { cout << "Your age must be " << "positive." <<endl; cout << "Enter your age: "; cin >> age; } Requires 2 tests ==> do { cout << "Enter your age: "; cin >> age; if (age <=0) { cout << "Your age must" << " be positive." << endl; } } while (age <= 0)

16 while v. do-while CCL sum = 0; counter = 1; while (counter <= n) { sum = sum + counter; counter++; } l Pretest Loop sum = 0; counter = 1; do { sum = sum + counter; counter++; } while (counter <= n) // Note Sum=1 if n=0 l Posttest Loop l Loop always executes at least once

17 16 for Statement

18 17 A Count-Controlled Loop SYNTAX for ( initialization ; test expression ; update ) { 0 or more statements to repeat }

19 18 The for loop contains an initialization an expression to test for continuing an update to execute after each iteration of the body

20 19 Example of Repetition for ( int num = 1 ; num <= 3 ; num++ ) { cout << num << “Potato” << endl; }

21 20 Example of Repetition num int num; for ( num = 1 ; num <= 3 ; num++ ) cout << num << “Potato” << endl; OUTPUT ?

22 21 Example of Repetition num OUTPUT 1 int num; for ( num = 1 ; num <= 3 ; num++ ) cout << num << “Potato” << endl;

23 22 Example of Repetition num OUTPUT 1 int num; for ( num = 1 ; num <= 3 ; num++ ) cout << num << “Potato” << endl; true

24 23 Example of Repetition num int num; for ( num = 1 ; num <= 3 ; num++ ) cout << num << “Potato” << endl; OUTPUT 1 1Potato

25 24 Example of Repetition num OUTPUT 2 int num; for ( num = 1 ; num <= 3 ; num++ ) cout << num << “Potato” << endl; 1Potato

26 25 Example of Repetition num OUTPUT 2 true 1Potato int num; for ( num = 1 ; num <= 3 ; num++ ) cout << num << “Potato” << endl;

27 26 Example of Repetition num int num; for ( num = 1 ; num <= 3 ; num++ ) cout << num << “Potato” << endl; OUTPUT 2 1Potato 2Potato

28 27 Example of Repetition num OUTPUT 3 int num; for ( num = 1 ; num <= 3 ; num++ ) cout << num << “Potato” << endl; 1Potato 2Potato

29 28 Example of Repetition num OUTPUT 3 true 1Potato 2Potato int num; for ( num = 1 ; num <= 3 ; num++ ) cout << num << “Potato” << endl;

30 29 Example of Repetition num int num; for ( num = 1 ; num <= 3 ; num++ ) cout << num << “Potato” << endl; OUTPUT 3 1Potato 2Potato 3Potato

31 30 Example of Repetition num OUTPUT 4 int num; for ( num = 1 ; num <= 3 ; num++ ) cout << num << “Potato” << endl; 1Potato 2Potato 3Potato

32 31 Example of Repetition num OUTPUT 4 false 1Potato 2Potato 3Potato int num; for ( num = 1 ; num <= 3 ; num++ ) cout << num << “Potato” << endl;

33 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 false int num; for ( num = 1 ; num <= 3 ; num++ ) cout << num << “Potato” << endl;

34 33 The output was: 1Potato 2Potato 3Potato

35 34 for (int count = 4 ; count > 0 ; count -- ) { cout << count << endl; } cout << “Done” << endl; Count-controlled Loop OUTPUT: 4 3 2 1 Done

36 35 What is output? for ( int count = 0 ; count < 10 ; count++ ) { cout << “  ”  ; }

37 36 OUTPUT ********** NOTE: the 10 asterisks are all on one line. Why?

38 Count Control Loop Example Display integers and their squares from 1 through 10. for (int i = 1; i <= 10; i++) cout << i << " " << i * i << endl;

39 For example Display even integers and their squares from 1 through 10. for (int i = 2; i <= 10; i = i+2) cout << i << " " << i * i << endl;

40 For example Display integers and their squares from 10 down to 1. for (int i = 10; i >= 1; i--) cout << i << “ “ << i * i << endl;

41 For example Find square roots of 1.1, 1.2, 1.3,..., 2.0 for (double x = 1.1; x <= 2.0; x =x+0.1) cout << x << " " << sqrt(x) << endl;

42 Compute and return n! = 1  2  3 ...  n. int product = 1; for (int i = 2; i <= n; i++) product = product * i; For example

43 42 What output from this loop? for (int count = 0; count < 10; count++) ; { cout << “  ”  ; }

44 43 l no output from the for loop! Why? l the ; right after the ( ) means that the body statement is a null statement l in general, the Body of the for loop is whatever statement immediately follows the ( ) l 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

45 Display all divisors of each integer from 1 through 50 for (int num = 1; num <= 50; num++) { cout << num << " has divisors:\n\t''; for (int div = 1; div <= num/2; div++) if (num % div == 0) cout << div << ", ''; cout << num << endl; }// See divisors.cpp

46 Table of 2 n const int tableSize = 20; long valueSquared = 1; cout << "n" << " " << "2**n" << endl; for (int n = 0; n <= tableSize; ++n) { cout << n << " " << valueSquared << endl; valueSquared = valueSquared * 2; }

47 46 Several Statements in Body Block const int MONTHS = 12 ; float bill ; float sum = 0.0 ; for (int count = 1; count <= MONTHS; count++ ) { cout << “Enter bill: “ ; cin >> bill ; sum = sum + bill ; } cout << “Your total bill is : “ << sum << endl ;

48 Converting while to for Any while loop may be written as a for l Note InitStmt and PostExpr are optional while (inputVal != 999) cin >> inputVal; for ( ; inputVal != 999; ) cin >> inputVal;

49 Eliminating WhileExpression l The while condition is also optional l If omitted the value defaults to true for ( ; ; ) cout << “Hi” << endl; while (1) cout << “Hi” << endl;

50 For Flexibility cin >> ch; while (ch != ‘.’) cin >> ch; for (cin >> ch; ch != ‘.’; cin >> ch) ; l Warning! Keep it simple. l The trickier the code, the harder to follow.

51 n Changing the values of any variables n involved in the loop condition n inside the body of the loop n may change the number of repetitions n & may result in an infinite loop for (i = 1; i <= 10; i++) { cout << i << endl; i++; } Monkeying with LCVs: PPP

52 51 Break Statement l break statement can be used with Switch or any of the 3 looping structures l it causes an immediate exit from the Switch, While, Do-While, or For statement in which it appears l if the break is inside nested structures, control exits only the innermost structure containing it

53 Forever Loop loopCount = 1; while (1)// OR for ( ; ; ) { cin >> num1; if (!cin || num1 >= 100) break; cin >> num2; if (!cin || num2 >= 100) break; cout << sqrt(float(num1 + num2)) << endl; loopCount++; if (loopCount > 10) break; }

54 Use break As a Last Resort l It can become a crutch l Think carefully about loop design for loop on right is better i = 1; while (1)for (i = 1; i <= 5; i++) { cout << i; cout << i; if (i == 5) break; i++; }

55 54 Continue Statement continue is valid only within loops l terminates the current loop iteration, but not the entire loop l in a For or While, continue causes the rest of the body statement to be skipped--in a For statement, the update is done l in a Do-While, the exit condition is tested, and if true, the next loop iteration is begun

56 55 Imagine using... l a character, a length, and a width to draw a box, for example, l using the values ‘&’, 4, and 6 would display &&&&&&

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

58 57 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; }

59 58 #include 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

60 59 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


Download ppt "1 Chapter 9 Additional Control Structures Dale/Weems/Headington."

Similar presentations


Ads by Google