1 Chapter 3 Flow of Control. 2 Outline How to specify conditions? Relational, Equality and Logical...

Preview:

Citation preview

1

Chapter 3Flow of Control

2

OutlineHow to specify conditions?

Relational, Equality and Logical OperatorsStatements

Statements: compound statement and empty statement

Select among alternative actionsThe if and if-else statementThe switch statementsThe conditional Operator

Achieve iterative actionsThe while statementThe for statementThe do statementThe break and continue statements

Nested Flow of Control

3

The switch Statement

multiway conditional statementGeneral form:

switch ( switch_exp ){ case constant_exp1: statements;

break; // optional

... case constant_expn: statements;

break; // optional default:

statements; break;

}

//optional

4

The switch Statement

The effect of a switch: Evaluate the switch_exp. Go to the case label having a constant value

that matches the value of the switch_exp.If a match is not found, go to the default

label. If there is no default label, terminate the

switch. Terminate the switch when a break

statement is encountered, or by “falling off the end”.

5

The switch Statement

switch ( switch_exp ){ case constant_exp1: statements;

break; // optional case constant_exp2 : statements; case constant_exp3 : statements; …../* no break */case constant_expi : statements;

break;……case constant_expn: statements;

break; // optional ……}Next statement;

6

The switch Statement

switch ( switch_exp ){ case constant_exp1: statements;

break; // optional ……case constant_expi : statements;

break;……case constant_expn: statements;

break; // optional default:

statements; break;

}Next statement;

7

The switch Statement

switch ( switch_exp ){ case constant_exp1: statements;

break; // optional ……case constant_expi : statements;

break;……case constant_expn: statements;

break; // optional }Next statement;

8

The switch StatementExample

#include <stdio.h>int main(void){ int x; x= 3; switch ( x ) { case 1: printf("case 1\n"); case 2: printf("case 2\n"); break; case 3: printf("case 3\n"); case 4: printf("case 4\n"); case 5: printf("case 5\n"); break; case 6: printf("case 6\n"); break; default: break; } return 0;}

% gcc switch.c% a.outcase 3case 4case 5

9

The switch StatementExample

#include <stdio.h>int main(void){ int x; x= 3; switch ( x ) { case 1: printf("case 1\n"); case 2: printf("case 2\n"); break; case 3: printf("case 3\n"); break; case 4: printf("case 4\n"); break; case 5: printf("case 5\n"); break; case 6: printf("case 6\n"); break; default: break; } return 0;}

% gcc switch.c% a.outcase 3

10

The switch StatementExample

#include <stdio.h>int main(void){ int x; x= 3; switch ( x+2 ) { case 1: printf("case 1\n"); case 2: printf("case 2\n"); break; case 3: printf("case 3\n"); break; case 4: printf("case 4\n"); break; case 5: printf("case 5\n"); break; case 6: printf("case 6\n"); break; default: break; } return 0;}

% gcc switch.c% a.outcase 5

11

The switch Statement

Rules: The expression in the parentheses following

the keyword switch ( switch_exp) must be of integer type.

The constant expression following the case labels must bean integer constant unique

12

The switch StatementExample

The expression in the parentheses following the keyword switch must be of integer type.

#include <stdio.h>int main(void){ doulbe x; x= 3; switch ( x ) { case 1: printf("case 1\n"); case 2: printf("case 2\n"); break; case 3: printf("case 3\n"); break; default: break; } return 0;}

% gcc switch1.cswitch1.c: In function `main':switch1.c:6: error: switch quantity not an integer%

13

The switch StatementExample

The constant expression following the case labels must be

an integer constant.

#include <stdio.h>int main(void){ int x; x= 3; switch ( x ) { case 1.0: printf("case 1.0\n"); case 2: printf("case 2\n"); break; case 3: printf("case 3\n"); break; default: break; } return 0;}

% gcc switch2.cswitch2.c: In function `main':switch2.c:8: error: case label does not reduce to an integer constant

14

The switch StatementExample

The constant expression following the case labels must all be unique

#include <stdio.h>int main(void){ int x; x= 3; switch ( x ) { case 1: printf("case 1\n"); case 1: printf("Another case 1\n"); break; case 2: printf("case 2\n"); break; default: break; } return 0;}

% gcc switch3.cswitch3.c: In function `main':switch3.c:9: error: duplicate case valueswitch3.c:8: error: previously used here

15

The switch Statement

Summary The switch is a multiway conditional statement.

Evaluate the switch_exp.Go to the case label having a constant value

that matches the value of the switch_exp.o If a match is not found, go to the default label. o If there is no default label, terminate the switch.

Terminate the switch when a break statement is encountered, or by “falling off the end”.

switch_exp must be of integer type case expressions must be of integer type and

must all be unique

16

OutlineHow to specify conditions?

Relational, Equality and Logical OperatorsStatements

Statements: compound statement and empty statement

Select among alternative actionsThe if and if-else statementThe switch statementsThe conditional Operator

Achieve iterative actionsThe while statementThe for statementThe do statementThe break and continue statements

Nested Flow of Control

17

The Conditional Operator ?:

The general form of a conditional expression: expr1? expr2: expr3

Semantics: First, expr1 is evaluated. If it is nonzero (true), then expr2 is

evaluated, and this is the value of the conditional expression as a whole.

If expr1 is zero (false), then expr3 is evaluated, and this is the value of the conditional expression as a whole.

18

The Conditional Operator ?:

Examples: expr1? expr2: expr3 x=(y<z) ? y : z;

19

The Conditional Operator ?:

Precedence and Associativity Precedence

Just above the assignment operators Associativity:

Right to left

…….

+ - Left to right

< <= > >= left to right

== != Left to right

….. ……

?: Right to left

= += -= *= /= etc. Right to left

20

The Conditional Operator ?:

Examples:

int a=1, b=2;double x=7.07;

a == b ? a-1 : b+1…….

+ - LR

< <= > >= LR

== != LR

….. ……

?: RL

= += -= *= /= etc.

RL

( ) ( () )

a - b < 0 ? x : a + b( ) ( )

a - b > 0 ? x : a + b( ) ( )

( )

)(

21

The Conditional Operator ?:

Summary: General form: expr1? expr2: expr3 Semantics:

First, expr1 is evaluated.If it is nonzero (true), then expr2 is

evaluated, and this is the value of the conditional expression as a whole.

If expr1 is zero (false), then expr3 is evaluated, and this is the value of the conditional expression as a whole.

Precedence: Just above the assignment operators

Associativity: Right to left

22

OutlineHow to specify conditions?

Relational, Equality and Logical OperatorsStatements

Statements: compound statement and empty statement

Select among alternative actionsThe if and if-else statementThe switch statementsThe conditional Operator

Achieve iterative actionsThe while statementThe for statementThe do statementThe break and continue statements

Nested Flow of Control

23

The if and if-else Statement

Summary

exp is enclosed by parentheses Where appropriate, compound statements

should be used to group a series of statements under the control of a single if expression

An if or if-else statement can be used as the statement part of another if or if-else statement.an else attaches to the nearest if.

If (expr) statement1

elsestatement2

If (expr) statement1

24

The switch Statement

Summary The switch is a multiway conditional statement.

Evaluate the switch_exp.Go to the case label having a constant value

that matches the value of the switch_exp.o If a match is not found, go to the default label. o If there is no default label, terminate the switch.

Terminate the switch when a break statement is encountered, or by “falling off the end”.

switch_exp must be of integer type case expressions must be of integer type and

must all be unique

25

The Conditional Operator ?:

Summary: General form: expr1? expr2: expr3 Semantics:

First, expr1 is evaluated.If it is nonzero (true), then expr2 is

evaluated, and this is the value of the conditional expression as a whole.

If expr1 is zero (false), then expr3 is evaluated, and this is the value of the conditional expression as a whole.

Precedence: Just above the assignment operators

Associativity: Right to left

26

OutlineHow to specify conditions?

Relational, Equality and Logical OperatorsStatements

Statements: compound statement and empty statement

Select among alternative actionsThe if and if-else statementThe switch statementsThe conditional Operator

Achieve iterative actionsThe while statementThe for statementThe do statementThe break and continue statements

Nested Flow of Control

27

The while Statement

General formwhile (expr)

StatementNext statement

First expr is evaluated. If expr is nonzero (true), then statement is

executed and control is passed back to the beginning of the while loop. Statement is repeatedly until expr is zero

(false) Then control passes to next statement.

28

The while Statement

#include <stdio.h>int main(void){ int sum=0, i=1;

while(i<=3){ sum=sum+i; i=i+1; }

printf(“Sum=%d\n”,sum); return 0;}

expression: i<=3Relational operator <=This expression yields

1(true) or 0(false)

statement:sum=sum+i;i=i+1;

A group of statements enclosed between { and }.

29

The while Statement

#include <stdio.h>int main(void){ int sum=0, i=1;

while(i<=3){ sum=sum+i; i=i+1; }

printf(“Sum=%d\n”,sum); return 0;}

sum=0i=1

sum=1i=2

exp (i<=3): (1<=3)=trueStatements are executed

sum=sum+i=0+1=1i=i+1=1+1=2exp (i<=3): (2<=3)=true

Statements are executed

sum=sum+i=1+2=3i=i+1=2+1=3

sum=3i=3 exp (i<=3): (3<=3)=true

Statements are executed

sum=sum+i=3+3=6i=i+1=3+1=4

sum=6i=4

exp (i<=3): (4<=3)=false while statement is done

30

The while statement

The while statement

First expr is evaluated. If expr is nonzero (true), then statement is

executed and control is passed back to the beginning of the while loop.

Statement is repeatedly until expr is zero (false)

Then control passes to next statement.

while (expr)statement;

next statement

31

OutlineHow to specify conditions?

Relational, Equality and Logical OperatorsStatements

Statements: compound statement and empty statement

Select among alternative actionsThe if and if-else statementThe switch statementsThe conditional Operator

Achieve iterative actionsThe while statementThe for statementThe do statementThe break and continue statements

Nested Flow of Control

32

The for Statement

General form

Typically:expr1 is used to initialize the loop.expr2 is a logical expression controlling the

iteration.expr3 updates the variables used in expr2.

for(expr1; expr2; expr3){ statement } next statement

33

The for Statement

Semantics: First expr1 is evaluated. Then expr2 is evaluated.

If expr2 is nonzero (true), o then statement is executed,o expr3 is evaluatedo control passes back to the beginning of the for

loop again, except that evaluation of expr1 is skipped.

The process continues until expr2 is zero (false), at which point control passes to next statement.

for(expr1; expr2; expr3){

statement

} next statement

34

The for Statement

Semantically equivalent to

expr1; while(expr2){ statement expr3; } next statement

for(expr1; expr2; expr3){ statement } next statement

35

The for Statement

Example

for (expr1; expr2; expr3)statement

Next statement

#include <stdio.h>int main(){ int k=14; int j; for (j=2; j<=k; ++j) { if (k % j == 0) printf("%d is a divisor of %d \n", j, k); } return 0;}

What is the output?

2 is a divisor of 147 is a divisor of 14

14 is a divisor of 14

36

The for Statement

Note 1 for (expr1; expr2; expr3)

Semicolons are needed Example:

for ( i=0, i<n, i+=3)sum +=i;

Incorrect

for (expr1; expr2; expr3)statement

Next statement

37

The for Statement

Note 2 Any of all of the expressions in a for statement

can be missing, but the two semicolons must remain.If expr1 is missing, no initialization step is

performed as part of the for loopWhen expr2 is mission, the rule is that the

test is always true.

for (expr1; expr2; expr3)statement

Next statement

38

The for Statement

Example of Note 2: expr1 is missing

No initialization step is performed as part of the for loop

i = 1;sum = 0;for (; i<=10; ++i)

sum +=i;

for (expr1; expr2; expr3)statement

Next statement

What the value of sum after the for loop?

39

The for Statement

Example of Note 2: expr2 is missing

The test is always true.

i = 1;sum = 0;for (; ; ++i)

sum +=i;

for (expr1; expr2; expr3)statement

Next statement

How many iterations?

infinity

40

The for Statement

Note 3 A for statement can be used as the statement

part of an if, if-else, while or another for statement

for (expr1; expr2; expr3)statement

Next statement

for (expr1; expr2; expr3)for(……)

for(……)Next statement

for (expr1; expr2; expr3)while(……)

if ……else……

Next statement

41

The for Statement

Example of note 3

for (expr1; expr2; expr3)statement

Next statement

#include <stdio.h>int main(){ int k=14; int j; for (j=2; j<=k; ++j) { if (k % j == 0) printf("%d is a divisor of %d \n", j, k); } return 0;}

42

The for Statement — Comma Operator

Example

Initialize two variablessum, i

sum=0;for (i=1; i<=n; ++i)

sum+=i;

Can we put the initialization of these two variables in one expression?

43

The for Statement — Comma Operator

The Comma Operator General Form: expr1, expr2

expr1 is evaluated first, then expr2.The comma expression as a whole has the

values and type of its right operand.

44

The for Statement — Comma Operator

The Comma Operator Precedence : lowest Associativity: left to right Example

a=0,b=1o Value of this expression: 1o Type: int

45

The for Statement — Comma Operator

The Comma Operator Comma operator can be used for

multiple initialization and multiple processing of indices in for statement

sum=0;for (i=1; i<=n; ++i)

sum+=i;

for (sum=0, i=1; i<=n; ++i)sum+=i;

for (sum=0, i=1; i<=n; sum +=i, ++i)

;

46

The for Statement — Comma Operator

Exampleint i, j, k=3;double x = 3.3

i = 1 , j = 2 , ++ k + 1

k != 7 , ++ x * 2.0 + 1

Precedence : lowest Associativity: left to right

( ) ( ) ( )( )

( )( )( )( )

47

The for Statement

Summary The for Statement

The Comma Operator: expr1, expr2o expr1 is evaluated first, then expr2.o The comma expression as a whole has

the values and type of its right operand.

for (expr1; expr2; expr3)

statementNext statement

48

OutlineHow to specify conditions?

Relational, Equality and Logical OperatorsStatements

Statements: compound statement and empty statement

Select among alternative actionsThe if and if-else statementThe switch statementsThe conditional Operator

Achieve iterative actionsThe while statementThe for statementThe do statementThe break and continue statements

Nested Flow of Control

49

The do Statement

General formdo

statementwhile (expr);Next statement

Typically, expr is a logical expression controlling the iteration.

50

The do Statement

Semantics First statement is executed, and expr is

evaluated. If the value of expr is nonzero (true),

then control passes back to the beginning of the do statement, and process repeats itself.

When expr is zero (false), then control passes to next statement

do

statementwhile (expr);Next statement

51

The do Statement

Example Suppose we want to read in an integer and

want to insist that the integer be positive.

do

statementWhile (expr);Next statement

do { printf(“Input a positive integer: “); scanf(“%d”, &n); if(error = (n<=0))

printf(“\n ERROR: Negative value not allowed!\n\n”);} while (error);

52

OutlineHow to specify conditions?

Relational, Equality and Logical OperatorsStatements

Statements: compound statement and empty statement

Select among alternative actionsThe if and if-else statementThe switch statementsThe conditional Operator

Achieve iterative actionsThe while statementThe for statementThe do statementThe break and continue statements

Nested Flow of Control

53

The Break and Continue Statements

How to interrupt the normal flow of control? An exit from the innermost enclosing loop or switch

statement Causes the current iteration of a loop to stop and the

next iteration to begin immediately.

while (expr){

statement1;

Statement2;

Statement2;}next statement

54

The Break and Continue Statements

break statement An exit from the innermost enclosing

loop (such as a while loop) statement or switch statement

55

The Break and Continue Statementsbreak in a switch statement:

switch ( switch_exp ){ case constant_exp1: statements;

break; // optional case constant_exp2 : statements;

break; // optional ... case constant_expn: statements;

break; // optional default:

statements; break;

}Next statement;

//optional

56

The Break and Continue Statementsbreak in a while statement

Example:A test for a negative argument is made,

and if the test is true, a break statement is used to pass control to the statement immediately following the loop.

while(1){scanf(“%1f”, &x);if(x<0.0)

break;printf(“%f\n”, sqrt(x));

}/* break jumps to hear */

57

The Break and Continue Statements

continue statement Causes the current iteration of a loop to

stop and the next iteration to begin immediately.

while(exp){statements;continue; /* maybe in some if-statement*/

/* or switch statement */statements;

/* continue transfers control here to begin next iteration */}

58

The Break and Continue Statements

Example Disregard small input value (-0.01 < x < 0.01).

while(cnt<n){scanf(“%1f”, &x);if(-0.01<x && x< +0.01)

continue;++cnt;sum += x;

/* continue transfers control here to begin next iteration */}

59

OutlineHow to specify conditions?

Relational, Equality and Logical OperatorsStatements

Statements: compound statement and empty statement

Select among alternative actionsThe if and if-else statementThe switch statementsThe conditional Operator

Achieve iterative actionsThe while statementThe for statementThe do statementThe break and continue statements

Nested Flow of Control

60

Achieve iterative actions

The while statement

First expr is evaluated. If expr is nonzero (true), then statement is

executed and control is passed back to the beginning of the while loop.

Statement is repeatedly until expr is zero (false)

Then control passes to next statement.

while (expr)statement;

next statement

61

Achieve iterative actions

The for Statement First expr1 is evaluated. Then expr2 is evaluated.

If expr2 is nonzero (true), o then statement is executed,o expr3 is evaluatedo control passes back to the beginning of the for

loop again, except that evaluation of expr1 is skipped.

The process continues until expr2 is zero (false), at which point control passes to next statement.

for(expr1; expr2; expr3){

statement

} next statement

62

Achieve iterative actions

The do Statement

First statement is executed, and expr is evaluated.

If the value of expr is nonzero (true), then control passes back to the beginning of the do statement, and process repeats itself.

When expr is zero (false), then control passes to next statement

do

statementwhile (expr);Next statement

63

Achieve iterative actions

break statement An exit from the innermost enclosing loop or

switch statement

continue statement Causes the current iteration of a loop to stop

and the next iteration to begin immediately.

64

OutlineHow to specify conditions?

Relational, Equality and Logical Operators

Statements Statements: compound statement and empty

statement Select among alternative actions

The if and if-else statementThe switch statementsThe conditional Operator

Achieve iterative actionsThe while statementThe for statementThe do statement

Nested Flow of Control

65

Nested Flow of Control

Flow-of-control statement if, if-else switch for while do

66

Nested Flow of Control

switch ( switch_exp ){ case constant_exp1: statements;

break; // optional case constant_exp2 : statements;

break; // optional ... case constant_expn: statements;

break; // optional default:

statements; break;

}

//optional

if (expr) statement1

elsestatement2

if (expr) statement1

67

Nested Flow of Control

while (expr)statement;

next statement

for(expr1; expr2; expr3){ statement } next statement

dostatement

while (expr); Next statement

68

Nested Flow of Control

Flow-of-control statements can be nested within themselves and within one another.

Exampleif (expr)

statement1else

statement2if (expr) statement1

elsestatement2if (expr)

statement1else

statement2

69

OutlineHow to specify conditions?

Relational, Equality and Logical Operators

Statements Statements: compound statement and empty

statement Select among alternative actions

The if and if-else statementThe switch statementsThe conditional Operator

Achieve iterative actionsThe while statementThe for statementThe do statement

Nested Flow of Control

70

Chapter 3: Flow of Control

End of Chapter 3: Flow of Control

Recommended