4: control flow - amazon s3 · 4: control flow a. orlitsky and a. vardy, based in part on slides by...

69
ECE15: Introduction to Computer Programming Using the C Language 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad

Upload: others

Post on 13-Jul-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

ECE15: Introduction to Computer Programming Using the C Language

4: Control Flow

A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad

Page 2: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

Outline❖ Conditionals ‣ if ‣ if-else ‣ switch-case ‣ conditional

❖ Loops ‣ while ‣ do-while ‣ for ‣ Nested loops

❖ Jumps ‣ break ‣ continue ‣ goto

‣ MacrosLecture 4 ECE15: Introduction to Computer Programming Using the C Language 2

So far: Straight-line calculation Always do same thing

Almost calculator No programing

About to get interesting

Page 3: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

if

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language 3

If expression is: True (≠0) False (=0)

if (expression) statement;

0

expression

statement

≠0

Often, compound statementif (n%4 != 0) {

printf("Not divisible by 4\n"); printf("Remainder is %d\n", n%4); }

statement executedstatement skipped, next statement executed

if (balance < 0)

printf("Chapter 11");

if (response == 'y')

printf("Account emptied");

Examples if (x<0) x=-x; printf("|x|=%d", x);

x *=-1;

if (n%4) {

absolute1.c

Page 4: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

if-else

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language 4

if (expression) statement1;

else statement2;

if (rainy == ‘y’) printf("Umbrella"); else printf("Shorts");

expression

st1

0≠0

st2

if expression is True

False

Examples

statement1 executed, statement2 skipped

statement2 executed, statement1 skipped

printf("|x|="); if (x>0) printf("%d", x); else printf("%d", -x);

if (n%2==1) printf("Odd"); else printf("Even");

if (n%2)

if (x>y) printf("%d>%d",x,y); else printf("%d<=%d",x,y);

ifelse.c

Page 5: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

❖ Saw rounding:

‣ towards 0 (truncation)

‣ to nearest for positive numbers

❖ What about negative numbers?

Roundoff Revisited

r = (int) (x+.5);

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language5

if (x>0) r = (int) (x+.5); else r = (int) (x-.5);

➧ 3

➧ 2

➧ 3

(int) (3.4)➧

(int) (2.9)➧

(int) (3.0)➧

üüü

r = (int) x;

2.9

2.4

2.5

➧ -1(int) (-1.8)➧ ✘-2.3

(int) (2.9+.5)➧

(int) (2.4+.5)➧

(int) (2.5+.5)➧

(int) (-2.3+.5)➧

➧ -2(int) (-2.8)➧ ü-2.3 (int) (-2.3-.5)➧

➧ -3(int) (-3.0)➧ ü-2.5 (int) (-2.5-.5)➧

Page 6: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

if-else-if Chains

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language 6

-1x == 0

0

False True

False Truex < 0

1

sign(x)= {1, x>0

0, x=0

-1, x<0

if (x < 0) printf("-1"); else if (x == 0) printf("0"); else printf("1");

sign.c

0-1 1

Page 7: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

Indentation

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language 7

if (a < 0) printf("-1"); else if (a == 0) printf("0"); else if (a < 11) printf("1"); else printf("2");

if (a < 0) printf("-1"); else if (a == 0) printf("0"); else if (a < 11) printf("1"); else printf("2");

Helps clarify structure of if-else-if chains

Two common conventions

Both well-established

Second more compact

Page 8: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

Interpreting Nested if-else

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language 8

Which if does else belong to?

if (a==1) if (b==2) printf("***"); else printf("###");

***

###

if (a==1) if (b==2) printf("***"); else printf("###");

else belongs to last else-less if

if (a==1) { if (b==2) printf("***"); } else printf("###");

a b

1 ≠1

2

≠2

*** ###

###

a b

1 ≠1

2

≠2

Can modify using {...}:

Page 9: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

Quiz

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language 9

int i=0; if (i++==0) printf("First check"); else printf("First increment");

First check

int i=0; if (++i==0) printf("First check"); else printf("First increment");

First increment

increment-check.c

Page 10: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

switch

switch (expression) {

case value1: statements break; // optional case value2: statements break; // optional ...

default: statements // optional }

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language 10

❖ Executes one or more of several options

Integer constant (incl. char)

❖ expression compared to value1, value2,... till a match

❖ If match: execution starts at case, continues till break, or closing brace }

❖ If no match: default executed, if no default, nothing executed

Integer (incl. char)

❖ Cases can only be integers (incl. char), not double, float

can be several cases, and if no break, also default: “fall-through”

Page 11: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

Poco Españolint i;

printf("Dame un nombre positivo: "); scanf("%d", &i);

switch(i) { case 3: printf("es tres\n"); break; case 1: printf("es uno\n"); break; case 5: printf("es cinco\n"); break; case 2: printf("es dos\n"); break; case 4: printf("es quatro\n"); break; default: printf("es muy grande!\n"); }

espanol1,2,3.c

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language 11

Hey. Wrong language!

This is a C class! Besides, nombre

means name!

numero xxxxxx

What if remove breaks?

What if remove default?

Printed only if no other match

Page 12: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

Calculator

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language 12

int x, y; char operation; … scanf("%d % %d", &x,&operation, &y); switch (operation) { case '+': printf("Result is: %d", x + y); break; //what if we remove it? case '-': printf("Result is: %d", x - y); break;

... // code for '*' and '/' and '%'

default: printf("Invalid operation!"); }

calculator.c

Page 13: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

❖ What does the following program do?int i; printf("Start at: "); scanf("%d", &i);

switch(i) { case 1: printf("1 "); case 2: printf("2 "); case 3: printf("3 "); case 4: printf("4 "); case 5: printf("5\n"); break; default: printf("Too big or too small :-(\n"); }

Fall-through

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language 13

What if remove break?

Can be done with if

Can be done with if-else

Much easier with loops!

count25.c

Asks for first integer i Prints i i+1 … 5 or too big/small

Page 14: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

Switch vs. if-else

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language

❖ Switch with all breaks can be implemented using if, else if

14

switch(i) { case 7: printf("Lucky!\n"); break; case 13: printf("Unlucky!\n"); break; case .... }

if (i==7) printf("Lucky!\n"); else if (i==13) printf("Unlucky!\n"); else if ....

switch(i) { case 7: printf("Lucky!\n"); break; case 13: printf("Unlucky!\n"); break; default: printf("Blah..\n"); }

if (i==7) printf("Lucky!\n"); else if (i==13) printf("Unlucky!\n"); else printf("Blah..\n");

Without breaks (fall-through) more complicated.

Page 15: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

Conditional (?:)

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language

expression2 evaluated

expression3 evaluated

expression1 ? expression2 : expression3

absoluteValue = (x >= 0) ? x : -x;

min = (x < y) ? x : y;

difference = (a > b) ? (a – b) : (b – a);

printf(n%2 ? "Odd" : "Even");

printf("You have %d item%s.", n, (n == 1) ? "" : "s");

❖ Precedence lower than regular operators (+,-,*,/,%,...)

❖ x nonzero. Want: when n>1, divide x by 2; when n<=1, divide x by 4

x/ ( (n > 1) ? 2.0:4.0);

x/(n > 1) ? 2.0:4.0;

if expression1 is True

False

n>1 → 2.0 n<=1 → error

conditional.c

( )Operates

on 3 arguments -even lower priority

Page 16: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

Multiple Conditionals

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language

❖ Multiple conditionals associated from right to left

❖ Natural interpretation: If c1 then v1, else if c2 then v2, else vo

❖ Example: Print ordinal form of nonnegative integer (1st, 2nd, 24th, etc.)

16

#include <stdio.h> int main() { int x, y, z;

printf("Nonnegative integer: "); scanf("%d", &x);

y=x%100; z = (y>=11 && y<=13) ? 0 : y%10;

printf("Ordinal: %d%s\n", x, z==1 ? "st" : z==2 ? "nd" : z==3 ? "rd" : "th"); return 0;

}

ordinal.c

c1 ? v1 : c2 ? v2 : vo; c1 ? v1 : (c2 ? v2 : vo);

If 11, 12, 13, treat as if 0(th)

Page 17: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

Conditional v. if-else

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language

❖ Often interchangeable

❖ ?: more concise

❖ if else often more versatile

17

if (n > 1) c = 2*a; else c = 2*b;

c = 2*(n>1 ? a : b);

printf("|x|="); if (x>0) printf("%d", x); else printf("%d", -x);

printf("|x|="); printf("%d", x>0 ? x : -x);

if (x>0) { many statements; } else { many other statements; }

Page 18: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

Roundoff Again

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language

❖ We used if-else to round to nearest int, half away from 0

❖ Using conditional

18

r = x>0 ? (int) (x+.5) : (int) (x-.5);

(int)( x>0 ? x+.5 : x-.5 );

(int)(x + (x>0 ? .5 : -.5));

if (x>0) r = (int) (x+.5); else r = (int) (x-.5);

➧ 2(int)(2.9)➧2.4 (int)(2.4+.5)➧

➧ -3(int)(-3.0)➧-2.5 (int)(-2.5-.5)➧

Page 19: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

❖ Conditionals ‣ if ‣ if-else ‣ switch-case ‣ conditional

❖ Loops ‣ while ‣ do-while ‣ for ‣ Nested loops

❖ Jumps ‣ break ‣ continue ‣ goto

‣ Macros

Outline

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language 19

Page 20: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

❖ Conditionals ‣ if ‣ if-else ‣ switch-case ‣ conditional

❖ Loops ‣ while ‣ do-while ‣ for ‣ Nested loops

❖ Jumps ‣ break ‣ continue ‣ goto

‣ Macros

Outline

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language 20

Page 21: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

Loops

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language 21

❖ Code segment executed repeatedly:

❖ Each loop execution is an iteration ❖ Iterations continue as long as loop condition is satisfied

❖ Three types of loops ‣ while ‣ do-while ‣ for

for (i = 1; i <= n; i++) factorial *= i;

while (n>1) factorial *= n--;

Page 22: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

while Loop

❖expression evaluated

❖ If True (nonzero) statement executed

❖Repeats till expression becomes False

❖Then exists loop and proceeds as normal

while (expression)

statement;

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language 22

expression

statement

=0

≠0

Statement can be compound {statment1; statement2; ...}

int n, i=1; printf("Number of lines: "); scanf("%d", &n); while (i<=n) { printf("%d\n", i); i++; }

whilePrint1.c

int n, i=1; printf("Number of lines: "); scanf("%d", &n); while (i<=n) printf("%d\n", i++);

whilePrint2.c

Page 23: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

More Examples

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language

❖ 1+2+3+...+n

❖ an

23

int n, sum = 0, i = 1; scanf("%d", &n); while(i <= n){ sum = sum+i; i++; } printf("1+..+n = %d", sum);

int n, sum = 0, i = 1; scanf("%d", &n); while(i <= n) sum += i++; printf("1+..+n = %d", sum);

int a, n, power=1, i=1; scanf("%d %d", &a, &n); while(i <= n) { power *= a; i++; } printf("%d^%d=%d", a,n,power);

int a, n, power=1, i=1; scanf("%d %d", &a, &n); while(i++ <= n) power *= a; printf("%d^%d=%d", a,n,power);

Page 24: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

Increment!❖ Recall:

❖ What if we don’t increment?

❖ Computer ‘hangs’ ❖ To stop an infinite loop, type Control-C

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language 24

int n, i=1; printf("Number of lines: "); scanf("%d", &n); while (i<=n) { printf("%d\n", i); i++; }

whilePrint1.c

int n, i=1; printf("Number of lines: "); scanf("%d", &n); while (i<=n) { printf("%d\n", i); // i++; }

whilePrintc3.c

Infinite loop!

Page 25: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

Average

#include <stdio.h> int main() { int count = 0, sum = 0, next = 1; while (next > 0) { printf("Positive integer: "); scanf("%d", &next);

if(next>0) { sum += next; count++; } } if (count) printf("Average is: %.2f\n", (double)sum/count); else printf("You're so negative!\n"); }

