You are on page 1of 30

Chapter 4 - Program Control

Outline
4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 4.11
4.12

Introduction The Essentials of Repetition Counter-Controlled Repetition The For Repetition Structure The For Structure: Notes and Observations Examples Using the For Structure The Switch Multiple-Selection Structure The Do/While Repetition Structure The break and continue Statements Logical Operators Confusing Equality (==) and Assignment (=) Operators Structured Programming Summary

2000 Prentice Hall, Inc. All rights reserved.

4.1

Introduction

Should feel comfortable writing simple C programs In this chapter


Repetition, in greater detail Logical operators for combining conditions Principles of structured programming

2000 Prentice Hall, Inc. All rights reserved.

4.2
Loop

The Essentials of Repetition

Group of instructions computer executes repeatedly while some condition remains true

Counter-controlled repetition
Definite repetition - know how many times loop will execute Control variable used to count repetitions

Sentinel-controlled repetition
Indefinite repetition Used when number of repetitions not known Sentinel value indicates "end of data"

2000 Prentice Hall, Inc. All rights reserved.

4.3

Essentials of Counter-Controlled Repetition

Counter-controlled repetition requires


name of a control variable (or loop counter). initial value of the control variable. condition that tests for the final value of the control variable (i.e., whether looping should continue). increment (or decrement) by which the control variable is modified each time through the loop.

2000 Prentice Hall, Inc. All rights reserved.

4.3

Essentials of Counter-Controlled Repetition (II)

Example:
int counter =1; //initialization while (counter <= 10){ //repetition condition printf( "%d\n", counter ); ++counter; //increment }

int counter = 1; names counter, declares it to be an integer, reserves space for it in memory, and sets it to an initial value of 1

2000 Prentice Hall, Inc. All rights reserved.

4.4

The for Repetition Structure

Format when using for loops


for ( initialization; loopContinuationTest; increment ) statement
Example:
for( int counter = 1; counter <= 10; counter++ ) No printf( "%d\n", counter );

Prints the integers from one to ten.

semicolon after last expression

2000 Prentice Hall, Inc. All rights reserved.

4.4

The for Repetition Structure (II)

For loops can usually be rewritten as while loops:


initialization;
while ( loopContinuationTest){ statement increment; }

Initialization and increment


Can be comma-separated lists
for (int i = 0, j = 0; j + i <= 10; j++, i++) printf( "%d\n", j + i );

2000 Prentice Hall, Inc. All rights reserved.

The For Structure: Notes and Observations Arithmetic expressions


Initialization, loop-continuation, and increment can contain arithmetic expressions. If x = 2 and y = 10
for ( j = x; j <= 4 * x * y; j += y / x ) is equivalent to for ( j = 2; j <= 80; j += 5 )

4.5

"Increment" may be negative (decrement) If loop continuation condition initially false


Body of for structure not performed Control proceeds with statement after for structure

2000 Prentice Hall, Inc. All rights reserved.

4.5

The For Structure: Notes and Observations (II)

Control variable
Often printed or used inside for body, but not necessary

For flowcharted like while

2000 Prentice Hall, Inc. All rights reserved.

1 2 3 4 5 6 7 8 9 10 11 12 13 14

/* Fig. 4.5: fig04_05.c Summation with for */ #include <stdio.h> int main() { int sum = 0, number; for ( number = 2; number <= 100; number += 2 ) sum += number; printf( "Sum is %d\n", sum ); return 0;

Outline
4.6 Examples Using the for Structure Program to sum the even numbers from 2 to 100

15 } Sum is 2550

Program Output

2000 Prentice Hall, Inc. All rights reserved.

4.7

The switch Multiple-Selection Structure

switch
Useful when a variable or expression is tested for all the values it can assume and different actions are taken.

