Presentation is loading. Please wait.

Presentation is loading. Please wait.

ECE 103 Engineering Programming Chapter 18 Iteration Herbert G. Mayer, PSU CS Status 7/19/2015 Initial content copied verbatim from ECE 103 material developed.

Similar presentations


Presentation on theme: "ECE 103 Engineering Programming Chapter 18 Iteration Herbert G. Mayer, PSU CS Status 7/19/2015 Initial content copied verbatim from ECE 103 material developed."— Presentation transcript:

1 ECE 103 Engineering Programming Chapter 18 Iteration Herbert G. Mayer, PSU CS Status 7/19/2015 Initial content copied verbatim from ECE 103 material developed by Professor Phillip Wong @ PSU ECE

2 Syllabus Basic Loops while do-while for break, continue Examples

3 2 Basic Loops Loops are another method of changing the execution sequence of a program, by iterating A loop is a section of code that is executed repeatedly as long as a condition remains true Once the expression becomes false (fails), the program ends the loop In C one can “hand-manufacture” loops via Goto Statements, viewed as sinfully evil; that is how a computer executes loops, by so-called “branch” or “jump” instructions

4 3 Setup expression post-codeStatements TRUE FALSE Typical loops require these operations: Setup Test expression evaluation Update pre-code Exit loop Stay in loop Each single pass through a loop is called an iteration

5 4 A loop consists of several parts:  Setup Before entering the loop, any values referenced by the test expression should be initialized.  Test expression evaluation An expression is tested to see if it is true or false. true: Repeat the body of the loop false: Exit the loop  Body The body contains the code that is to be repeated. It can be a single statement or a statement block.  Update Within the loop, there should be a way to update the test expression so that it will fail eventually.

6 5 Test expression must evaluate to either true (non-zero) or false (zero) Test expression is evaluated every iteration – either at the start or end of the loop The test is also called the termination condition An infinite loop occurs if the termination condition is never satisfied

7 6 Loop Statements in C General loop types:  Conditional loops Statements are repeated for as long as a test expression remains true. → while, do-while  Counted loops Statements are repeated a specified number of times. → for

8 7 while pre-code; while (expression) Statement; post-code; Use if the number of iterations is not known ahead of time Variables in expression must be initialized before entering the loop Loop body may be executed 0 or more times Note that the Statement may be a compound statement { } Execution Sequence a)Execute pre-code b)At start of loop, evaluate expression c)If expression is true Execute Statement Goto Step (b) else Exit the loop and goto Step (d) d)Execute post-code

9 8 Example: k = 0; while( k < 5 ) k = k + 1; // not recommended style of while k = 0; while( k < 5 ) { k = k + 1; printf( "k = %d\n", k ); } //end while num = 0; while( num < 5 ) { printf( "num = %d\n", num++ ); } //end while z = 5; while( z-- ) printf( "z = %d\n", z ); // not recommended style, no { } #include int main (void) { // main int num; /* Input from user */ int sum = 0; /* Running sum */ int Done = 0; /* Flag */ /* This adds up numbers > 0 */ while( !Done ) { printf( "Enter next number: ” ); scanf("%d", &num); if ( num < 1 ) Done = 1; else sum += num; // not recommended style of if } //end while printf( "sum = %d\n", sum ); return 0; } //end main

10 9 Example: // Echo an input stream ( capitalized, 'S' replaced by '$’ ) #include int main( void ) { // main int ch; /* Holds input character */ /* Read input stream until end-of-line is detected */ while( ( ch = getchar() ) != '\n' ) { ch = toupper( ch ); if( ch == 'S' ) ch = '$'; printf( "%c", ch ); } //end while printf( "\n” ); return 0; } //end main My sister is funny! MY $I$TER I$ FUNNY!

11 10 do-while pre-code; do Statement; while (expression); post-code; The do-while loop tests the expression at the end Hence will be done at least once! Note semicolon after ending parenthesis, as that is the end of the do- while statement Execution Sequence a)Execute pre-code b)Enter the loop and execute Statement c)At end of loop, evaluate expression d)If expression is true Goto Step (b) else Exit the loop and goto Step (e) e)Execute post-code

12 11 Example: k = 0; do k = k + 1; while( k < 5 ); k = 0; do { k = k + 1; printf( "k = %d\n", k ); } while( k < 5 ); #include int main( void ) { // main int num; /* Input from user */ int sum = 0; /* Running sum */ int Done = 0; /* Flag */ /* This adds up numbers > 0 */ do { printf( "Enter next number: ” ); scanf( "%d", &num ); if( num < 1 ) // not recommended! Done = 1; else sum += num; } while( !Done ); printf( "sum = %d\n", sum ); return 0; } //end main

