Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 Flow of Control True and False in C Conditional Execution Iteration Nested Code(Nested-ifs, Nested-loops) Jumps.

Similar presentations


Presentation on theme: "1 Flow of Control True and False in C Conditional Execution Iteration Nested Code(Nested-ifs, Nested-loops) Jumps."— Presentation transcript:

1 1 Flow of Control True and False in C Conditional Execution Iteration Nested Code(Nested-ifs, Nested-loops) Jumps

2 2 True and False in C False is represented by any zero value. –The int expression having the value 0. –The floating expression having the value 0.0. –The null character ‘\0’. –The NULL pointer (for pointer see chap. 8). True is represented by any nonzero value. A logical expression, such as a<b, is either true or false. –This expression yields the int value 1 if it is true or the int value 0 if it is false.

3 3 Examples int i=1, j=2, k=3; double x=5.5, y=7.7, z=0.0; i<j-ki<(j-k)0 -i+5*j>=k+1((-i)+(5*j))>=(k+1)1 x-y<=j-k-1 (x-y)<=((j-k)-1)1 x+k+7<y/k ((x+k)+7)<(y/k)0 i!=j1 !!5 !(!5)1 !i-j+4 ((!i)-j)+4 2 x||i&&j-2 x||(i&&(j-2))1

4 4 Selection if switch

5 5 if statement Conditional Execution: if (Boolean expression) statement; else statement; Where a statement may consist of a single statement, a code block, or empty statement. The else clause is optional.

6 6 if – logic:if (Boolean Expression) statement_1; If-else-logic: if (Boolean Expression){ compound_1 } else{ compound_2 }; Conditional execution allows you write code that reacts to tested conditions. No Semi-colon Yes- For a Semi-colon

7 7 Example #include int main ( ) { double salary, payrate; int hours, union; printf (“Please enter hours worked, payrate”, “ and union status”);

8 8 printf (“Enter 1 if a union member, 0 if not”); scanf (“%d%lf%d”, &hours, &payrate, &union); if (hours > 40 && union = = 1) salary = (40 * payrate) + ((1.5 * payrate) * (hours - 40)); else salary = payrate * hours; printf (“Salary is: $ % 6.2 f”, salary); }

9 9 Nested ifs Nested:One statement coded within another statement. Nested ifs:An nested if is an if that is the target of another if or else. Why Nested ifs?A simple - if and if - else statement are used to handle 2-choice tasks. Nested ifs:Needed to handle tasks where we have 3 or More options that are mutually exclusive. ANSI C specifies that at least 15 levels of nesting must be supported by the compiler.

10 10 The if-else-if ladder General form: OLD STYLE if (expression) statement; else if (expression) statement; else if (expression) statement;... else statement;

11 11 The conditions are evaluated from the top downward. As soon as a true condition is found, the statement associated with it is executed and the rest of the ladder is bypassed. If none of the conditions are true, the final else is executed. That is, if all other conditional tests fail, the last else statement is performed. If the final else is not present, no action takes place if all other conditions are false.

12 12 E.g. You are a salesperson for the Widget Manufacturing Co. You will earn a salary bonus according to the following rules: Sales > = $50,000earn $5,000 Sales > = $100,000 earn $15,000 Sales > = $150,000earn $30,000 Example

13 13 double sales, bonus; printf (“please enter total sales”); scanf (“%lf”, &sales); if (sales < 50000) bonus = 0; else if (sales < 100000) bonus = 5000; else if (sales < 150000) bonus = 15000; else bonus = 30000;

14 14 In a nested if, an else always refers to the nearest if that is within the same block as the else and that is not already associated with an else. if(i) { if(j) dosomething1(); if(k) dosomething2(); /* this if */ else dosomething3(); /* goes with this else */ } else dosomething4(); /* associated with if(i) */

15 15 Conditional Expression The expressions must simply evaluate to either a true or false (zero or nonzero) value. The expressions are not restricted to involving the relational and logical operators.

16 16 x = 10; y = x>9 ? 100 : 200; x = 10; if(x>9) y = 100; else y = 200; The ?: Alternative Exp1 ? Exp2: Exp3

17 17 #include int f1(int n); int f2(void); int main(void) { int t; printf("Enter a number: "); scanf("%d", &t); t ? f1(t) + f2() : printf("zero entered."); printf("\n"); return 0; }