average1.c

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language 25

Prompt user for a positive integer, repeat while user complies When input is non-positive, output average of all previous (positive) #’s

count - # positive integers, sum - their sum

Task:

Data structure:

Artificial initialization

Page 26: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

do-while Loops

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language 26

do statement

while(expression);

do { printf("Positive integer: "); scanf("%d", &value); } while (value > 0);

expression

statement

=0

≠0

The statement of a do-while loop is

executed at least once!

❖First, statement is executed, then, expression evaluated

❖ If True (nonzero), process repeats till expression becomes False

❖Then execution continues to next statement

Page 27: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

Average

#include <stdio.h>

int main() { int count = 0, sum = 0, next;

do { printf("Positive integer: "); scanf("%d", &next);

if (next>0) { sum += next; count++; }

} while (next > 0);

if (count) printf("\nAverage is: %.2f\n", (double)sum/count); else printf("You're so negative!\n");

return 0; }

average2.c

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language 27

❖Calculating average using do while

No artificial initialization

Page 28: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

while v. do-while

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language

❖ When to use while, and when do-while? ❖ Generally speaking (there are always exceptions..)

‣ If iteration always performed at least once: do-while

‣ If even the first iteration may depend on condition: while

28

Page 29: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

for Loops

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language 29

for (expression1; expression2; expression3) statement