Format
Series of case labels and an optional default case switch ( value ){
case '1':
actions

case '2':
actions

default:
actions

break; causes exit from structure


2000 Prentice Hall, Inc. All rights reserved.

4.7

The switch Multiple-Selection Structure (II)

case a
false

true

case a action(s)

break

case b false . . .

true

case b action(s)

break

case z false default action(s)

true

case z action(s)

break

2000 Prentice Hall, Inc. All rights reserved.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32

/* Fig. 4.7: fig04_07.c Counting letter grades */ #include <stdio.h> int main() { int grade; int aCount = 0, bCount = 0, cCount = 0, dCount = 0, fCount = 0; printf( printf( "Enter the letter grades.\n" ); "Enter the EOF character to end input.\n"

Outline

1. Initialize variables 2. Input data 2.1 Use switch loop to update count

);

while ( ( grade = getchar() ) != EOF ) { switch ( grade ) { case 'A': case 'a': ++aCount; break; case 'B': case 'b': ++bCount; break; case 'C': case 'c': ++cCount; break; /* switch nested in while */ /* grade was uppercase A */ /* or lowercase a */

/* grade was uppercase B */ /* or lowercase b */

/* grade was uppercase C */ /* or lowercase c */

case 'D': case 'd': /* grade was uppercase D */ ++dCount; /* or lowercase d */ 2000 Prentice Hall, Inc. All rights reserved. break;

33 34 case 'F': case 'f': /* grade was uppercase F */

Outline

35
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 } }

++fCount;
break;

/* or lowercase f */

case '\n': case' ': break;

/* ignore these in input */

2.1 Use switch loop to update count 3. Print results

default:

/* catch all other characters */

printf( "Incorrect letter grade entered." ); printf( " Enter a new grade.\n" ); break;

printf( "\nTotals for each letter grade are:\n" ); printf( "A: %d\n", aCount ); printf( "B: %d\n", bCount ); printf( "C: %d\n", cCount ); printf( "D: %d\n", dCount ); printf( "F: %d\n", fCount );

return 0;

56 } 2000 Prentice Hall, Inc. All rights reserved.

Enter the letter grades. Enter the EOF character to end input. A B C C A D F C E Incorrect letter grade entered. Enter a new grade. D A B Totals for each letter grade are: A: 3 B: 2 C: 3 D: 2 F: 1

Outline

Program Output

2000 Prentice Hall, Inc. All rights reserved.

4.8

The do/while Repetition Structure

The do/while repetition structure


Similar to the while structure

Condition for repetition tested after the body of the loop is performed
All actions are performed at least once

Format:

do { statement } while ( condition );

Good practice to put brackets in, even if not required

2000 Prentice Hall, Inc. All rights reserved.

4.8

The do/while Repetition Structure (II)

Example (letting counter = 1)


do { printf( "%d ", counter ); } while (++counter <= 10);

Prints the integers from 1 to 10

2000 Prentice Hall, Inc. All rights reserved.

4.8

The do/while Repetition Structure (III)

action(s)

true condition false

2000 Prentice Hall, Inc. All rights reserved.

1 2 3 4 5 6

/* Fig. 4.9: fig04_09.c Using the do/while repetition structure */ #include <stdio.h>

Outline

1. Initialize variable
int main() {

2. Loop
int counter = 1;

7
8 9 10 11 12 13 14 }

3. Print
do { printf( "%d ", counter );

} while ( ++counter <= 10 );

return 0;

10

Program Output

2000 Prentice Hall, Inc. All rights reserved.

4.9

The break and continue Statements

break
Causes immediate exit from a while, for, do/while or switch structure Program execution continues with the first statement after the structure Common uses of the break statement
Escape early from a loop Skip the remainder of a switch structure

2000 Prentice Hall, Inc. All rights reserved.

4.9

The break and continue Statements (II)


Skips the remaining statements in the body of a while, for or do/while structure
Proceeds with the next iteration of the loop

continue

while and do/while


Loop-continuation test is evaluated immediately after the continue statement is executed

