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

Post on 20-Dec-2015

239 views

Category:

Documents


3 download

TRANSCRIPT

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.