Chapter 5. Looping

67
1 Starting Out with C++, 3 rd Edition Chapter 5. Looping

description

Chapter 5. Looping. 5.1 The Increment and Decrement Operators. ++ and -- are operators that add and subtract one from their operands. num = num + 1; num += 1; num++;. Program 5-1. // This program demonstrates the increment and decrement // operators. #include - PowerPoint PPT Presentation

Transcript of Chapter 5. Looping

Page 1: Chapter 5. Looping

1

Starting Out with C++, 3rd Edition

Chapter 5. Looping

Page 2: Chapter 5. Looping

2

Starting Out with C++, 3rd 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++;

Page 3: Chapter 5. Looping

3

Starting Out with C++, 3rd Edition

Program 5-1// This program demonstrates the increment and decrement

// operators.

 

#include <iostream.h>

void main(void)

{

int bigVal = 10, smallVal = 1;

 

cout << "bigVal is " << bigVal

<< " and smallVal is " << smallVal << endl;

smallVal++;

bigVal--;

Program continues…

Page 4: Chapter 5. Looping

4

Starting Out with C++, 3rd 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;

}

Page 5: Chapter 5. Looping

5

Starting Out with C++, 3rd Edition

Program Output

bigVal is 10 and smallVal is 1

bigVal is 9 and smallVal is 2

bigVal is 8 and smallVal is 3

Page 6: Chapter 5. Looping

6

Starting Out with C++, 3rd Edition

Program 5-2//This program demonstrates the prefix and postfix modes of the

// increment and decrement operators.

#include <iostream.h>

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;

}

Page 7: Chapter 5. Looping

7

Starting Out with C++, 3rd 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

Page 8: Chapter 5. Looping

8

Starting Out with C++, 3rd Edition

Using ++ and -- in Mathematical Expressions

a = 2;

b = 5;

c = a * b++;

cout << a << “ “ << b << “ “ << c;

Results: 2 6 10

Page 9: Chapter 5. Looping

9

Starting Out with C++, 3rd 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

Page 10: Chapter 5. Looping

10

Starting Out with C++, 3rd 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;

Page 11: Chapter 5. Looping

11

Starting Out with C++, 3rd Edition

Program 5-3// This program demonstrates a simple while loop.

#include <iostream.h>

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;

}

Page 12: Chapter 5. Looping

12

Starting Out with C++, 3rd 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]

Page 13: Chapter 5. Looping

13

Starting Out with C++, 3rd 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);

Page 14: Chapter 5. Looping

14

Starting Out with C++, 3rd 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

Page 15: Chapter 5. Looping

15

Starting Out with C++, 3rd Edition

5.3 Counters

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

Page 16: Chapter 5. Looping

16

Starting Out with C++, 3rd Edition

Program 5-4// This program displays the numbers 1 through 10 and

// their squares.

#include <iostream.h>

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

}

}

Page 17: Chapter 5. Looping

17

Starting Out with C++, 3rd Edition

Program Output

number number Squared

-------------------------1 12 43 94 165 256 367 498 649 8110 100

Page 18: Chapter 5. Looping

18

Starting Out with C++, 3rd Edition

Program 5-5

// This program displays the numbers 1 through 10 and

// their squares.

 #include <iostream.h>

 void main(void)

{

int num = 0;

  cout << "number number Squared\n";

cout << "-------------------------\n";

while (num++ < 10)

cout << num << "\t\t" << (num * num) << endl;

}

Page 19: Chapter 5. Looping

19

Starting Out with C++, 3rd Edition

Program Output

number number Squared

-------------------------1 12 43 94 165 256 367 498 649 8110 100

Page 20: Chapter 5. Looping

20

Starting Out with C++, 3rd Edition

5.4 Letting the User Control the Loop

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

Page 21: Chapter 5. Looping

21

Starting Out with C++, 3rd Edition

Program 5-6// This program averages a set of test scores for multiple

// students. It lets the user decide how many.

#include <iostream.h>

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…

Page 22: Chapter 5. Looping

22

Starting Out with C++, 3rd 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";

}

}

Page 23: Chapter 5. Looping

23

Starting Out with C++, 3rd 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.

Page 24: Chapter 5. Looping

24

Starting Out with C++, 3rd 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.

Page 25: Chapter 5. Looping

25

Starting Out with C++, 3rd Edition

Program 5-7

// This program takes daily sales figures over a period of

// time and calculates their total.

#include <iostream.h>

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…

Page 26: Chapter 5. Looping

26

Starting Out with C++, 3rd 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;

}

Page 27: Chapter 5. Looping

27

Starting Out with C++, 3rd 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

Page 28: Chapter 5. Looping

28

Starting Out with C++, 3rd Edition

5.6 Sentinels

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

Page 29: Chapter 5. Looping

29

Starting Out with C++, 3rd 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 <iostream.h>

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…

Page 30: Chapter 5. Looping

30

Starting Out with C++, 3rd 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;

}

Page 31: Chapter 5. Looping

31

Starting Out with C++, 3rd 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

Page 32: Chapter 5. Looping

32

Starting Out with C++, 3rd 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.

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

do

statement;

while (expression);

Page 33: Chapter 5. Looping

33

Starting Out with C++, 3rd Edition