13 12 for pre-code; for (expr1; expr2; expr3) Statement; post-code; Often used if the number of iterations is known ahead of time. Loop body may be executed zero or more times Execution Sequence expr1 → setup expression expr2 → test expression expr3 → update expression a)Execute pre-code b)At start of loop, evaluate expr1 c)If expr2 is true Execute Statement Evaluate expr3 Goto Step (c) else Exit the loop and goto Step (d) d)Execute post-code

14 13 Mapping between simple for and while loops: for( expr1; expr2; expr3 ) { Statements ; } expr1 ; /* Setup */ while( expr2 ) /* Test */ { Statements ; expr3 ; /* Update */ }

15 14 Example: for( k=0; k<=3; k++ )... → 4 iterations, values of k : 0, 1, 2, 3 for( t=1; t<11; t+=2 )... → 5 iterations, values of t : 1, 3, 5, 7, 9 for( x=1.0; x<=2.0; x+=0.5 )... → 3 iterations, values of x : 1.0, 1.5, 2.0 // careful “float” for( cnt = 2; cnt >= -1; cnt-- )... → 4 iterations, values of cnt : 2, 1, 0, -1 for( ;; ) → Infinite loop: expr2 is never false!

16 15 Be careful counting iterations, especially when starting at 0, or using < versus <= in expressions! Example: for( k=1; k<=5; k++ )... → 5 iterations, values of k : 1, 2, 3, 4, 5 for( k=1; k<5; k++ )... → 4 iterations, values of k : 1, 2, 3, 4 for( k=0; k<=5; k++ )... → 6 iterations, values of k : 0, 1, 2, 3, 4, 5 for( k=0; k<5; k++ )... → 5 iterations, values of k : 0, 1, 2, 3, 4

17 16 Example: for( n = 1; n < 5; n++ ) printf( "n = %d\n", n ); for( n = 1; n < 5; ++n ) printf( "n = %d\n", n ); for( n = 1; n < 5; ) printf( "n = %d\n", n++ ); s_idx = 2; e_idx = 4; for( n = s_idx; n <= e_idx; n++ ) { x = exp( n ); printf( "%d %f\n", n, x ); } //end for for( T = 10; T >= 0; T-- ) x = sin( T*pi / 180.0 ); prod = 1; for( a = 1; a <= 3; a++ ) prod = prod * a; #1 : a → 1 prod = 1 * 1 → 1 #2 : a → 2 prod = 1 * 2 → 2 #3 : a → 3 prod = 2 * 3 → 6 for( ch='A'; ch<='Z'; ch++ ) printf( "%c", ch ); /* infinite loop */ for( ;; ) printf( "Hello\n” );

18 17 Variable Declarations in for Loops Variable declarations are allowed in the first expression of the for loop header. Typically used to declare the iteration variable Note: NOT in old versions of C! The scope of the variable extends only to the body of the loop /* C90 version */ #include int main( void ) { // main int k; for( k = 0; k < 3; k++ ) printf("%d\n", k); // end for printf( "%d\n", k ); /* Works */ return 0; } //end main // C99 version #include int main( void ) { // main // This is legal in C99 for( int k = 0; k < 3; k++ ) printf("%d\n", k); // end for // Compiler fails on this k printf( "%d\n", k ); return 0; } //end main C99

19 18 break Statement break causes an immediate exit from the loop that contains it; note: innermost loop! Once a break is encountered, execution goes to the first statement following the loop body break statements work with for, while, and do-while loops

20 19 Example: /* Use a state variable */ done = 0; /* State */ sum = 0; while( !done ) { printf( "x? ” ); scanf( "%d", &x ); sum = sum + x; if( sum > 1000 ) done = 1; } //end while /* Use a break statement */ #define TRUE 1 sum = 0; while( TRUE ) { printf( "x? ” ); scanf( "%d", &x ); sum = sum + x; if( sum > 1000 ) break; } //end while

21 20 continue Statement The continue statement restarts a loop Once a continue is encountered, execution proceeds to the start of the loop continue statements work with for, while, and do-while loops. If continue is used in a for statement, the setup expression is not executed again

22 21 Example: #include #define TRUE 1 int main (void) { // main float x; /* Input value */ float sum = 0.0; /* Accumulates partial sums */ while( TRUE ) { scanf( "%f\n", &x ); if( x 95.0 ) // Check for outside range continue; sum += x; if( sum > 250.0 ) /* Check if sum limit is reached */ break; } //end while printf( "sum = %f\n", sum ); return 0; } //end main


Download ppt "ECE 103 Engineering Programming Chapter 18 Iteration Herbert G. Mayer, PSU CS Status 7/19/2015 Initial content copied verbatim from ECE 103 material developed."

Similar presentations


Ads by Google