expression2

expression1

=0

≠0

expression3

statement

Each of the three expressions can be empty; empty expression2 is True!

❖ First, expression1 is executed and initializes the loop

❖ Next, expression2 is evaluated. If it is True (nonzero), statement and then expression3 are executed, and keep getting executed, repeatedly, as longlas expression2 remains True

❖ When expression2 evaluates to False, loop ends, program moves to next statement

Page 30: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

Examples

for and while loops are equivalent

i = 2; while(i <= n) { factorial *= i; i++; }

for (i = 2; i <= n; i++) factorial *= i;

➧ ➧

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language 30

❖ Sum of first n integers:sum = 0; for (i = 1; i <= n; i++) sum += i;

❖ Product of first n integers: factorial = 1; for (i = 2; i <= n; i++) factorial *= i;

for (expression1; expression2; expression3) statement;

expression1; while(expression2) { statement expression3; }

➧ ➧Value of i after loop? n+1

Page 31: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

When for and When while

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language

❖ for natural when iterations indexed (e.g., by i) ❖ All iteration book-keeping (initialization, update, test) in one line

❖ for less natural when no sequentiality or unrelated stop criterion

31

for (i = 1; i <= 10; i++) { scanf("%d", &value); sum+= value; }

next = 1;

for( ; next > 0; ) {

printf("Pos integer: "); scanf("%d", &next);

if (next>0) { count++; sum += next; } } average3.c

