Chapter 5. Looping

Download Report

Transcript Chapter 5. Looping

Chapter 5. Looping

1

Starting Out with C++, 3 rd Edition

5.1 The Increment and Decrement Operators

• ++ and -- are operators that add and subtract one from their operands.

num = num + 1; num += 1; num++; 2

Starting Out with C++, 3 rd Edition

Program 5-1

// This program demonstrates the increment and decrement // operators.

#include void main(void) { int bigVal = 10, smallVal = 1; cout << "bigVal is " << bigVal << " and smallVal is " << smallVal << endl; smallVal++; bigVal--;

Program continues…

3

Starting Out with C++, 3 rd Edition

Program continued from previous slide.

} cout << "bigVal is " << bigVal << " and smallVal is " << smallVal << endl; ++smallVal; --bigVal; cout << "bigVal is " << bigVal << " and smallVal is " << smallVal << endl; 4

Starting Out with C++, 3 rd Edition

Program Output

bigVal is 10 and smallVal is 1 bigVal is 9 and smallVal is 2 bigVal is 8 and smallVal is 3 5

Starting Out with C++, 3 rd Edition

Program 5-2

//This program demonstrates the prefix and postfix modes of the // increment and decrement operators.

#include void main(void) { int bigVal = 10, smallVal = 1; cout << "bigVal starts as " << bigVal; cout << " and smallVal starts as " << smallVal << endl; cout << "bigVal--: " << bigVal-- << endl; cout << "smallVal++: " << smallVal++ << endl; cout << "Now bigVal is: " << bigVal << endl; cout << "Now smallVal is: " << smallVal << endl; cout << "--bigVal: " << --bigVal << endl; cout << "++smallVal: " << ++smallVal << endl; } 6

Starting Out with C++, 3 rd Edition

Program Output

bigVal starts as 10 and smallVal starts as 1 bigVal--: 10 smallVal++: 1 Now bigVal is: 9 Now smallVal is: 2 --bigVal: 8 ++smallVal: 3 7

Starting Out with C++, 3 rd Edition

Using ++ and -- in Mathematical Expressions

a = 2; b = 5; c = a * b++; cout << a << “ “ << b << “ “ << c; Results: 2 6 10 8

Starting Out with C++, 3 rd Edition

Using ++ and -- in Relational Expressions

• x = 10; if ( x++ > 10) cout << “x is greater than 10.\n”; Two operations are happening: • • the value in x is tested to determine if it is greater than 10 then x is incremented 9

Starting Out with C++, 3 rd Edition

5.2 Introduction to Loops - The while Loop

• •

A loop is part of a program that repeats.

A while loop is a “pre test” loop - the expression is tested before the loop is executed while (expression) statement;

10

Starting Out with C++, 3 rd Edition

Program 5-3

// This program demonstrates a simple while loop.

#include void main(void) { int number = 0; cout << "This program will let you enter number after\n"; cout << "number. Enter 99 when you want to quit the "; cout << "program.\n"; while (number != 99) cin >> number; } 11

Starting Out with C++, 3 rd Edition

Program Output with Example Input This program will let you enter number after number. Enter 99 when you want to quit the program.

1 [Enter] 2 [Enter] 30 [Enter] 75 [Enter] 99 [Enter] 12

Starting Out with C++, 3 rd Edition

Terminating a Loop

A loop that does not have a way of stopping is called an infinite loop int test = 0; while (test < 10) cout << “Hello\n”; A null statement is also an infinite loop, but it does nothing forever: while (test < 10); 13

Starting Out with C++, 3 rd Edition

Programming Style and the while Loop

• • If there is only one statement repeated by the loop, it should appear on the line after the while statement and be indented one additional level If the loop repeats a block, the block should begin on the line after the while statement and each line inside the braces should be indented 14

Starting Out with C++, 3 rd Edition

5.3 Counters

• A counter is a variable that is incremented or decremented each time a loop iterates.

15

Starting Out with C++, 3 rd Edition

Program 5-4

// This program displays the numbers 1 through 10 and // their squares.

#include void main(void) { int num = 1; // Initialize counter } cout << "number number Squared\n"; cout << "-------------------------\n"; while (num <= 10) { cout << num << "\t\t" << (num * num) << endl; num++; // Increment counter } 16

