46
1 Looping

Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

1

Looping

Page 2: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

2

Loops

n Group of statements that are executed repeatedly while some condition remains true

n Each execution of the group of statements is called an iteration of the loop

Page 3: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

3

Example

Read 5 integers and display their sum

counter ← 1, sum ← 0

counter < 6

sum ← sum + n

false

true

counter = counter + 1

output sum

input n

Page 4: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

4

Given an exam marks as input, display the appropriate message based on the rules below:q If marks is greater than 49, display

“PASS”, otherwise display “FAIL”q However, for input outside the 0-100

range, display “WRONG INPUT” and prompt the user to input again until a valid input is entered

Example

Page 5: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

5

false

true

input m

m<0 || m>100

m>49 “PASS”

“FAIL”

true

false

“WRONG INPUT”

input m

Page 6: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

6

false

true

input m

m<0 || m>100

m>49 “PASS”

“FAIL”

true

false

“WRONG INPUT”

input m

Page 7: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

7

Looping: while statement

while (expression)statement;

while (expression) {Block of statements;

}

The condition to be tested is any expression enclosed in parentheses. The expression is evaluated, and if its value is non-zero, the statement is executed. Then the expression is evaluated again and the same thing repeats. The loop terminates when the expression evaluates to 0.

Page 8: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

8

Looping: while statement

while (expression)statement;

while (expression) {Block of statements;

}

expression

statement(loop body)

False

True

Page 9: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

9

Looping: while statement

while (expression)statement;

while (expression) {Block of statements;

}

expression

statement(loop body)

False

True

The condition to be tested is any expression enclosed in parentheses. The expression is evaluated, and if its value is non-zero, the statement is executed. Then the expression is evaluated again and the same thing repeats. The loop terminates when the expression evaluates to 0.

Page 10: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

10

Example

int i = 1, n;scanf(“%d”, &n);while (i <= n) {

printf (“Line no : %d\n”,i);i = i + 1;

}

Page 11: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

11

Example

int weight;

scanf(“%d”, &weight);

while ( weight > 65 ) {

printf ("Go, exercise, ");

printf ("then come back. \n");

printf ("Enter your weight: ");

scanf ("%d", &weight);

}

Page 12: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

12

