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

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

    20-Dec-2015
  • Category

    Documents

  • view

    229
  • download

    3

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

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

1

Flow of Control

True and False in C

Conditional Execution

Iteration

Nested Code(Nested-ifs, Nested-loops)

Jumps

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

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.

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

3

Examplesint i=1, j=2, k=3;

double x=5.5, y=7.7, z=0.0;

i<j-k i<(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!=j 1

!!5 !(!5) 1

!i-j+4 ((!i)-j)+4 2

x||i&&j-2 x||(i&&(j-2)) 1

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

4

Selection

• if

• switch

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

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.

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

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

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

7

Example

#include <stdio.h>

int main ( )

{

double salary, payrate;

int hours, union;

printf (“Please enter hours worked, payrate”,

“ and union status”);

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

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);

}

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

9

Nested ifsNested: 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.

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

10

The if-else-if ladder

• General form: OLD STYLEif (expression) statement;

else   if (expression) statement;    else      if (expression) statement;       .       .       .       else statement;

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

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.

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

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,000 earn $5,000

Sales > = $100,000 earn $15,000

Sales > = $150,000 earn $30,000

Example

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

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;

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

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) */

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

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.

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

16

x = 10;y = x>9 ? 100 : 200;

x = 10;

if(x>9) y = 100;

else y = 200;

The ?: Alternative

Exp1 ? Exp2: Exp3

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

17

#include <stdio.h>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;}

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

18

/* Divide the first number by the second. */#include <stdio.h>

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);

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

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.

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

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.

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

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.

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

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).

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

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 */

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

24

 switch(ch) {    case '1':      check_spelling ();      break;

    case '2':      correct_errors ();      break;

    case '3':      display_errors ();      break;

    default :      printf("No option selected");  }}

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

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.

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

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.

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

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:    ….

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

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).

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

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.

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

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.

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

31

#include <stdio.h>

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);}

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

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)

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

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;}

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

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

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

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++) ;

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

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! */

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

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.

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

38

Example

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

while((ch=getchar()) != 'A') ;

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

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();  }}

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

40

For loop Vs While LoopA-(Assignment), T-(testing), I-(Increment)

for (A; T; I){

Body;}

A;

While (T)

{

Body;

I;

}

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

41

NESTED LOOPS

Nested 1 loop syntax coded inside anotherLoop 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.

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

42

General Format:while (boolean expression){

while (boolean expression) {

}

}

You may have any combination of the 3 loop syntax inside each other. The problem dictates what combination should be used.

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

43

/* Find triples of integers that add up to n. */#include <stdio.h>#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); }

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

44

How many times will “if” be executed?

512 timesj range 0 7

k range 0 7

m range 0 7

8 * 8 * 8 = 512

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

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

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

46

0 2 0

0 2 1

0 2 7

Cont...

.

.

.

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

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);

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

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: ");

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

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');}

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

50

Jump

• break

• continue

• return (will be introduced in Ch. 4,

Functions).

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

51

break Statement

Two uses:You can use it to terminate a case in the switchstatement.

You can also use it to force immediate termination of a loop, bypassing the normal loop conditional test.

#include <stdio.h>

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

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

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

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

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.

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

54

continue Statement

• General formcontinue;

• break forces termination of the loop.

• continue forces the next iteration of the loop to take place, skipping any code in between.

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

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.

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

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.