i = 1; while (i <= 10) { scanf("%d", &value); sum+= value; i++; }

Add 10 numbers

next = 1;

while(next > 0) {

printf("Pos integer: "); scanf("%d", &next);

if (next>0) { count++; sum += next; } }

Add till negative

Page 32: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

Printing the ASCII Table

#include <stdio.h>

int main() {

char i;

for (i=32; i<127; i++) printf("%3d -> %c%s", i, i, i%10 ? " " : "\n");

printf("\n"); return 0; }

ascii2.cLecture 4 ECE15: Introduction to Computer Programming Using the C Language 32

Recall: char is an 8-bit integer from -128 to 127 printf uses format %c, %d to interpret meaning

#include <stdio.h>

int main() {

char i;

for (i=32; i<127; i++) printf("%3d -> %c\n", i, i);

printf("\n"); return 0; }

ascii1.c❖ Too many lines

❖ Show page at a time: a.out|more

❖ Or print 10 symbols per line

Value of i after loop? 127

Page 33: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

Comma Operator❖ Expression like exp1, exp2, exp3 is evaluated sequentially

❖ The type of a comma expression is that of the last exp evaluated

❖ Can perform multiple tasks in the initialization/increment of for loop

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language 33

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

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

Example

Can also write

Or even...

Or Steven.. for (sum = 0, i = 1; i <= n; sum += i*i++);

Don’t abuse!

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

Page 34: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

❖ In c99 can define variables inside loop control line

❖ i defined where used, cleaner, less clutter

❖ i recognized only inside the for loop

❖ Compilation may require gcc -std=c99

Local Variable Definition

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language 34

#include <stdio.h> int main() { int i; for (i=0; i<3; i++)

printf("%d\n", i); return 0;

}

#include <stdio.h> int main() { for (int i=0; i<3; i++)

printf("%d\n", i); i=3; return 0;

}

#include <stdio.h> int main() { for (int i=0; i<3; i++)

printf("%d\n", i); return 0;

}

loop_var.c

Page 35: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

User Interface

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language 35

❖ Most program are interactive - use input and output to communicate with user

❖ Better be user friendly - describe expected input and explain meaning of output

❖ Check validity of user’s input

Page 36: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

Adder

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language 36

#include <stdio.h> int main() { int sum = 0, number_values; printf("Number of values: "); scanf("%d", &number_values);

for (int value, i=0; i < number_values; i++){ printf("Value: "); scanf("%d", &value); sum = sum + value; } printf("Sum is %d\n", sum); return 0; }

Negative # values Non-numeric value

What if:

add_naive.c

Page 37: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

With Input Verification

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language 37

#include <stdio.h>

int main() {

int sum = 0, value, number_values;

printf("Number of values: "); scanf("%d", &number_values);

for(int val, i=0; i<number_values; i++){ printf("Value: "); scanf("%d", &val); sum = sum + val; } printf("Sum is %d\n", sum); return 0; }

#include <stdio.h>

int main() { int sum = 0, number_values; printf("Number of values: ");

if (scanf("%d", &number_values) == 0 || number_values < 0 ) { printf("Invalid # values\n"); return 1; }

for(int val, i=0; i<number_values; i++){ printf("Value: "); if (scanf("%d", &val) == 0) { printf("Invalid value\n"); return 1; } sum = sum + val; }

printf("Sum is %d\n", sum); return 0; }