Program 5-9//This program averages 3 test scores. It repeats as many times as// the user wishes#include <iostream.h>

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

Page 34: Chapter 5. Looping

34

Starting Out with C++, 3rd 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]

Page 35: Chapter 5. Looping

35

Starting Out with C++, 3rd 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 <iostream.h>

 

void main(void)

{

int choice, months;

float charges;

 

cout.setf(ios::fixed | ios::showpoint);

cout.precision(2);

Program continues…

Page 36: Chapter 5. Looping

36

Starting Out with C++, 3rd 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…

Page 37: Chapter 5. Looping

37

Starting Out with C++, 3rd 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…

Page 38: Chapter 5. Looping

38

Starting Out with C++, 3rd 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…

Page 39: Chapter 5. Looping

39

Starting Out with C++, 3rd Edition

Program Output with Example Input

Health Club Membership Menu 1. Standard Adult Membership2. Child Membership3. Senior Citizen Membership4. Quit the ProgramEnter your choice: 1 [Enter]For how many months 12 [Enter]The total charges are $480.00  Health Club Membership Menu 1. Standard Adult Membership2. Child Membership3. Senior Citizen Membership4. Quit the ProgramEnter your choice: 4 [Enter]Thanks for using this program.

Page 40: Chapter 5. Looping

40

Starting Out with C++, 3rd 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;

Page 41: Chapter 5. Looping

41

Starting Out with C++, 3rd Edition

Program 5-11// This program displays the numbers 1 through 10 and

// their squares.

#include <iostream.h>

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;

}

Page 42: Chapter 5. Looping

42

Starting Out with C++, 3rd Edition

Program Output

Number Number Squared

-------------------------1 12 43 94 165 256 367 498 649 8110 100

Page 43: Chapter 5. Looping

43

Starting Out with C++, 3rd Edition

Omitting the for Loop’s Expressions

int num = 1;

for ( ; num <= 10; num++)

cout << num << “\t\t” << (num * num) << endl;

Page 44: Chapter 5. Looping

44

Starting Out with C++, 3rd 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.

Page 45: Chapter 5. Looping

45

Starting Out with C++, 3rd Edition

Program 5-12// This program takes daily sales figures for one week

// and calculates their total.

 

#include <iostream.h>

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…

Page 46: Chapter 5. Looping

46

Starting Out with C++, 3rd 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;

}

Page 47: Chapter 5. Looping

47

Starting Out with C++, 3rd 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

Page 48: Chapter 5. Looping

48

Starting Out with C++, 3rd 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 10for(number = 1; number <= 10; cout << number++)

• There are quite a few variations, try some of your own!

Page 49: Chapter 5. Looping

49

Starting Out with C++, 3rd 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.

Page 50: Chapter 5. Looping

50

Starting Out with C++, 3rd Edition

5.9 Focus on Software Engineering: Nested Loops

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

Page 51: Chapter 5. Looping

51

Starting Out with C++, 3rd 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 <iostream.h>

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…

Page 52: Chapter 5. Looping

52

Starting Out with C++, 3rd 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";

}

}

Page 53: Chapter 5. Looping

53

Starting Out with C++, 3rd 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.

Page 54: Chapter 5. Looping

54

Starting Out with C++, 3rd Edition

5.10 Breaking Out of a Loop

• The break statement causes a loop to terminate early.

Page 55: Chapter 5. Looping

55

Starting Out with C++, 3rd Edition

Program 5-14// This program raises the user's number to the powers

// of 0 through 10.

#include <iostream.h>

#include <math.h>

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…

Page 56: Chapter 5. Looping

56

Starting Out with C++, 3rd 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;

}

}

Page 57: Chapter 5. Looping

57

Starting Out with C++, 3rd 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]

Page 58: Chapter 5. Looping

58

Starting Out with C++, 3rd 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

Page 59: Chapter 5. Looping

59

Starting Out with C++, 3rd Edition

5.11 The continue Statement

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

Page 60: Chapter 5. Looping

60

Starting Out with C++, 3rd Edition

Program 5-15// This program calculates the charges for video

rentals.// Every third video is free. #include <iostream.h>#include <iomanip.h>

void main(void){

int videoCount = 1, numVideos;float total = 0.0;char current;

cout << "How many videos are being rented? ";cin >> numVideos;

Program continues…

Page 61: Chapter 5. Looping

61

Starting Out with C++, 3rd 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…

Page 62: Chapter 5. Looping

62

Starting Out with C++, 3rd Edition

Program continued from previous slide.

cout.precision(2);

cout.setf(ios::fixed | ios::showpoint);

cout << "The total is $" << total;

}

Page 63: Chapter 5. Looping

63

Starting Out with C++, 3rd 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

Page 64: Chapter 5. Looping

64

Starting Out with C++, 3rd Edition

5.12 Using Loops for Input Validation

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

Page 65: Chapter 5. Looping

65

Starting Out with C++, 3rd 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 <iostream.h>

 

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…

Page 66: Chapter 5. Looping

66

Starting Out with C++, 3rd 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 calculationsnumTeams = players / teamPlayers;leftOver = players % teamPlayers;cout << "There will be " << numTeams << " teams with\n";cout << leftOver << " players left over.\n";

}

Page 67: Chapter 5. Looping

67

Starting Out with C++, 3rd 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.