[go: up one dir, main page]

0% found this document useful (0 votes)
30 views39 pages

Chapter5 Repetition LoopStatements

The document discusses repetition and loop statements in programming, including counting loops, while loops, for loops, conditional loops, nested loops, and do-while loops. It provides examples of each loop type and covers related concepts like initialization expressions, loop repetition conditions, update expressions, and detecting faulty input data. The goal is to explain how to use different loop structures to repeatedly execute blocks of code in a program.

Uploaded by

565
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
30 views39 pages

Chapter5 Repetition LoopStatements

The document discusses repetition and loop statements in programming, including counting loops, while loops, for loops, conditional loops, nested loops, and do-while loops. It provides examples of each loop type and covers related concepts like initialization expressions, loop repetition conditions, update expressions, and detecting faulty input data. The goal is to explain how to use different loop structures to repeatedly execute blocks of code in a program.

Uploaded by

565
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 39

Repetition and Loop Statements

Chapter 5

1
Outline
• Repetition in Programs
• Counting loops
• The while statement
• The for statement
• Conditional Loops
• Nested Loops
• The do-while statement
• Common Programming Errors
2
Recall: Control Structures
• Three kinds of control structures
– Sequence (Compound Statement)
– Selection (if and switch Statements)
– Repetition (discussed in this presentation)
• The repetition of steps in a program is called a loop
• Three loop control structures in C
– The while statement
– The for statement
– The do-while statement
3
Repetition in Programs
• Loop structure
– A control structure that repeats a group of steps in a program
• Loop body
– The statements that are repeated inside the loop
• Three questions to raise:
1. Are there any steps repeated in the problem?
2. If the answer to question 1 is yes, is the number of
repetitions know in advance?
3. If the answer to question 2 is no, then how long to keep
repeating the steps?
4
Flowchart of Loop Choice

5
Counting Loop
• Called a Counter-controlled loop
• A loop that can be controlled by a counter variable
• Number of iterations (repetitions) can be
determined before loop execution begins
• General format of a counting loop:
Set loop control variable to an initial value
while (loop control variable < final value) {
/* Do something multiple times */
Increase loop control variable by 1
}
6
The while Statement
• Syntax: Loop Repetition Condition
while (condition) {
statement1 ;
Loop Body:
statement2 ; Can be one statement, or
. . . Compound statement
statementN ;
}
• As long as condition is true, the loop body is executed
• The condition is re-tested after each iteration
• The loop terminates when condition becomes false 7
Example of a while Loop
• Compute and display the gross pay for 7 employees
– Initialization: count_emp = 0;
– Testing: (count_emp < 7)
– Updating: count_emp = count_emp + 1;

8
Flowchart of a while Loop

Loop repetition condition

Loop body

If count_emp is not updated,


the loop will execute forever.
Such a loop is called infinite loop.
9
Total Payroll of a Company

10
Enter number of employees> 3
Hours> 50
Rate> $5.25
Pay is $262.50

Hours> 6
Sample
Rate> $5.0
Pay is $ 30.00 Run
Hours> 15
Rate> $7.0
Pay is $105.00

All employees processed


Total payroll is $ 397.50
11
Next . . .
• Repetition in Programs
• Counting loops
• The while statement
• The for statement
• Conditional Loops
• Nested Loops
• The do-while statement
• Common Programming Errors
12
The for Statement
• Better way to write a counting loop
for (initialization expression;
loop repetition condition;
update expression)
Statement ; /* Can be Compound */
• First, the initialization expression is executed
• Then, the loop repetition condition is tested
– If true, the Statement is executed , the update
expression is computed, and the repetition
condition is re-tested 13
Accumulating a Sum: total_pay

/* initialization */
/* repetition condition */
/* update */

14
Compound Assignment Operators
variable op= expression ; is equivalent to
variable = variable op (expression) ;

Statement with Simple Equivalent with Compound


Assignment Operator Assignment Operator
count_emp = count_emp + 1; count_emp += 1;

time = time - 1; time -= 1;

product = product * item; product *= item;

total = total / number; total /= number;

n = n % (x+1); n %= x+1;
15
Increment and Decrement Operators

