Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Chapter 5. Looping 1 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 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--; 3 Program continues cout << "BigVal is " << BigVal << " and SmallVal is " << SmallVal << endl; ++SmallVal; --BigVal; cout << "BigVal is " << BigVal << " and SmallVal is " << SmallVal << endl; } 4 Program Output BigVal is 10 and SmallVal is 1 BigVal is 9 and SmallVal is 2 BigVal is 8 and SmallVal is 3 5 Program 5-2 #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; } 6 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 Using ++ and -- in Mathematical Expressions A = 2; B = 5; C = A * B++; cout << A << “ “ << B << “ “ << C; Results: 2 6 10 8 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 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 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; } 11 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 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 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 5.3 Counters • A counter is a variable that is incremented or decremented each time a loop iterates. 15 Program 5-4 // This program displays the numbers 1 through 10 and // their squares. #include <iostream.h> void main(void) { int Num = 1; cout << "Number Number Squared\n"; cout << "-------------------------\n"; while (Num <= 10) { cout << Num << "\t\t" << (Num * Num) << endl; Num++; } } 16 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 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; } 18 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 5.4 Letting the User Control the Loop • Loops can be designed to repeat until the user enters a particular value. 20 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); 21 Program continues 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 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 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 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; 25 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 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 5.6 Sentinels • A sentinel is a special value that marks the end of a list of values. 28 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"; 29 Program continues 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 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 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); 32 Program 5-9 #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'); } 33 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 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); 35 Program continues 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; } 36 Program continues 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; 37 Program continues 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); } 38 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 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 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; } 41 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 Omitting the for Loop’s Expressions int Num = 1; for ( ; Num <= 10; Num++) cout << Num << “\t\t” << (Num * Num) << endl; 43 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 << ": "; 44 Program continues cin >> Sales; Total += Sales; } cout.precision(2); cout.setf(ios::fixed | ios::showpoint); cout << "The total sales are $" << Total << endl; } 45 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 46 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. 47 5.9 Focus on Software Engineering: Nested Loops • A loop that is inside another loop is called a nested loop. 48 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; 49 Program continues for (int Count1 = 1; Count1 <= NumStudents; Count1++) { Total = 0; for (int Count2 = 1; Count2 <= NumTests; Count2++) { int Score; cout << "Enter score " << Count2 << " for "; cout << "student " << Count1 << ": "; cin >> Score; Total += Score; } Average = Total / NumTests; cout << "The average score for student " << Count1; cout << " is " << Average << ".\n\n"; } } 50 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. 51 5.10 Breaking Out of a Loop • The break statement causes a loop to terminate early. 52 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"; 53 Program continues 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; } } 54 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] 55 5.11 The continue Statement • The continue statement causes a loop to stop its current iteration and begin the next one. 56 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; 57 Program continues 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); 58 Program continues cout.precision(2); cout.setf(ios::fixed | ios::showpoint); cout << "The total is $" << Total; } 59 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 60 5.12 Using Loops for Input Validation • Loops can be used to create input routines that repeat until acceptable data is entered. 61 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, Max, NumTeams, LeftOver; do { cout << "What is the maximum number of players "; cout << "per team? "; cin >> Max; 62 Program continues if (Max < 9 || Max > 15) { cout << "You should have at least 9 but no\n"; cout << "more than 15 per team.\n"; } } while (Max < 9 || Max > 15); do { cout << "How many players are available? "; cin >> Players; if (Players < 0) cout << "Please enter a positive number.\n"; } while (Players < 0); NumTeams = Players / Max; LeftOver = Players % Max; cout << "There will be " << NumTeams << " teams with\n"; cout << LeftOver << " players left over.\n"; } 63 Program Output with Example Input What is the maximum number of players per team? 4 [Enter] You should have at least 9 but no more than 15 per team. What is the maximum number of players per team? 12 [Enter] How many players are available? -142 [Enter] Please enter a positive number How many players are available? 142 [Enter] There will be 11 teams with 10 players left over. 64