18 18 /* Divide the first number by the second. */ #include int main(void) { int a, b; printf("Enter two numbers: "); scanf(''%d%d", &a, &b); if(b) printf("%d\n", a/b); else printf("Cannot divide by zero.\n"); return 0; } if(b != 0) printf("%d\n", a/b);

19 19 switch statement switch is a multiple-branch selection statement, which successively tests the value of an expression against a list of integer or character constants (floating point expression, for example, are not allowed). When a match is found, the statements associated with that constant are executed.

20 20 General Form switch (expression) { case constant1: statement sequence break; case constant2: statement sequence break;.. default statement sequence } //ANSI C allowed at least 257 case statements.

21 21 Execution The value of the expression is tested against the constants specified in the case statements in a top-down order.. When a match is found, the statement sequence associated with that case is executed until the break statement or the end of the switch statement is reached. When break is encountered in a switch, program execution "jumps" to the line of code following the switch statement. The default statement is executed if no matches are found. The default is optional.

22 22 The switch differs from the if in that switch can only test for equality, whereas if can evaluate any type of relational or logical expression. No two case constants in the same switch can have identical values. Of course, a switch statement enclosed by an outer switch may have case constants that are in common. If character constants are used in the switch statement, they are automatically converted to integers (as is specified by C's type conversion rules).

23 23 The switch statement is often used to process keyboard commands, such as menu selection. The following function will when called: display the options, allow the user to make a selection, and then evoke the appropriate function to perform the task selected. void menu(void) { char ch; printf("1. Check Spelling\n"); printf(''2. Correct Spelling Errors\n"); printf("3. Display Spelling Errors\n"); printf("Strike Any Other Key to Skip\n"); printf(" Enter your choice: "); ch = getchar(); /* read the selection from the keyboard */

24 24 switch(ch) { case '1': check_spelling (); break; case '2': correct_errors (); break; case '3': display_errors (); break; default : printf("No option selected"); } }

25 25 int flag, k; /* Assume k is initialized */ flag = -1; switch(k) { case 1: /* These cases have common */ case 2: /* statement sequences. */ case 3: flag = 0; break; case 4: flag = 1; case 5: error(flag); break; default: process(k); } The break inside the switch is optional. If the break is omitted, execution will continue on into the next case until either a break or the end of the switch is reached.

26 26 Nested Switch You can have a switch as a part of the statement sequence of an outer switch. Even if the case constants of the inner and the outer switch contain common values, no conflict arise.

27 27 switch(x) { case 1: switch(y) { case 0: printf(''Divide by zero error.\n"); break; case 1: process(x, y); break; } break; case 2: ….

28 28 Iteration Iteration statements (also called loops) allow a set of instructions to be repeatedly executed until a certain condition is reached. This condition may be predetermined (as in the for and while loop) or open ended (as do-while loops).

29 29 for loop General form for (initialization; testing; increment) Loop Body; The initialization is an assignment statement that is used to set the loop control variable. The testing is a relational expression that determines when the loop exits. The increment defines how the loop control variable changes each time the loop is repeated.

30 30 Execution The for loop continues to execute as long as the condition is true. Once the condition becomes false, program execution resumes on the statement following the body of the for loop.

31 31 #include int main(void) { int x; for(x=1; x <= 100; x++) printf("%d ", x); return 0; } for(x=100; x != 65; x -= 5) { z = x*x; printf(''The square of %d, %d", x, z); }

32 32 The Elements of the For-loop The initialization, testing and incrementation can be any valid C expression. for (x=0; Ajax>Manchester; Ajax=Q*7/i) Common use as a counting loop. for (count=0; count <n; count=count+1)

33 33 Pieces of the loop definition need not be there. The incrementation of the loop control variable can occur outside the for statement. for(x=0; x != 123; ) scanf("%d", &x); for( x=1 ; x < 10; ) { printf("%d", x); ++x; }

34 34 The Infinite Loop Since none of the three expressions that form the for loop are required, you can make an endless loop by leaving the conditional expression empty. for( ; ; ) printf("This loop will run forever.\n"); for( ; ; ) { ch = getchar(); /* get a character */ if(ch == 'A') break; /* exit the loop */ } printf("you typed an A"); Terminate the infinite loop

35 35 For Loops With No Bodies A loop body may be empty. This fact is used to simplify the coding of certain algorithms and to create time delay loops. Does what? for(t=0; t < SOME_VALUE; t++) ;

36 36 Declaring Variables within a For Loop A variable so declared has its scope limited to the block of code controlled by that statement. /* i is local to for loop; j is known outside loop.*/ int j; for(int i = 0; i<10; i++) j = i * i; i = 10; /*** Error ***-- i not known here! */

37 37 While Loop General form: while(condition) statement; Execution: –Check the test condition at the top of the loop. –The loop iterates while the condition is true. –When the condition becomes false, program control passes to the line of code immediately following the loop.

38 38 Example char wait_for_char(void) { char ch; ch = '\0'; /* initialize ch */ while(ch != 'A') ch = getchar(); return ch; } while((ch=getchar()) != 'A') ;

39 39 Example 2: void func1() {int process1(void); int process2(void); int process3(void); int working; working = 1; while (working) { working = process1(); if (working) working = process2(); if (working) working = process3(); } }

40 40 For loop Vs While Loop A-(Assignment), T-(testing), I-(Increment) for (A; T; I) { Body; } A; While (T) { Body; I; }

41 41 NESTED LOOPS Nested1 loop syntax coded inside another Loop syntax. Why? - Single -Loop?Have a statement or statements that you want to repeat. A repetitive task that you must solve. Why? - Nested - Loops? You have a single - repetitive task - THAT YOU MUST REPEAT i.e., a repetition of an already repetitive task.

42 42 General Format: while (boolean expression){ } You may have any combination of the 3 loop syntax inside each other. The problem dictates what combination should be used.

43 43 /* Find triples of integers that add up to n. */ #include #define N 7 main() { int cnt = 0, j, k, m; for(j = 0; j <= N; ++j) for( k = 0; k <= N; ++k) for( m = 0: m <= N; ++m) if ( j + k + m == N) { ++cnt; printf(“%d%d%d”, j, k, m); } printf(“\n Count: %d\n”, cnt); }

44 44 How many times will “if” be executed? 512 timesj range 07 k range 07 m range 07 8 * 8 * 8 = 512

45 45 What will the values of j, k, and m be in sequence? j k m 0 0 0 0 0 1 0 0 2 0 0 7 0 1 0 0 1 1 0 1 2 0 1 7

46 46 0 2 0 0 2 1 0 2 7 Cont.........

47 47 do-while Loop General form: do { statement; } while(condition); Execution: –Always executes at least once. –Iterates until condition becomes false. do { scanf(''%d", &num); } while(num > 100);

48 48 The most common use of the do-while loop is in a menu selection function. void menu(void) { char ch; printf("1. Check Spelling\n"); printf("2. Correct Spelling Errors\n"); printf("3. Display Spelling Errors\n"); printf(" Enter your choice: ");

49 49 do { ch = getchar(); /* read the selection from the keyboard */ switch(ch) { case '1': check_spelling(); break; case '2': correct_errors(); break; case '3': display_errors(); break; } } while(ch=='1' || ch=='2' || ch=='3'); }

50 50 Jump break continue return (will be introduced in Ch. 4, Functions).

51 51 break Statement Two uses: You can use it to terminate a case in the switch statement. You can also use it to force immediate termination of a loop, bypassing the normal loop conditional test. #include int main (void) { int t; for(t=0; t < 100; t++) { printf(''%d ", t); if(t == 10) break; } return 0; } 0 1 2 3 4 5 6 7 8 9 10

52 52 A break causes an exit from only the innermost loop. for(t=0; t < 100; ++t) { count = 1; for(;;) { printf(''%d ", count); count++; if(count == 10) break; } } 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 … 100 times

53 53 Breaking out of loops Sometimes loops need to be cut short: –You can break out of any loop with break ; statement. –A break will cause the loop to be aborted immediately. –The next statement executed is the statement following the loop. Compare this with return: –A return will cause a function to be aborted immediately. –Control returns to the calling function.

54 54 continue Statement General form continue; break forces termination of the loop. continue forces the next iteration of the loop to take place, skipping any code in between.

55 55 continue can expedite the exit from a loop by forcing the conditional test to be performed sooner. –For the for loop, continue causes the increment and then the conditional test portions of the loop to execute. –For the while and do-while loops, program control passes to the conditional tests.

56 56 void code(void) { char done, ch; done = 0; while(!done) { ch = getchar(); if(ch == ‘S') { done = 1; continue;} /* test the condition now */ putchar(ch+1); }} This function codes a message by shifting all characters you type one letter higher. For example, an A becomes a B. The function will terminate when you type a S.


Download ppt "1 Flow of Control True and False in C Conditional Execution Iteration Nested Code(Nested-ifs, Nested-loops) Jumps."

Similar presentations


Ads by Google