add_evian.c

Three return statements, first encountered ends program

Page 38: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

Nested Loops

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language

❖ Often need a loop inside another

❖ Two-dimensional objects

❖ Print a rectangle

❖ Nested loop

38

#include <stdio.h>

int main() { int rows, columns; int i, j;

printf("# rows: "); scanf("%d", &rows); printf("# columns: "); scanf("%d", &columns);

for (i=0; i<rows; i++) { for (j=0; j<columns; j++) printf("(%d,%d) ", i,j); printf("\n"); } return 0; }

rectangle1.c

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Page 39: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

The Need for j

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language

❖ Suppose use same index for both loops

❖ What will happen?

❖ columns+1 >= rows

‣Print one row

❖ columns+1 < rows

‣ Infinite loop

39

#include <stdio.h> int main() { int rows, columns; int i; printf("# rows: "); scanf("%d", &rows); printf("# columns: "); scanf("%d", &columns); for (i=0; i<rows; i++) { for (i=0; i<columns; i++) printf("%d ", i); printf("\n"); } return 0; }

rectangle2.c

i=columns

i=columns+1

Page 40: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

Multiplication Table

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language

❖ Print the multiplication table

40

#include <stdio.h> int main() { int i, j;

for (i=1; i<=9; i++) { for (j=1; j<=9; j++) printf("%2d ", i*j); printf("\n\n"); } return 0; } multiplicationTable1.c

1 2 3 4 5 6 7 8 9

2 4 6 8 10 12 14 16 18

3 6 9 12 15 18 21 24 27

4 8 12 16 20 24 28 32 36

5 10 15 20 25 30 35 40 45

6 12 18 24 30 36 42 48 54

7 14 21 28 35 42 49 56 63

8 16 24 32 40 48 56 64 72

9 18 27 36 45 54 63 72 81

Page 41: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

Nicer Printout

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language 41

#include <stdio.h>

int main() {

int i, j;

for(j=1; j<=9; j++) printf(j==1 ? "%1d|" : j==2 ? "%2d" : "%3d", j); printf("\n");

for(j=1; j<=9; j++) printf((j==1 || j==9) ? "--" : "---"); printf("\n");

for(i=2; i<=9; i++) { printf("%1d|", i); for (j=2; j<=9; j++) printf("%2d ", i*j); printf(i!=9 ? "\n |\n" : "\n"); } return 0; }

multiplicationTable2.c

Page 42: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

Largest non-decreasing substring

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language

❖ Input: sequence of positive integers, followed by a single <=0 ❖ Output: length of longest non-decreasing contiguous substring ❖ Examples: ‣1 2 1 4 4 2 -1 : 3 ‣7 5 2 4 4 6 5 -3 : 4 ‣7 6 5: 1

❖ Variables ‣current_value: current value in sequence ‣previous_value: previous sequence value ‣current_length: current length of non-decreasing sequence ‣longest_length: longest length of non-decreas. sequence seen so far

❖ Algorithm

‣ If current_value >= previous-value, increment current_length

‣Else: if current_length>longest_length, update latter - reset current_length to 1

42

Page 43: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

Run through

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language 43

current value 2 4 6 5 4 6 5 2 4 6 8 -3

previous value - 1 2 4 6 5 4 6

current length - 0 1 2 3 1 1 2

longest length - 0 3

if (current_value >= previous_value) current_length++; // Inside increasing sequence else { // An increasing sequence just ended if(current_length > longest_length)

longest_length = current_length; current_length = 1;

} previous_value = current_value;

Page 44: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

Program

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language 44

#include <stdio.h> int main() { int current_value, previous_value=1; int current_length=0, longest_length=0; printf("Integers >0 followed by one <=0 to terminate: "); do { scanf("%d", &current_value); if (current_value >= previous_value) current_length++; else { if(current_length>longest_length)

longest_length=current_length; current_length=1;

} previous_value=current_value; } while(current_value>0); printf("Longest non-decreasing: %d\n", longest_length); return 0; }

increasing.c

At first, only syntax matters.

Over time, algorithms are most interesting.

Page 45: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

Recap: which Loop?

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language

❖ Can always use for, while, do-while

❖ Rules of thumb when to use which

❖ for

‣Natural iteration count (do something 10 times)

‣Esp. if simple initialization before loop, or after each iteration (i++)

❖ while or do-while

‣No natural iteration count, loop condition not iteration #

‣First iteration always performed: do-while