Starting Out with C++, 3 rd Edition

Program Output number number Squared ------------------------ 1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 9 81 10 100 17

Starting Out with C++, 3 rd Edition

Program 5-5

// This program displays the numbers 1 through 10 and // their squares.

#include { void main(void) int num = 0; cout << "number number Squared\n"; cout << "-------------------------\n"; while (num++ < 10) cout << num << "\t\t" << (num * num) << endl; } 18

Starting Out with C++, 3 rd Edition

Program Output number number Squared ------------------------ 1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 9 81 10 100 19

Starting Out with C++, 3 rd Edition

5.4 Letting the User Control the Loop

• We can let the user indicate the number of times a loop should repeat.

20

Starting Out with C++, 3 rd Edition

Program 5-6

// This program averages a set of test scores for multiple // students. It lets the user decide how many.

#include void main(void) { int numStudents, count = 0; cout << "This program will give you the average of three\n"; cout << "test scores per student.\n"; cout << "How many students do you have test scores for? "; cin >> numStudents; cout << "Enter the scores for each of the students.\n"; cout.precision(2);

Program continues…

21

Starting Out with C++, 3 rd Edition

Program continued from previous slide.

} while (count++ < numStudents) { int score1, score2, score3; float average; cout << "\nStudent " << count << ": "; cin >> score1 >> score2 >> score3; average = (score1 + score2 + score3) / 3.0; cout << "The average is " << average << ".\n"; } 22

Starting Out with C++, 3 rd Edition

Program Output with Example Input This program will give you the average of three test scores per student.

How many students do you have test scores for?

3 [Enter]

Enter the scores for each of the students.

Student 1:

75 80 82 [Enter]

The average is 79.

Student 2:

85 85 90 [Enter]

The average is 86.67.

Student 3:

60 75 88 [Enter]

The average is 74.33.

23

Starting Out with C++, 3 rd Edition

5.5 Keeping a Running Total

• A running total is a sum of numbers that accumulates with each iteration of a loop. The variable used to keep the running total is called an accumulator.

24

Starting Out with C++, 3 rd Edition

Program 5-7

// This program takes daily sales figures over a period of // time and calculates their total.

#include void main(void) { int days, count = 0; float total = 0.0; cout << "For how many days do you have sales figures? "; cin >> days;

Program continues…

25

Starting Out with C++, 3 rd Edition

Program continues

} while (count++ < days) { float sales; cout << "Enter the sales for day " << count << ": "; cin >> sales; total += sales; } cout.precision(2); cout.setf(ios::fixed | ios::showpoint); cout << "The total sales are $" << total << endl; 26

Starting Out with C++, 3 rd Edition

Program Output with Example Input For how many days do you have sales figures?

5 [Enter]

Enter the sales for day 1:

489.32 [Enter]

Enter the sales for day 2:

421.65 [Enter]

Enter the sales for day 3:

497.89 [Enter]

Enter the sales for day 4:

532.37 [Enter]

Enter the sales for day 5:

506.92 [Enter]

The total sales are $2448.15

27

Starting Out with C++, 3 rd Edition

5.6 Sentinels

• A sentinel is a special value that marks the end of a list of values.

28

Starting Out with C++, 3 rd Edition

Program 5-8

// This program calculates the total number of points a // soccer team has earned over a series of games. The user // enters a series of point values, then -1 when finished.

#include void main(void) { int count = 0, points = 0, total = 0; cout << "Enter the number of points your team has earned\n"; cout << "so far in the season, then enter -1 when\n"; cout << "finished.\n";

Program continues…

29

Starting Out with C++, 3 rd Edition

Program continued from previous slide.

} while (points != -1) { count++; cout << "Enter the points for game " << count << ": "; cin >> points; if (points != -1) total += points; } cout << "The total points are " << total << endl; 30

Starting Out with C++, 3 rd Edition

Program Output with Example Input Enter the number of points your team has earned so far in the season, then enter -1 when you are finished.

Enter the points for game 1:

7 [Enter]

Enter the points for game 2:

9 [Enter]

Enter the points for game 3:

4 [Enter]

Enter the points for game 4:

