Presentation is loading. Please wait.

Presentation is loading. Please wait.

ECE 103 Engineering Programming Chapter 18 Iteration

Similar presentations


Presentation on theme: "ECE 103 Engineering Programming Chapter 18 Iteration"— Presentation transcript:

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

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

3 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 Typical loops require these operations:
pre-code Setup Test expression evaluation Update Setup Stay in loop TRUE Statements expression FALSE Update Each single pass through a loop is called an iteration Exit loop post-code

5 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 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 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 6

8 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 Execute pre-code At start of loop, evaluate expression If expression is true Execute Statement Goto Step (b) else Exit the loop and goto Step (d) Execute post-code

9 Example: k = 0; while( k < 5 ) k = k + 1;
// not recommended style of while while( k < 5 ) { printf( "k = %d\n", k ); } //end while num = 0; while( num < 5 ) { printf( "num = %d\n", num++ ); z = 5; while( z-- ) printf( "z = %d\n", z ); // not recommended style, no { } #include <stdio.h> 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 8

10 Example: // Echo an input stream ( capitalized, 'S' replaced by '$’ )
#include <stdio.h> #include <ctype.h> 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 = '$'; } //end if printf( "%c", ch ); } //end while printf( "\n” ); return 0; } //end main My sister is funny! MY $I$TER I$ FUNNY! 9

11 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 Execute pre-code Enter the loop and execute Statement At end of loop, evaluate expression If expression is true Goto Step (b) else Exit the loop and goto Step (e) Execute post-code

12 Example: k = 0; do k = k + 1; while( k < 5 ); do {
printf( "k = %d\n", k ); } while( k < 5 ); #include <stdio.h> 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 11

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

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

15 → Infinite loop: expr2 is never false!
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! 14

16 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 15

17 Example: for( n = 1; n < 5; n++ ) 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 / ); 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” ); 16

18 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 C99 /* C90 version */ #include <stdio.h> 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 <stdio.h> 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 17

19 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 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 // assuming sum, x declared sum = 0; while( TRUE ) { printf( "x? ” ); scanf( "%d", &x ); sum = sum + x; if( sum > 1000 ) break; } //end while 19

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


Download ppt "ECE 103 Engineering Programming Chapter 18 Iteration"

Similar presentations


Ads by Google