‣First iteration may not be required: while

❖ Just rules, do the more natural in each case

❖ Loop types interchangeable, don’t fret, just do it45

Page 46: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

Two Indentation Styles

Lecture 4.5 ECE15: Introduction to Computer Programming Using the C Language 46

for (i=0; i<9; i++) { something; for (i=0; j<9; j++) { something; for (k=0; k<9; k++) { something; something_else; } } }

for (i=0; i<9; i++) { something; for (i=0; j<9; j++) { something; for (k=0; k<9; k++) { something; something_else; } } }

Up to you

Page 47: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

❖ Conditionals ‣ if ‣ if-else ‣ switch-case ‣ conditional

❖ Loops ‣ while ‣ do-while ‣ for ‣ Nested loops

❖ Jumps ‣ break ‣ continue ‣ goto

‣ Macros

Outline

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language 47

Page 48: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

❖ Conditionals ‣ if ‣ if-else ‣ switch-case ‣ conditional

❖ Loops ‣ while ‣ do-while ‣ for ‣ Nested loops

❖ Jumps ‣ break ‣ continue ‣ goto

‣ Macros

Outline

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language 48

Page 49: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

break and continue

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language 49

Rest of iteration skipped Execution proceeds to next loop iteration

Jump statements that change the loop’s default behavior

Immediate loop exit . Rest of loop skipped Execution proceeds to statement after end of loop

Note: break works as in switch statement

break

continue

Note: continue works only for loops, not for switch

Page 50: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

Examples of continue

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language 50

❖ Following reads 100 integers and sums the non-negatives

for (i = 0; i < 100; i++) { scanf("%d",&num); if(num < 0) continue; sum += num; }

i = 0; while (i < 100) { scanf("%d",&num);

if(num < 0) continue; sum += num; i++; }

❖ Does it differ from the right?

❖ The for loop will always read exactly 100 integers. The while loop will read as many integers as needed (perhaps 1,000,000) to get exactly 100 nonnegative integers

What should we change to make the two loops equivalent?

Page 51: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

Infinite Loops and break

sum = 0; do { scanf("%d",&num); sum += num; } while (num >= 0)

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language 51

for( ;1; ) {...}while(1) {...} for( ; ; ) {...}

❖ Infinite loops often arise by mistake ❖ Other times, by design

❖ Such loops can be exited via: break, return, or goto

OK? sum = 0; while(1) { scanf("%d",&num); if (num < 0) break; sum += num; }

Write a program that reads nonnegative integers and computes their sum, exiting when the user inputs the first negative integerExample:

Adds first negative

Page 52: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

break: Another Example

Solution: Two different approaches, both use break

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language 52

or = false; for (i=0; i<n; i++) { scanf("%d",&value);

if (value) { or = true; break; } }

for (i=0; i<n; i++) { scanf("%d",&value); if (value) break; } or = (i < n);

int i, n, value; bool or;

What if we delete break?

What if we delete break?

Problem: Compute the logical OR of n input values

Page 53: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

Quiz

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language 53

for (k = i = 0; i < 8; i++) for (j = 0; j < 8; j++) {

if (j == 4) break; k++; } printf("%d,%d,%d", i,j,k);

for (k = i = 0; i < 8; i++) for (j = 0; j < 8; j++) {

if (j == 4) continue; k++; } printf("%d,%d,%d", i,j,k);

8, 4, 32 8, 8, 56

What gets printed?quiz1.c quiz2.c

Page 54: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

goto

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language 54