6 [Enter]

Enter the points for game 5:

8 [Enter]

Enter the points for game 6:

-1 [Enter]

The total points are 34 31

Starting Out with C++, 3 rd Edition

5.7 The do-while Loop and for Loops

• In addition to the while loop, C++ also offers the do-while and for loops.

• do A do-while loop is similar to a while loop, but in post-test format:

statement

; while (

expression

); 32

Starting Out with C++, 3 rd Edition

Program 5-9

//This program averages 3 test scores. It repeats as many times as // the user wishes #include void main(void) { int score1, score2, score3; float average; char again; do { cout << "Enter 3 scores and I will average them: "; cin >> score1 >> score2 >> score3; average = (score1 + score2 + score3) / 3.0; cout << "The average is " << average << ".\n"; cout << "Do you want to average another set? (Y/N) "; cin >> again; } while (again == 'Y' || again == 'y'); } 33

Starting Out with C++, 3 rd Edition

Program Output with Example Input

Enter 3 scores and I will average them:

80 90 70 [Enter]

The average is 80.

Do you want to average another set? (Y/N)

y [Enter]

Enter 3 scores and I will average them:

60 75 88 [Enter]

The average is

74.333336.

Do you want to average another set?

(Y/N) n [Enter]

34

Starting Out with C++, 3 rd Edition

Program 5-10

// This program displays a menu and asks the user to make a // selection. A switch statement determines which item the // user has chosen. A do-while loop repeats the program until // the user selects item 4 from the menu.

#include void main(void) { int choice, months; float charges; cout.setf(ios::fixed | ios::showpoint); cout.precision(2);

Program continues…

35

Starting Out with C++, 3 rd Edition

Program continued from previous slide.

do { cout << "\n\t\tHealth Club Membership Menu\n\n"; cout << "1. Standard Adult Membership\n"; cout << "2. Child Membership\n"; cout << "3. Senior Citizen Membership\n"; cout << "4. Quit the Program\n\n"; cout << "Enter your choice: "; cin >> choice; if (choice != 4) { cout << "For how many months? "; cin >> months; }

Program continues…

36

Starting Out with C++, 3 rd Edition

Program continued from previous slide.

switch (choice) { case 1: charges = months * 40.00; cout << "The total charges are $"; cout << charges << endl; break; case 2: charges = months * 20.00; cout << "The total charges are $"; cout << charges << endl; break; case 3: charges = months * 30.00; cout << "The total charges are $"; cout << charges << endl; break;

Program continues…

37

Starting Out with C++, 3 rd Edition

}

Program continued from previous slide.

case 4: cout << "Thanks for using this "; cout << "program.\n"; break; default: cout << "The valid choices are 1-4. "; cout << "Try again.\n"; } } while (choice != 4);

Program continues…

38

Starting Out with C++, 3 rd Edition

Program Output with Example Input

Health Club Membership Menu 1. Standard Adult Membership 2. Child Membership 3. Senior Citizen Membership 4. Quit the Program Enter your choice:

1 [Enter]

For how many months

12 [Enter]

The total charges are $480.00

Health Club Membership Menu 1. Standard Adult Membership 2. Child Membership 3. Senior Citizen Membership 4. Quit the Program Enter your choice:

4 [Enter]

Thanks for using this program.

39

Starting Out with C++, 3 rd Edition

The for Loop

• Ideal for situations that require a counter because it has built-in expressions that initialize and update variables.

for (

initialization

;

test

;

update

)

statement

; 40

Starting Out with C++, 3 rd Edition

Program 5-11

// This program displays the numbers 1 through 10 and // their squares.

#include void main(void) { int num; cout << “Number Number Squared\n"; cout << "-------------------------\n"; } for (num = 1; num <= 10; num++) cout << num << "\t\t" << (num * num) << endl; 41

Starting Out with C++, 3 rd Edition

Program Output Number Number Squared ------------------------ 1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 9 81 10 100 42

Starting Out with C++, 3 rd Edition

Omitting the for Loop’s Expressions

int num = 1; for ( ; num <= 10; num++) cout << num << “\t\t” << (num * num) << endl; 43

Starting Out with C++, 3 rd Edition

Using initialization and update lists