Sum of first N natural numbersvoid main() {

int N, count, sum;scanf (“%d”, &N) ;sum = 0;count = 1;while (count <= N) {

sum = sum + count;count = count + 1;

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

}

Page 13: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

13

SUM = 12 + 22 + 32 + …+ N2

void main() {int N, count, sum;scanf (“%d”, &N) ;sum = 0;count = 1;while (count <= N) {

sum = sum + count * count;count = count + 1;

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

}

Page 14: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

14

Compute GCD of two numbersvoid main() {

int A, B, temp;scanf (“%d %d”, &A, &B);if (A > B) {

temp = A; A = B; B = temp; }while ((B % A) != 0) {

temp = B % A;B = A;A = temp;

}printf (“The GCD is %d”, A);

}

12 ) 45 ( 3

36

9 ) 12 ( 1

9

3 ) 9 ( 3

9

0

Initial: A=12, B=45Iteration 1: temp=9, B=12,A=9Iteration 2: temp=3, B=9, A=3

B % A = 0 è GCD is 3gcd.c

Page 15: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

15

Double your moneyn Suppose your Rs 10000 is earning interest at

1% per month. How many months until you double your money ?

void main() {

double my_money = 10000.0;

int n=0;

while (my_money < 20000.0) {

my_money = my_money * 1.01;

n++;

}

printf (“My money will double in %d months.\n”,n);

}

Page 16: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

16

Maximum of positive Numbers

void main() {double max = 0.0, next;printf (“Enter positive numbers, end with 0 or a negative number\n”);scanf(“%lf”, &next);while (next > 0) {

if (next > max) max = next;scanf(“%lf”, &next);

} printf (“The maximum number is %lf\n”, max) ;

}

Page 17: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

17

Find the sum of digits of a numbervoid main(){

int n, sum=0;scanf (“%d”, &n);while (n != 0) {

sum = sum + (n % 10);n = n / 10;

}printf (“The sum of digits of the number is %d \n”, sum);

}digit-sum.c

Page 18: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

18

n Most commonly used looping structure in C

Looping: for Statement

for ( expr1; expr2; expr3) statement;

for ( expr1; expr2; expr3) {Block of statements;

}

expr1 (init) : initialize parameters

expr2 (test): test condition, loop continues if expression is non-0

expr3 (update): used to alter the value of the parameters after each iteration

statement (body): body of loop

Page 19: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

19

expr1(init)

expr2(test)

statement(body)

expr3(update)

False

True

Page 20: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

20

Example: Computing Factorial

void main () {int N, count, prod;scanf (“%d”, &N) ;prod = 1;for (count = 1;count <= N; ++count)

prod = prod * count;printf (“Factorial = %d\n”, prod) ;

}

Page 21: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

21

Computing ex series up to N terms

void main () {

float x, term, sum;

int n, count;

scanf (“%f”, &x);

scanf (“%d”, &n);

term = 1.0; sum = 0;

for (count = 1; count < n; ++count) {

sum += term;

term *= x/count;

}

printf (“%f\n”, sum);

}

eseries-1.c

Page 22: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

22

Computing ex series correct up to 4 decimal places

void main () {float x, term, sum;int cnt;scanf (“%f”, &x) ;term = 1.0; sum = 0; for (cnt = 1; term >= 0.0001; ++cnt) {

sum += term;term *= x/cnt;

}printf (“%f\n”, sum) ;

}

eseries-2.c

Page 23: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

23

expr1;while (expr2) {

statementexpr3;

}

Equivalence of for and while

for ( expr1; expr2; expr3) statement;

Same as

Page 24: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

24

void main () {int N, count, sum;scanf (“%d”, &N) ;sum = 0;count = 1;while (count <= N) {

sum = sum + count;count = count + 1;

}printf (“%d\n”, sum) ;

}

void main () {int N, count, sum;scanf (“%d”, &N) ;sum = 0;for (count=1; count <= N; ++count)

sum = sum + count;printf (“%d\n”, sum) ;

}

Sum of first N Natural Numbers

Page 25: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

25

Some observations on for

n Initialization, loop-continuation test, and update can contain arithmetic expressions

for ( k = x; k <= 4 * x * y; k += y / x )n Update may be negative (decrement)

for (digit = 9; digit >= 0; --digit)n If loop continuation test is initially 0 (false)

¨ Body of for structure not performedn No statement executed

¨ Program proceeds with statement after forstructure

Page 26: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

26

Looping: do-while statement

do statement;

while (expression);

do {Block of statements;

} while (expression);

statement

expression

False

True

Page 27: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

27

Example

Problem: Prompt user to input “month” value, keep prompting until a correct value of month is given as input

do {printf (“Please input month {1-12}”);scanf (“%d”, &month);

} while ((month < 1) || (month > 12));

Page 28: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

28

Decimal to binary conversion (prints binary in reverse order)void main() {

int dec;scanf (“%d”, &dec);do{

printf (“%2d”, (dec % 2));dec = dec / 2;

} while (dec != 0);printf (“\n”);

}

Page 29: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

29

Echo characters typed on screen until end of linevoid main () {

char echo ;do {

scanf (“%c”, &echo);printf (“%c”,echo);

} while (echo != ‘\n’) ;}

Page 30: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

30

Specifying “Infinite Loop”

while (1) {statements

}

for (; ;){

statements}

do {statements

} while (1);

Page 31: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

31

The break Statement

n Break out of the loop body { }¨can use with while, do while, for, switch¨does not work with if, else

n Causes immediate exit from a while, do/while, for or switch structure

n Program execution continues with the first statement after the structure

Page 32: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

32

An Example

void main() {int fact, i;fact = 1; i = 1;while ( i<10 ) {/* run loop –break when fact >100*/

fact = fact * i;if ( fact > 100 ) {

printf ("Factorial of %d above 100", i);break; /* break out of the while loop */

}++i;

}}

Page 33: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

33

Test if a number is prime or notvoid main() {

int n, i=2;scanf (“%d”, &n);while (i < n) {

if (n % i == 0) {printf (“%d is not a prime \n”, n);break;

}++i;

}if (i == n) printf (“%d is a prime \n”, n);

}

Page 34: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

34

More efficient??void main() {

int n, i = 2, flag = 0;double limit;scanf (“%d”, &n);limit = sqrt(n);while (i <= limit) {

if (n % i == 0) {printf (“%d is not a prime \n”, n);flag = 1; break;

}i = i + 1;

}if (flag == 0) printf (“%d is a prime \n”, n);

}

Page 35: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

35

The continue Statementn Skips the remaining statements in the body of

a while, for or do/while structure ¨Proceeds with the next iteration of the loop

n while and do/while loop¨Loop-continuation test is evaluated

immediately after the continue statement is executed

n for loop¨expr3 is evaluated, then expr2 is evaluated

Page 36: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

36

An Example with break and continuevoid main() {

int fact = 1, i = 1;while (1) {

fact = fact * i;++i;if ( i <=10 )

continue; /* not done yet ! Go to loop and perform next iteration*/

break;}

}

Page 37: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

37

Some Loop Pitfalls

while (sum <= NUM) ;sum = sum+2;

for (i=0; i<=NUM; ++i);sum = sum+i;

for (i=1; i!=10; i=i+2)sum = sum+i;

double x;for (x=0.0; x<2.0; x=x+0.2)

printf(“%.18f\n”, x);

Page 38: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

38

Nested Loops: Printing a 2-D Figuren How would you print the following

diagram?* * * * * * * * * * * * * * *

repeat 3 timesprint a row of 5 *’s

repeat 5 timesprint *

Page 39: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

39

Nested Loopsconst int ROWS = 3;const int COLS = 5;...row = 1;while (row <= ROWS) {

/* print a row of 5 *’s */

...++row;

}

row = 1;while (row <= ROWS) {

/* print a row of 5 *’s */col = 1;while (col <= COLS) {

printf (“* “);col++;

}printf(“\n”);++row;

}

outerloop

innerloop

Page 40: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

40

2-D Figure: with for loop

Print* * * * * * * * * * * * * * *

const int ROWS = 3;const int COLS = 5;....for (row=1; row<=ROWS; ++row) {

for (col=1; col<=COLS; ++col) {printf(“* ”);

}printf(“\n”);

}

Page 41: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

41

Another 2-D Figure

Print* * * * * * * * * ** * * * *

const int ROWS = 5;....int row, col;for (row=1; row<=ROWS; ++row) {

for (col=1; col<=row; ++col) {printf(“* ”);

}printf(“\n”);

}

2d-figure.c

Page 42: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

42

Yet Another One

Print* * * * *

* * * * * * *

* **

const int ROWS = 5;....int row, col;for (row=0; row<ROWS; ++row) {

for (col=1; col<=row; ++col)printf(" ");

for (col=1; col<=ROWS-row; ++col)printf("* ");

printf ("\n");}

Page 43: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

43

break and continue with nested loops

n For nested loops, break and continue are matched with the nearest loops (for, while, do-while)

n Example:while (i < n) {

for (k=1; k < m; ++k) {if (k % i == 0) break;

}i = i + 1;

}Breaks here

Page 44: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

44

Examplevoid main(){

int low, high, desired, i, flag = 0;scanf(“%d %d %d”, &low, &high, &desired);i = low;while (i < high) {

for (j = i+1; j <= high; ++j) {if (j % i == desired) {

flag = 1;break;

}}if (flag == 1) break;i = i + 1;

}}

Breaks here

Breaks here

Page 45: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

45

The comma operatorn Separates expressionsn Syntax

expr-1, expr-2, …,expr-n¨ expr-1, expr-2,…are all expressions

n Is itself an expression, which evaluates to the value of the last expression in the sequence

n Since all but last expression values are discarded, not of much general use

n But useful in for loops, by using side effects of the expressions

Page 46: Looping - Indian Institute of Technology Kharagpurpds/semester/2018a/slides/Lect... · 2018-08-12 · Looping: whilestatement while (expression) statement; while (expression) {Block

46

Examplen We can give several expressions separated by

commas in place of expr1 and expr3 in a for loop to do multiple assignments for example

for (fact=1, i=1; i<=10;++ i)fact = fact * i;

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