• counter = counter + 1
count += 1
counter++

• counter = counter - 1
count -= 1
counter—

• side effect
– a change in the value of a variable as a result of
carrying out an operation
© 2016 Pearson Education, Inc., Hob 16
oken, NJ. All rights reserved.
Prefix and Postfix Increments

C also provides the decrement operator -- that


can be used in either the prefix or postfix position 17
Example
a, b, c, and d are 4 integers and and a =
3, b = -7, c = 2 What is the value of d
after running
d = a * ++b / c % a - b + c;?

Solution:

d = 3*-6/2%3 – (-6) +2
d = -18/2%3 + 6 +2
d = -9%3 + 6 + 2
d = 0+8
d = 8
© 2016 Pearson Education, Inc., Hob 18
oken, NJ. All rights reserved.
Function to Compute Factorial

19
Conversion of
Celsius to Fahrenheit
Display a Table of Values

Decrement by 5

20
Next . . .
• Repetition in Programs
• Counting loops
• The while statement
• The for statement
• Conditional Loops
• Nested Loops
• The do-while statement
• Common Programming Errors
21
Conditional Loops
• Not able to determine the exact number of
loop repetitions before loop execution begins
• Example of a conditional loop: input validation
printf("Enter number of students> ");
scanf("%d", &num_students);
while (num_students < 0) {
printf("Invalid negative number; try again> ");
scanf("%d", &num_students);
}

• while loop rejects invalid (negative) input


22
Sentinel-Controlled Loops
• In many programs, we input a list of data values
• Often, we don’t know the length of the list
• We ask the user to enter a unique data value, called
a sentinel value, after the last data item
• Sentinel Value
– An end marker that follows the last value in a list of data
– For readability, we used #define to name the SENTINEL
• The loop repetition condition terminates a loop
when the sentinel value is read 23
Sentinel-Controlled while Loop
#include <stdio.h>
#define SENTINEL -1 /* Marking end of input */

int main(void) { /* Compute the sum of test scores */


int sum = 0; /* Sum of test scores */
int score; /* Current input score */

printf("Enter first score (%d to quit)> ", SENTINEL);


scanf("%d", &score);
while (score != SENTINEL) {
sum += score;
printf("Enter next score (%d to quit)> ", SENTINEL);
scanf("%d", &score);
}
printf("\nSum of exam scores is %d\n", sum);
return (0);
} 24
Sentinel-Controlled for Loop
#include <stdio.h>
#define SENTINEL -1 /* Marking end of input */