for structure
Increment expression is executed, then the loop-continuation test is evaluated

2000 Prentice Hall, Inc. All rights reserved.

1 2 3 4 5 6 7 8

/* Fig. 4.12: fig04_12.c Using the continue statement in a for structure */ #include <stdio.h> int main() { int x;

Outline

1. Initialize variable 2. Loop 3. Print

9
10 11 12 13 14 15 16 17 18 19

for ( x = 1; x <= 10; x++ ) {


if ( x == 5 ) continue; /* skip remaining code in loop only if x == 5 */ printf( "%d ", x ); } printf( "\nUsed continue to skip printing the value 5\n" ); return 0;

20 }

1 2 3 4 6 7 8 9 10 Used continue to skip printing the value 5

Program Output

2000 Prentice Hall, Inc. All rights reserved.

4.10 Logical Operators


&& (logical AND)
Returns true if both conditions are true

|| (logical OR)
Returns true if either of its conditions are true

! (logical NOT, logical negation)


Reverses the truth/falsity of its condition Unary operator, has one operand

Useful as conditions in loops


Expression true && false true || false !false Result false true true

2000 Prentice Hall, Inc. All rights reserved.

4.11

Confusing Equality (==) and Assignment (=) Operators

Dangerous error
Does not ordinarily cause syntax errors Any expression that produces a value can be used in control structures Nonzero values are true, zero values are false

Example:
if ( payCode == 4 ) printf( "You get a bonus!\n" );
Checks paycode, if it is 4 then a bonus is awarded

2000 Prentice Hall, Inc. All rights reserved.

4.11

Confusing Equality (==) and Assignment (=) Operators (II)

Example, replacing == with =:


if ( payCode = 4 )

printf( "You get a bonus!\n" ); This sets paycode to 4 4 is nonzero, so expression is true, and bonus awarded no matter what the paycode was Logic error, not a syntax error

2000 Prentice Hall, Inc. All rights reserved.

4.11

Confusing Equality (==) and Assignment (=) Operators (III)

lvalues
Expressions that can appear on the left side of an equation Their values can be changed, such as variable names
x = 4;

rvalues
Expressions that can only appear on the right side of an equation Constants, such as numbers
Cannot write 4 = x;

lvalues can be used as rvalues, but not vice versa y = x;

2000 Prentice Hall, Inc. All rights reserved.

4.12 Structured-Programming Summary Structured programming


Easier than unstructured programs to understand, test, debug and, modify programs

Rules for structured programming


Rules developed by programming community Only single-entry/single-exit control structures are used Rules:
1) Begin with the simplest flowchart 2) Any rectangle (action) can be replaced by two rectangles (actions) in sequence. 3) Any rectangle (action) can be replaced by any control structure (sequence, if, if/else, switch, while, do/while or for). 4) Rules 2 and 3 can be applied in any order and multiple times.

2000 Prentice Hall, Inc. All rights reserved.

4.12 Structured-Programming Summary (II)


Rule 1 - Begin with the simplest flowchart Rule 2 - Any rectangle can be replaced by two rectangles in sequence

Rule 2

Rule 2

Rule 2

. . .

2000 Prentice Hall, Inc. All rights reserved.

4.12 Structured-Programming Summary (III)


Rule 3 - Replace any rectangle with a control structure

Rule 3

Rule 3

Rule 3

2000 Prentice Hall, Inc. All rights reserved.

4.12 Structured-Programming Summary (IV)


All programs can be broken down into 3 parts
Sequence - trivial Selection - if, if/else, or switch Repetition - while, do/while, or for
Any selection can be rewritten as an if statement, and any repetition can be rewritten as a while statement

Programs are reduced to


Sequence if structure (selection) while structure (repetition)
The control structures can only be combined in two ways- nesting (rule 3) and stacking (rule 2)

This promotes simplicity


2000 Prentice Hall, Inc. All rights reserved.

You might also like