for (i=0; i<n; i++) { // do something if (disaster) goto error; // no disaster here } return 0; error: printf("Fixing it\n"); // do something return 1;

Jumps to a labeled statement sum: x = a+b; myloop: while(1) x++; error: return 1;

Any identifier can be a label. Can go there from anywhere in program

label:

Frowned upon!

scanf("%d", &value); if (value%2) goto odd; printf("Even\n"); return 0; odd: printf("Odd\n"); return 0; goto.c

Avoid if possible

Two return statements, first encountered terminates program

Page 55: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

❖ Conditionals ‣ if ‣ if-else ‣ switch-case ‣ conditional

❖ Loops ‣ while ‣ do-while ‣ for ‣ Nested loops

❖ Jumps ‣ break ‣ continue ‣ goto

❖ Macros

Outline

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language 55

Page 56: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

❖ Conditionals ‣ if ‣ if-else ‣ switch-case ‣ conditional

❖ Loops ‣ while ‣ do-while ‣ for ‣ Nested loops

❖ Jumps ‣ break ‣ continue ‣ goto

❖ Macros

Outline

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language 56

Page 57: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

Macros

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language

❖ What if want to multiply up to 5? ❖ Change 9 to 5 in 6 locations ❖ Time consuming, tedious, error prone ❖ Can use a variable max=9 ❖ Value won’t change ❖ Define MAX to represent 9 ❖ All MAX substituted by 9 ❖ Macro definition

❖ Advantages: ‣Single change ‣Fewer errors ‣Computationally efficient ‣Clear

❖ Disadvantage: value can’t change ❖ Convention: CAPITAL letters

57

#include <stdio.h>

int main() {

int i, j;

for(j=1; j<=9; j++) printf(j==1 ? "%1d|" : j==2 ? ...); printf("\n");

for(j=1; j<=9; j++) printf((j==1 || j==9) ? "--" : ...); printf("\n");

for(i=2; i<=9; i++) { printf("%1d|", i); for (j=2; j<=9; j++) printf("%2d ", i*j); printf(i!=9 ? "\n |\n" : "\n"); } return 0; }

Helps identify as constant

Multiplication-Table Program

Page 58: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

Multiplication Table with Macros

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language 58

#include <stdio.h>

#define MAX 9

int main() {

int i, j;

for(j=1; j<=MAX; j++) printf(j==1 ? "%1d|" : j==2 ? "%2d" : "%3d", j); printf("\n");

for(j=1; j<=MAX; j++) printf((j==1 || j==MAX) ? "--" : "---"); printf("\n");

for(i=2; i<=MAX; i++) { printf("%1d|", i); for (j=2; j<=MAX; j++) printf("%2d ", i*j); printf(i!=MAX ? "\n |\n" : "\n"); } return 0; }

multiplicationTable3.c

No = or ;

Compiler just substitues

MAX by 9

Macro, value never changes

Page 59: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

❖ Tells compiler to replace all CLASS_SIZE by 100 ‣Except if CLASS_SIZE appears inside a string constant ‣Done during pre-processing, before anything else ‣CLASS_SIZE is constant, not variable, cannot change during runtime

More Macros (#define)

Lecture 4.5 ECE15: Introduction to Computer Programming Using the C Language 59

#define CLASS_SIZE 100

#include <stdio.h>

#define CLASS_SIZE 100

int main() { int grade, sum=0, i;

for(i=0; i<CLASS_SIZE; i++) { printf("Grade: "); scanf("%d", &grade); sum += grade; } printf("Average=%.2lf\n", (double) sum/CLASS_SIZE); return 0; }

Convention: UPPER_CASE

No = or ;

class_size.c

Page 60: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

When to Use Macros

Lecture 4.5 ECE15: Introduction to Computer Programming Using the C Language

❖ Macro v. constant

‣Simplifies changes: If CLASS_SIZE changes, update only one line

‣Clarifies program: CLASS_SIZE clearer than 100 ‣Eliminates retyping long constants

❖ Macro v. variable

‣ Faster access (no need to check variable value)

‣Clarifies this is a constant whose value won’t change

❖ Conclusion ‣Use macros for meaningful or repeated constants

60

#define PI 3.141592653589793238462643383279502884

#define CLASS_SIZE 100 100or

#define CLASS_SIZE 100 int class_size = 100;or

Page 61: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

Replace Anything

Lecture 4.5 ECE15: Introduction to Computer Programming Using the C Language

❖ Strings

❖ Operators

❖ Expressions

61

#define TWO_PI 2 * 3.14159 ... circumference = TWO_PI * r;

#define AND && #define OR || ... if ( age<21 OR drink==1 ) .... // no car

if ( !(n%2) AND n>2 ) .... // composite

#define STRING "I am Sam\n" #define PRINTME printf("Hello!\n"); ... printf(STRING); printf("%s", STRING);

PRINTME Sam.c

Macros not evaluated inside quotes printf(“STRING”); will print: STRING

Page 62: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

Recursive Macros

Lecture 4.5 ECE15: Introduction to Computer Programming Using the C Language

❖ Macros can use other macros

❖ Can appear anywhere

❖ Need to define all terms before using them

62

#define TWO_PI 2 * 3.14159 ... circumference = TWO_PI * r;

#define PI 3.14159 #define TWO_PI 2 * PI ... circumference = TWO_PI * r;

#define TWO_PI 2 * PI #define PI 3.14159 ... circumference = TWO_PI * r;

order.c #define TWO_PI 2 * PI ... circumference = TWO_PI * r; #define PI 3.14159 û

Page 63: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

Macro Abuse

Lecture 4.5 ECE15: Introduction to Computer Programming Using the C Language

What does the following program do?

63

#include <stdio.h> int main() {printf("%d\n",3); printf("%d\n",5);printf("%d\n",7);return 0; }

#define POSTEND POST return 0; } #define POSTPRIN POST PRIN #define POST ); #define PRIN printf("%d\n", #define BEGIN int main() { #include <stdio.h>

BEGIN PRIN 3 POSTPRIN 5 POSTPRIN 7 POSTEND

abuse.c

#include <stdio.h> int main() { printf("%d\n",3); printf("%d\n",5); printf("%d\n",7); return 0;

}

Quiz

Expands to:

That is:

Use cautiously

Page 64: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

Variables

Lecture 4.5 ECE15: Introduction to Computer Programming Using the C Language

❖ Since just replacement, macros can include variables

❖ Square

❖ Min of two numbers

64

#include <stdio.h> #define MIN a<b ? a:b int main() { int a, b; printf("a b: "); scanf("%d%d", &a, &b); printf("min=%d\n", MIN); }

min1.c

#include <stdio.h> #define SQUARE a*a int main() { int a; printf("a: "); scanf("%d", &a); printf("a*a=%d", SQUARE); }

square1.c

Page 65: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

Macros with Arguments

Lecture 4.5 ECE15: Introduction to Computer Programming Using the C Language

❖ What if want to apply macros to different variables?

65

#include <stdio.h> #define SQUARE a*a int main() { int a; printf("a: "); scanf("%d", &a); printf("a*a=%d", SQUARE); }

square1.c

#include <stdio.h> #define SQUARE a*a int main() { int a, b; printf("a b: "); scanf("%d%d", &a, &b); printf("a*a=%d", SQUARE); printf("b*b=%d", SQUARE); }

square2.c

#include <stdio.h> #define SQUARE(a) a*a int main() { int a, b; printf("a b: "); scanf("%d%d", &a, &b); printf("a*a=%d", SQUARE(a)); printf("b*b=%d", SQUARE(b)); }

square3.c

ü

ü

Argument

üAlmost..

Page 66: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

Caution❖ What if use expressions?

❖ Use parentheses

Lecture 4.5 ECE15: Introduction to Computer Programming Using the C Language 66

#define SQUARE(a) (a)*(a) int main() { int a; printf("a: "); scanf("%d", &a); printf("(a+1)*(a+1)=%d", SQUARE(a+1) ); }

square5.c

(a+1)*(a+1)

üüü

#include <stdio.h> #define SQUARE(a) a*a int main() { int a, b; printf("a b: "); scanf("%d%d", &a, &b); printf("a*a=%d", SQUARE(a)); printf("b*b=%d", SQUARE(b)); }

square3.c

#define SQUARE(a) a*a int main() { int a; printf("a: "); scanf("%d", &a); printf("(a+1)*(a+1)=%d", SQUARE(a+1)); }

square4.c

a+1*a+1 = 2*a+1

Page 67: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

More

Lecture 4.5 ECE15: Introduction to Computer Programming Using the C Language

❖ Complex macros with arguments

❖ Multiple arguments

67

#include <stdio.h> #define MIN(u,v) (u)<(v) ? (u):(v) int main() { int b; printf("b: "); scanf("%d%d", &b); printf("min=%d\n",MIN(b+1,3*7+2)); }

min2.c

#define LEAP_YEAR(y) (y)%4 == 0 && (y)%100 != 0 || (y)%400 == 0 ... printf("%d is %sleap\n", year, LEAP_YEAR(year) ? "":"not ");

printf("%d is %sleap\n", year+1, LEAP_YEAR(year+1) ? "":"not ");

leap_year.c

Page 68: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

❖ Conditionals ‣ if ‣ if-else ‣ switch-case ‣ conditional

❖ Loops ‣ while ‣ do-while ‣ for ‣ Nested loops

❖ Jumps ‣ break ‣ continue ‣ goto

❖ Macros

Outline

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language 68

Page 69: 4: Control Flow - Amazon S3 · 4: Control Flow A. Orlitsky and A. Vardy, based in part on slides by S. Arzi, G. Ruckenstein, E. Avior, S. Asmir, and M. Elad. Outline ... default:

Halloween

Lecture 4 ECE15: Introduction to Computer Programming Using the C Language

❖ Trick ‣Costumes? ‣Competition? ‣Picture?

❖ Treat ‣Candy? ‣Prize? ‣No HW next week? ‣Fewer problems this week?

❖ Movie ‣Made by? ‣Halloween themed? ‣How long?

69