int main(void) { /* Compute the sum of test scores */


int sum = 0; /* Sum of test scores */
int score; /* Current input score */

printf("Enter first score (%d to quit)> ", SENTINEL);


for (scanf("%d", &score);
score != SENTINEL;
scanf("%d", &score)) {
sum += score;
printf("Enter next score (%d to quit)> ", SENTINEL);
}
printf("\nSum of exam scores is %d\n", sum);
return (0);
} 25
Infinite Loop on Faulty Input Data
• Reading faulty data can result in an infinite loop
scanf("%d", &score); /* read integer */
• Suppose the user enters the letter X
Enter next score (-1 to quit)> X
scanf fails to read variable score as letter X
• Variable score is not modified in the program
score != SENTINEL is always true
• Therefore, Infinite Loop
26
Detecting Faulty Input Data
• scanf can detect faulty input as follows:
status = scanf("%d", &score);
• If scanf successfully reads score then status is 1
• If scanf fails to read score then status is 0
• We can test status to detect faulty input
• This can be used to terminate the execution of a loop
• In general, scanf can read multiple variables
• It returns the number of successfully read inputs
27
Terminating Loop on Faulty Input
int main(void) { /* Compute the sum of test scores */
int sum = 0; /* Sum of test scores */
int score; /* Current input score */
int status; /* Input status of scanf */

printf("Enter first score (%d to quit)> ", SENTINEL);


status = scanf("%d", &score);
while (status != 0 && score != SENTINEL) {
sum += score;
printf("Enter next score (%d to quit)> ", SENTINEL);
status = scanf("%d", &score);
}
printf("\nSum of exam scores is %d\n", sum);
return (0);
}
28
Next . . .
• Repetition in Programs
• Counting loops
• The while statement
• The for statement
• Conditional Loops
• Nested Loops
• The do-while statement
• Common Programming Errors
29
Nested Loops
• Consist of an outer loop with one or more
inner loops
• Each time the outer loop is repeated, the
inner loops are reentered and executed
stars(5);
• Example:
void stars(int n) { *
int i, j; **
inner loop
outer loop

for (i=1; i<=n; i++) { ***


for (j=1; j<=i; j++) {
****
printf("*");
} *****
printf("\n"); 30
Nested if Statement inside Loop
/* day1: Sun is 1, Mon is 2, ..., Sat is 7 */
/* days: number of days in month */
void display_month(int day1, int days) {
int i;
printf(" Sun Mon Tue Wed Thu Fri Sat\n");
for (i=1; i<day1; i++)
printf(" "); /* spaces before day1 */
for (i=1; i<=days; i++) {
printf("%4d", i); /* print day number */
outer for loop

if ((day1+i-1)%7 == 0){ /* end of week */


nested if

printf("\n");
}
}
printf("\n\n");
} 31
Displaying a Month
display_month(7, 30); /* function call
*/

Sun Mon Tue Wed Thu Fri Sat


1
2 3 4 5 6 7 8 Output
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 32
The do-while Statement
• The for and while statements evaluate the loop
condition before the execution of the loop body
• The do-while statement evaluates the loop
condition after the execution of the loop body
• Syntax:
do
statement; /* Can be compound */
while (loop repetition condition) ;
• The do-while must execute at least one time
33
Using do-while to Repeat Program
int main() {
. . . /* Variable Declarations */
char ch; /* User response [y/n] */

do {
. . . /* Execute program */
printf("Repeat again [y/n]? ");
ch = getch(); /* read from keyboard */
printf("%c\n", ch); /* display character */
} while (ch=='y'|| ch=='Y');
}
34
in /* get integer value between min and max */
g int get_int (int min, int max) {
int inval; /* input value between min and max */
do int status; /* returned by scanf */

- int error;
char ch;
/* error flag for bad input */
/* character input to skip */
wh do {
printf("Enter integer from %d to %d> ", min, max);
il status = scanf("%d", &inval);

e error = 1;
if (status == 0)
/* set error flag */
/* faulty input */
to printf("Invalid character %c\n", getchar());
printf("Skipping rest of line.\n");
Va else if (inval < min || inval > max)

lid printf("Number %d is out of range\n", inval);


else error = 0; /* clear error flag */
at do ch = getchar();
while (ch != '\n'); /* skip to end-of-line */
e } while (error);

In }
return inval;
35
Next . . .
• Repetition in Programs
• Counting loops
• The while statement
• The for statement
• Conditional Loops
• Nested Loops
• The do-while statement
• Common Programming Errors
36
Off-by-One Loop Errors
• A common logic error
• A loop executes one more time or one less time
• Example:
for (count = 0; count <= n; ++count)
sum += count; Executes n + 1 times

for (count = 1; count < n; ++count)


sum += count; Executes n – 1 times
• Checking loop boundaries
– Initial and final values of the loop control variable
37
Common Programming Errors (1/2)
• Do not confuse if and while statements
– if statement implements a decision step
– while statement implements a loop
• for loop: remember to end the initialization step
and the loop repetition condition with semicolon (;)
• Remember to use braces { and } around a loop body
consisting of multiple statements
• Remember to provide a prompt for the user, when
using a sentinel-controlled loop
• Make sure the sentinel value cannot be confused
with a normal data input 38
Common Programming Errors (2/2)
• Use do-while only when there is no possibility of
zero loop iterations
• Do not use increment, decrement, or compound
assignment as sub-expressions in complex expressions
a *= b + c; /* a = a*(b+c); */
There is no shorter way to write: a = a*b + c;
• Be sure that the operand of an increment/decrement
operator is a variable:
z = ++j * k--; /* ++j; z=j*k; k--; */
39

You might also like