1 / 24

The while Looping Structure

The while Looping Structure. Topics The while Loop Counter-Controlled (Definite) Repetition Event-Controlled (Indefinite) Repetition Program Versatility Sentinel Values and Priming Reads Checking User Input Using a while Loop. The while Repetition Structure. Example:

bkruse
Download Presentation

The while Looping Structure

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. The while Looping Structure Topics • The while Loop • Counter-Controlled (Definite) Repetition • Event-Controlled (Indefinite) Repetition • Program Versatility • Sentinel Values and Priming Reads • Checking User Input Using a while Loop

  2. The while Repetition Structure • Example: • while ( children > 0 ) • { • children = children - 1 ; • cookies = cookies * 2 ; • } while (condition) { statement(s) } Note: The braces are not required if the loop body contains only a single statement. However, they are a good idea and are required by the 104 C Coding Standards.

  3. Loop or Repetition • A repetition structure (loop) allows the programmer to specify that an action (group of instructions) is to be repeated while some condition remains true. • There are three repetition structures in C, the while loop, the for loop, and the do-while loop. • There are two types of loop: • Counter-controlled • Event-controlled

  4. Counter-Controlled Repetition (Definite Repetition) • If it is known in advance exactly how many times a loop will execute, it is known as a counter-controlled loop. int i = 1 ; while ( i <= 10 ) { printf(“i = %d\n”, i) ; i = i + 1 ; }

  5. Counter-Controlled Repetition (con’t) • Is the following loop a counter-controlled loop? • X = 0 ; • Y = 6 ; • while ( x != y ) • { • scanf(“%d”, y) ; • printf(“x = %d”, x) ; • x = x + 2 ; • }

  6. Event-Controlled Repetition(Indefinite Repetition) • If it is NOT known in advance exactly how many times a loop will execute, it is known as an event-controlled loop. • An event-controlled loop will terminate when some event occurs. • The event may be the occurrence of a sentinel value which indicate “end of data”. • Sentinel value must be distinct from valid input data item. • There are other types of events that may occur, such as reaching the end of a data file.

  7. The Priming Read • When we use a sentinel value to control a while loop, we have to get the first value from the user before we encounter the loop so that it will be tested and the loop can be entered. • This is known as a priming read. • We have to give significant thought to the initialization of variables, the sentinel value, and getting into the loop.

  8. The 3 Parts of a Loop #include <stdio.h> int main () { int i = 1 ; initialization of loop control variable /* count from 1 to 100 */ while ( i < 101 ) test of loop termination condition { printf (“%d “, i) ; i = i + 1 ; modification of loop control } variable return 0 ; }

  9. Good Programming Practice • Always place braces around the body of a while loop. • Advantages: • Easier to read. • Less likely to make a syntax error. • Indent the body of a while loop 3 to 4 spaces -- be consistent!

  10. Another while Loop Example • Problem: Write a program that calculates the average exam grade for a class of 10 students. Grades and average exam are integer value from 0 to 100. • What are the program inputs? • the exam grades • What are the program outputs? • the average exam grade

  11. The Pseudocode // Define Variables. // Let grade = exam grade // totalGrade = total of exam grades = 0 // counter = counter for the grades = 1 // average = average of exam grades // Read input grade and compute total grade. • While (counter <= 10) • Display “Enter a grade: ” Read grade • totalGrade = totalGrade + grade • counter = counter + 1 • End_while // Compute average grade and output result. average = totalGrade / 10 Display “Class average is: “, average

  12. The C Code • #include <stdio.h> • int main ( ) • { • int counter, grade, totalGrade, average ; • totalGrade = 0 ; • counter = 1 ; • while ( counter <= 10 ) • { • printf (“Enter a grade : “) ; • scanf (“%d”, &grade) ; • totalGrade = totalGrade + grade ; • counter = counter + 1 ; • } • average = totalGrade / 10 ; • printf (“Class average is: %d\n”, average) ; • return 0 ; • }

  13. Versatile? • How versatile is this program? • It only works with class sizes of 10. • We would like it to work with any class size. • A better way : • Ask the user how many students are in the class. Use that number in the condition of the while loop and when computing the average.

  14. New Pseudocode // Define Variable // Let numStudents // grade = exam grade // totalGrade = total of exam grades = 0 // counter = counter for the grades = 1 // average = average of exam grades // Read input grade and compute total grade Display “Enter the number of students: “ Read numStudents While (counter <= numStudents) Display “Enter a grade: ” Read grade totalGrade = totalGrade + grade counter = counter + 1 End_while // Compute average grade and output result. average = totalGrade / numStudents Display “Class average is: “, average

  15. New C Code • #include <stdio.h> • int main ( ) { • int numStudents, counter, grade, totalGrade, average ; • totalGrade = 0 ; • counter = 1 ; • printf (“Enter the number of students: “) ; • scanf (“%d”, &numStudents) ; • while ( counter <= numStudents) { • printf (“Enter a grade : “) ; • scanf (“%d”, &grade) ; • totalGrade = totalGrade + grade ; • counter = counter + 1 ; • } • average = totalGrade / numStudents ; • printf (“Class average is: %d\n”, average) ; • return 0 ; • }

  16. Why Bother to Make It Easier? • Why do we write programs? • So the user can perform some task. • The more versatile the program, the more difficult it is to write. BUT it is more useable. • The more complex the task, the more difficult it is to write. But that is often what a user needs. • Always consider the user first.

  17. Using a Sentinel Value • We could use a sentinel value to indicate the end of input data. • For example, we could use “-1” as our sentinel value. Note that we can’t use 0 as the sentinel in our example as it is a valid data for an exam score.

  18. New Pseudocode // Define Variable // Let grade = exam grade // totalGrade = total of exam grades = 0 // counter = counter for the grades = 1 // average = average of exam grades // Read input grade and compute total grade Display “Enter a grade: “ Read grade While ( grade != -1 ) totalGrade = totalGrade + grade counter = counter + 1 Display “Enter another grade: ” Read <grade> End_while // Compute average grade and output result. average = totalGrade / counter Display “Class average is: “, average

  19. New C Code #include <stdio.h> int main ( ) { int counter, grade, totalGrade, average ; totalGrade = 0 ; counter = 1 ; printf(“Enter a grade: “) ; scanf(“%d”, &grade) ; while (grade != -1) { totalGrade = totalGrade + grade ; counter = counter + 1 ; printf(“Enter another grade: “) ; scanf(“%d”, &grade) ; } average = totalGrade / counter ; printf (“Class average is: %d\n”, average) ; return 0 ; }

  20. Final “Clean” C Code #include <stdio.h> int main ( ) { /* Variable Declarations */ int counter ; /* counts number of grades entered */ int grade ; /* individual grade */ int totalGrade; /* total of exam grades */ int average ; /* average grade */ /* Initializations */ totalGrade = 0 ; counter = 1 ;

  21. Final “Clean” C Code (con’t) /* Get input grades from user . */ /* Compute total grade. */ printf(“Enter a grade: “) ; scanf(“%d”, &grade) ; while (grade != -1) { totalGrade = totalGrade + grade ; counter = counter + 1 ; printf(“Enter another grade: “) ; scanf(“%d”, &grade) ; } /* Compute the average grade */ average = totalGrade / counter ; /* Output the average grade to user. */ printf (“Class average is: %d\n”, average) ; return 0 ; }

  22. Example of Using a while Loop to Check User Input • #include <stdio.h> • int main ( ) • { • int number ; • printf (“Enter a positive integer : “) ; • scanf (“%d”, &number) ; • while ( number <= 0 ) • { • printf (“\nThat’s incorrect. Try again.\n”) ; • printf (“Enter a positive integer: “) ; • scanf (“%d”, &number) ; • } • printf (“You entered: %d\n”, number) ; • return 0 ; • }

  23. Example of Event-Controlled Loop • Example: sum = 0 ; printf(“Enter an integer value: “) ; scanf(“%d”, &value) ; while ( value != -1) { sum = sum + value ; printf(“Enter another value: “) ; scanf(“%d”, &value) ; }

  24. Assignment and Next • Read Sections 3.7, 4.1 - 4.3 • Get familiar with any Linux text editor, e.g. xemacs or emacs. • Project 1 due midnight of Wed. 10/23. Next: More Loops. Sections 4.4 – 4.6, 4.8 – 4.9. Assignment Operator 3.11 - 3.12.

More Related