You may need to perform more than one statement in the initialization part of a for loop. In that case, just separate the statements with commas.

44

Starting Out with C++, 3 rd Edition

Program 5-12

// This program takes daily sales figures for one week // and calculates their total.

#include void main(void) { const int days = 7; int count; float total; for (count = 1, total = 0.0; count <= days; count++) { float sales; cout << "Enter the sales for day " << count << ": ";

Program continues…

45

Starting Out with C++, 3 rd Edition

Program continued from previous slide.

} cin >> sales; total += sales; } cout.precision(2); cout.setf(ios::fixed | ios::showpoint); cout << "The total sales are $" << total << endl; 46

Starting Out with C++, 3 rd Edition

Program Output with Example Input Enter the sales for day 1:

489.32 [Enter]

Enter the sales for day 2:

421.65 [Enter]

Enter the sales for day 3:

497.89 [Enter]

Enter the sales for day 4:

532.37 [Enter]

Enter the sales for day 5:

506.92 [Enter]

Enter the sales for day 6:

489.01 [Enter]

Enter the sales for day 7:

476.55 [Enter]

The total sales are $3413.71

47

Starting Out with C++, 3 rd Edition

5.8 Other forms of the update expression

• • • • Incrementing the counter by something besides 1: for(number = 2; number <= 100; number +=2) cout << number << endl; // print the even numbers 2 – 100 Going backwards: for(number = 10; number >= 0; number--) cout << number << endl; //count from 10 to 0 A stand-alone for loop //This one prints the integers from 1 to 10 for(number = 1; number <= 10; cout << number++) There are quite a few variations, try some of your own!

48

Starting Out with C++, 3 rd Edition

5.8 Focus on Software Engineering: Deciding Which Loop to Use

• • • The while Loop • A pre-test loop. • Use when you do not want the loop to iterate if the condition is false from the beginning. • Ideal if you want to use a sentinel.

The do-while Loop • A post-test loop.

• Use if you always want the loop to iterate at least once.

The for Loop • A pre-test loop.

• • • Automatically executes an update expression at the end of each iteration.

Ideal for situations where a counter variable is needed.

Used when the exact number of required iterations is known.

49

Starting Out with C++, 3 rd Edition

5.9 Focus on Software Engineering: Nested Loops

• A loop that is inside another loop is called a nested loop.

50

Starting Out with C++, 3 rd Edition

Program 5-13

// This program averages test scores. It asks the user for the // number of students and the number of test scores per student.

#include void main(void) { int numStudents, numTests, total; float average; cout << "This program averages test scores.\n"; cout << "For how many students do you have scores? "; cin >> numStudents; cout << "How many test scores does each student have? "; cin >> numTests;

Program continues…

51

Starting Out with C++, 3 rd Edition

Program continued from previous slide.

} for (int count1 = 1; count1 <= numStudents; count1++) { total = 0; // Initialize accumulator for (int count2 = 1; count2 <= numTests; count2++) { int score; cout << "Enter score " << count2 << " for "; cout << "student " << count1 << ": "; cin >> score; total += score; // accumulate running total } average = total / numTests; cout << "The average score for student " << count1; cout << " is " << average << ".\n\n"; } 52

Starting Out with C++, 3 rd Edition

Program Output with Example Input This program averages test scores.

For how many students do you have scores? 2 [Enter] How many test scores does each student have? 3 [Enter] Enter score 1 for student 1: 84 [Enter] Enter score 2 for student 1: 79 [Enter] Enter score 3 for student 1: 97 [Enter] The average for student 1 is 86.

Enter score 1 for student 2: 92 [Enter] Enter score 2 for student 2: 88 [Enter] Enter score 3 for student 2: 94 [Enter] The average for student 2 is 91.

53

Starting Out with C++, 3 rd Edition

5.10 Breaking Out of a Loop

• The break statement causes a loop to terminate early.

54

Starting Out with C++, 3 rd Edition

Program 5-14

// This program raises the user's number to the powers // of 0 through 10.

#include #include void main(void) { int value; char choice; cout << "Enter a number: "; cin >> value; cout << "This program will raise " << value; cout << " to the powers of 0 through 10.\n";

Program continues…

55

Starting Out with C++, 3 rd Edition

Program continued from previous slide.

} for (int count = 0; count < 10; count++) { cout << value << " raised to the power of "; cout << count << " is " << pow(value, count); cout << "\nEnter Q to quit or any other key "; cout << "to continue. "; cin >> choice; if (choice == 'Q' || choice == 'q') break; } 56

Starting Out with C++, 3 rd Edition

Program Output Enter a number:

2 [Enter]

This program will raise 2 to the powers of 0 through 10.

2 raised to the power of 0 is 1 Enter Q to quit or any other key to continue.

C [Enter]

2 raised to the power of 1 is 2 Enter Q to quit or any other key to continue.

C [Enter]

2 raised to the power of 2 is 4 Enter Q to quit or any other key to continue.

Q [Enter]

57

Starting Out with C++, 3 rd Edition

5.11 Using

break

in a nested loop

• The break statement below breaks out of the inner loop but NOT the outer loop for(int row = 0; row < 5; row++) { //begin outer loop for(star = 0; star < 20; star++) { //begin inner loop …………// some statements break; …………// some more statements } //end inner loop } //end outer loop 58

Starting Out with C++, 3 rd Edition

5.11 The continue Statement

• The continue statement causes a loop to stop its current iteration and begin the next one.

59

Starting Out with C++, 3 rd Edition

Program 5-15

// This program calculates the charges for video rentals.

// Every third video is free.

#include #include void main(void) { int videoCount = 1, numVideos; float total = 0.0; char current; cout << "How many videos are being rented? "; cin >> numVideos;

Program continues…

60

Starting Out with C++, 3 rd Edition

Program continued from previous slide.

do { if ((videoCount % 3) == 0) { cout << "Video #" << videoCount << " is free!\n"; continue; } cout << "Is video #" << videoCount; cout << " a current release? (Y/N)"; cin >> current; if (current == 'Y' || current == 'y') total += 3.50; else total += 2.50; } while (videoCount++ < numVideos);

Program continues…

61

Starting Out with C++, 3 rd Edition

Program continued from previous slide.

} cout.precision(2); cout.setf(ios::fixed | ios::showpoint); cout << "The total is $" << total; 62

Starting Out with C++, 3 rd Edition

Program Output with Example Input How many Videos are being rented?

6 [Enter]

Is video #1 a current release?

y [Enter]

Is video #2 a current release?

n [Enter]

Video #3 is free!

Is video #4 a current release?

n [Enter]

Is video #5 a current release?

y [Enter]

Video #6 is free!

The total is $12.00

63

Starting Out with C++, 3 rd Edition

5.12 Using Loops for Input Validation

• Loops can be used to create input routines that repeat until acceptable data is entered.

64

Starting Out with C++, 3 rd Edition

Program 5-16

// This program calculates the number of soccer teams // that a youth league may create from the number of // available players. Input validation is demonstrated // with do-while loops.

#include void main(void) { int players, teamPlayers, numTeams, leftOver; // Get the number of players per team.

cout << “How many players you wish per team?\n”; cout << “(Enter a value in the range 9 - 15): "; cin >> teamPlayers;

Program continues…

65

Starting Out with C++, 3 rd Edition

Program continued from previous slide.

while (teamPlayers < 9 || teamPlayers > 15) // Validate input { cout << "You should have at least 9 but no\n"; cout << "more than 15 per team.\n"; cout << “How many players do you wish per team? “; cin >> teamPlayers; } // Get the number of players available cout << “How many players are available? “; cin >> players; while (players < 0) // Validate input { cout << "Please enter a positive number.\n"; cin >> players; } // Perform calculations numTeams = players / teamPlayers; leftOver = players % teamPlayers; cout << "There will be " << numTeams << " teams with\n"; cout << leftOver << " players left over.\n"; } 66

Starting Out with C++, 3 rd Edition

Program Output with Example Input How many players you wish per team? (Enter a value in the range 9 – 15):

4[Enter]

You should have at least 9 but no more than 15 per team.

How many players you wish per team?

12[Enter]

How many players are available? -

142 [Enter]

Please enter a positive number:

142[Enter]

There will be 11 teams with 10 players left over.

67

Starting Out with C++, 3 rd Edition