34
1 If statement and relational operators <, <=, >, >=, ==, != Finding min/max of 2 numbers Finding the min of 3 numbers Forming Complex relational expressions Logical Operators (!, &&, ||) Cascaded if statement Conditional Operator switch statement Today’s Material

1 If statement and relational operators –, >=, ==, != Finding min/max of 2 numbers Finding the min of 3 numbers Forming Complex relational expressions

Embed Size (px)

Citation preview

Page 1: 1 If statement and relational operators –, >=, ==, != Finding min/max of 2 numbers Finding the min of 3 numbers Forming Complex relational expressions

1

• If statement and relational operators– <, <=, >, >=, ==, !=

• Finding min/max of 2 numbers• Finding the min of 3 numbers• Forming Complex relational expressions

– Logical Operators (!, &&, ||)

• Cascaded if statement• Conditional Operator• switch statement

Today’s Material

Page 2: 1 If statement and relational operators –, >=, ==, != Finding min/max of 2 numbers Finding the min of 3 numbers Forming Complex relational expressions

2

Generic C Program Structure#include <stdio.h>

/* main designates the starting place of our program */main() { /* Variables hold Data Items Needed in the Program */ Variable Declarations;

/* Steps of our program: I/O, computation (expressions) */ Statement1; Statement2; …

StatementN; } /* end-of-the program */

Page 3: 1 If statement and relational operators –, >=, ==, != Finding min/max of 2 numbers Finding the min of 3 numbers Forming Complex relational expressions

3

Example C Program

#include <stdio.h>

/* Convert fahrenheit to celsius */main() { float fahrenheit, celsius;

printf(“Enter a temp in fahrenheit: “); scanf(“%f”, &fahrenheit);

celsius = (fahrenheit-32)/1.8;

printf(“%f degrees fahrenheit equals %f degrees celsius\n”, fahrenheit, celsius);

}

Prompt the user and get the fahrenheit temperature to convert

celsius = (fahrenheit-32)/1.8

Print the fahrenheit and celsius degrees

StartStart

EndEnd

• So far our programs consisted of statements all of which are executed in sequence until the end of the program is reached

Page 4: 1 If statement and relational operators –, >=, ==, != Finding min/max of 2 numbers Finding the min of 3 numbers Forming Complex relational expressions

4

• What about programs which need to select between two alternative set of statements?– You make a comparison and execute a different

set of statement depending on the outcome of the comparison

– Recall our examples with “if” statements– We will consider the problem of computing

min/max of 2 numbers next

Programs with If Statements

Page 5: 1 If statement and relational operators –, >=, ==, != Finding min/max of 2 numbers Finding the min of 3 numbers Forming Complex relational expressions

5

Computing min and max of 2 numbers

Prompt the user and get number1 and number2

Print min and max

number1 < number2 ?

min = number1

yes

max = number2

min = number2

max = number1

no

StartStart

EndEnd

1. Prompt the user and get number1 and number2

2. if (number1 < number2)– 2.1. min = number1;– 2.2. max = number2;

3. else (i.e., number1 >= number2)– 3.1. min = number2;– 3.2. max = number1;

4. Print min and max

Page 6: 1 If statement and relational operators –, >=, ==, != Finding min/max of 2 numbers Finding the min of 3 numbers Forming Complex relational expressions

6

if-else Statement• Allows a program to choose between two

alternatives by testing the value of an expression• Syntax:

if (expression)statement1;

[elsestatement2;]

• If the expression is true (1) statement1 is executed, otherwise statement2 is executed

expressionexpression YY

NN

statement 1statement 1statement 2statement 2

Page 7: 1 If statement and relational operators –, >=, ==, != Finding min/max of 2 numbers Finding the min of 3 numbers Forming Complex relational expressions

7

if-else Examplesint finalGrade;

printf(“Please enter the final grade: “);scanf(“%d”, &finalGrade);if (finalGrade >= 45) printf("Pass \n");

int finalGrade;

printf(“Please enter the final grade: “);scanf(“%d”, &finalGrade);if (finalGrade >= 45) printf("Pass!\n");else printf("Fail!\n");

Page 8: 1 If statement and relational operators –, >=, ==, != Finding min/max of 2 numbers Finding the min of 3 numbers Forming Complex relational expressions

8

What if I need to execute more than one statement?

int finalGrade;…if(finalGrade >= 45){ printf("Pass!\n"); printf("Congratulations!\n");}else{ printf("Fail!\n"); printf("Better luck next time.\n");} /* end-else */

blockblock(compound(compoundstatement)statement)

Page 9: 1 If statement and relational operators –, >=, ==, != Finding min/max of 2 numbers Finding the min of 3 numbers Forming Complex relational expressions

9

Curly Brace Location

int finalGrade;…if(finalGrade >= 45){ printf("Pass!\n"); printf("Congratulations!\n");} else { printf("Fail!\n"); printf("Better luck next time.\n");} /* end-else */

• The location of curly braces is a matter of style– To the compiler it does not matter

Page 10: 1 If statement and relational operators –, >=, ==, != Finding min/max of 2 numbers Finding the min of 3 numbers Forming Complex relational expressions

10

Finding the min and max of 2 ints

int a, b;int min, max;

printf(“Enter 2 ints: “);scanf(“%d%d”, &a, &b);

if (a < b) { min = a; max = b;} else { min = b; max = a;} /* end-else */

printf(“min of %d and %d is %d\n”, a, b, min);

printf(“max of %d and %d is %d\n”, a, b, max);

Prompt the user and get number1 and number2

Print min and max

number1 < number2 ?

min = number1

yes

max = number2

min = number2

max = number1

no

StartStart

EndEnd

Page 11: 1 If statement and relational operators –, >=, ==, != Finding min/max of 2 numbers Finding the min of 3 numbers Forming Complex relational expressions

11

Execution of the Program(1)int a, b;int min, max;

printf(“Enter 2 ints: “);scanf(“%d%d”, &a, &b);

if (a < b) { min = a; max = b;} else { min = b; max = a;} /* end-else */

printf(“min of %d and %d is %d\n”, a, b, min);

printf(“max of %d and %d is %d\n”, a, b, max);

?

a

?min

DATA

?45

45

?b

56

?max56

Enter 2 ints:min of 45 and 56 is 45max of 45 and 56 is 56

45 56

Page 12: 1 If statement and relational operators –, >=, ==, != Finding min/max of 2 numbers Finding the min of 3 numbers Forming Complex relational expressions

12

Execution of the Program(2)int a, b;int min, max;

printf(“Enter 2 ints: “);scanf(“%d%d”, &a, &b);

if (a < b) { min = a; max = b;} else { min = b; max = a;} /* end-else */

printf(“min of %d and %d is %d\n”, a, b, min);

printf(“max of %d and %d is %d\n”, a, b, max);

?

a

?min

DATA

?77

22

?b

22

?max77

Enter 2 ints:min of 77 and 22 is 22max of 77 and 22 is 77

77 22

Page 13: 1 If statement and relational operators –, >=, ==, != Finding min/max of 2 numbers Finding the min of 3 numbers Forming Complex relational expressions

13

Relational Expression in if Statement

• Expression in if statement compares two values and produces either True (1) or False (0)– Called a relational expression– Formed using relational operators

greater than or equal to>=

greater than>

less than or equal to<=

less than<

not equal!=

equal to==

MeaningOperator

• C does not have an explicit boolean type– So integers are used instead. The general rules

is:– “Zero is false, any non-zero value is true”

expressionexpression YY

NN

statement 1statement 1statement 2statement 2

Page 14: 1 If statement and relational operators –, >=, ==, != Finding min/max of 2 numbers Finding the min of 3 numbers Forming Complex relational expressions

14

Relational Expression Examples

• Assume a = 1, b = 2, and c = 3

1Trueb == 2

0Falsec != 3

0False(b + c) > (a + 5)

1True(a + b) >= c

1Truea < b

ValueInterpretationExpression

Page 15: 1 If statement and relational operators –, >=, ==, != Finding min/max of 2 numbers Finding the min of 3 numbers Forming Complex relational expressions

15

Flowchart for finding the min of 3 ints(1)

Prompt the user and get number1, number2 and number3

number1 < number2 ?yes

StartStart

number1 < number3 ?number2 < number3 ?

min = number2min = number3

no

min = number1 min = number2

yes yes

no no

Print min

EndEnd

Page 16: 1 If statement and relational operators –, >=, ==, != Finding min/max of 2 numbers Finding the min of 3 numbers Forming Complex relational expressions

16

Code for finding the min of 3 ints (1)

int a, b, c; int min;

printf(“Enter 3 ints: “);scanf(“%d%d%d”, &a, &b, &c);

if (a < b){ if (a < c) min = a; else min = c; } else { if (b < c) min = b; else min = c;} /* end-else */

printf(“Min of %d, %d, %d is %d\n”, a, b, c, min);

• Problem: Find the minimum of 3 integers

Page 17: 1 If statement and relational operators –, >=, ==, != Finding min/max of 2 numbers Finding the min of 3 numbers Forming Complex relational expressions

17

Flowchart for finding the min of 3 ints(2)

Prompt the user and get number1, number2 and number3

number2 < min?

StartStart

no

min = number1

min = number2

yes

number3 < min?

no min = number3

yes

Print min

EndEnd

Page 18: 1 If statement and relational operators –, >=, ==, != Finding min/max of 2 numbers Finding the min of 3 numbers Forming Complex relational expressions

18

Code for finding the min of 3 ints (2)

/* Here is a simpler alternative implementation */int a, b, c; int min;

printf(“Enter 3 ints: “);scanf(“%d%d%d”, &a, &b, &c);

min = a; /* Assume that a is the minimum */if (b < min) min = b; /* Is b smaller? */if (c < min) min = c; /* Is c smaller? */

printf(“Min of %d, %d, %d is %d\n”, a, b, c, min);

• Problem: Find the minimum of 3 integers

Page 19: 1 If statement and relational operators –, >=, ==, != Finding min/max of 2 numbers Finding the min of 3 numbers Forming Complex relational expressions

19

The need for Logical Operators• In certain cases, you may want to form more

complex relational expressions– (x is equal to 5) OR (x is equal to 8)

• (x == 5) OR (x == 8)

– (x is greater than 5) AND (x is less than 10)• (x > 5) AND (x < 10)

– (x is less than y) AND (y is not equal to 20)• (x < y) AND (y != 20)

• C provides 3 logical operators to form such complex relational expressions– AND (&&), OR (||), NOT (!)

Page 20: 1 If statement and relational operators –, >=, ==, != Finding min/max of 2 numbers Finding the min of 3 numbers Forming Complex relational expressions

20

Logical Operators• Used to combine relational expressions that

are either True (1) or False (0)– Using logical operators you can form complex

relational expressions and use them inside if statements

&&(AND)

0(False)

1(True)

0 0 0

1 0 1

NOT!

OR||

AND&&

MeaningSymbol

||(OR)

0(False)

1(True)

0 0 1

1 1 1

Page 21: 1 If statement and relational operators –, >=, ==, != Finding min/max of 2 numbers Finding the min of 3 numbers Forming Complex relational expressions

21

Expressions using Logical Operators(1)

• Suppose that a is an integer variable whose value is 7 and ch is a character variable holding the character 'q':

Expression Interpretation Value

(a >= 6) && ( ch == 'q') True 1

(a >= 6) || ( ch == 'A') True 1

(a >= 6) && ( ch == 'A') False 0

Page 22: 1 If statement and relational operators –, >=, ==, != Finding min/max of 2 numbers Finding the min of 3 numbers Forming Complex relational expressions

22

Expressions using Logical Operators(2)

int temp = 75;int temp = 75;double rain = 0.35; /* probability */double rain = 0.35; /* probability */

printf(“warm? %d\n”, temp > 70 && temp < 85);printf(“warm? %d\n”, temp > 70 && temp < 85);printf(“nice? %d\n”, temp > 70 && rain < 0.4);printf(“nice? %d\n”, temp > 70 && rain < 0.4);printf(“hot/cold? %d\n”, temp < 50 || temp > 85);printf(“hot/cold? %d\n”, temp < 50 || temp > 85);printf(“cloudy? %d\n”, rain > 0.3 && rain < 0.7);printf(“cloudy? %d\n”, rain > 0.3 && rain < 0.7);

warm? 1nice? 1hot/cold? 0cloudy? 1

Page 23: 1 If statement and relational operators –, >=, ==, != Finding min/max of 2 numbers Finding the min of 3 numbers Forming Complex relational expressions

23

/* If a equals 4 OR a equals 10 */if (a == 4 || a == 10){ ...} else { ...} /* end-else */

/* x is in between 2 AND 20 */if (x >= 2 && x <= 20){ ...} /* end-if */

/* y is greater than 20 AND x is NOT equal to 30 */if (y > 20 && x != 30){ ...} /* end-if */

Expressions using Logical Operators(3)

Page 24: 1 If statement and relational operators –, >=, ==, != Finding min/max of 2 numbers Finding the min of 3 numbers Forming Complex relational expressions

24

Associativity & Precedence Rules

left>, >=, <, <=4

left+, -3

left*, /, %2

right -, ++, --1

AssociativityOperatorPrecedence

5

6

7

==, !=

&&, ||

=, +=, -=, ..

left

left

right

• Here is the associativity and precedence rules for all operators provided by C

• Again, the best thing to do is to parenthesize the expression to avoid ambiguity

Page 25: 1 If statement and relational operators –, >=, ==, != Finding min/max of 2 numbers Finding the min of 3 numbers Forming Complex relational expressions

25

Cascaded If Statements• We often need to test a series of conditions stopping

as soon as one of them is true– E.g. We want to test whether “n” is equal to 0, less than 0 or

greater than 0

if (n < 0) printf(“n < 0\n”);else { if (n == 0) printf(“n == 0\n”); else printf(“n > 0\n”);} /* end-else */

• Instead of nesting the second if statement inside the else, we often write it as follows, called the cascaded if

if (n < 0) printf(“n < 0\n”);else if (n == 0) printf(“n == 0\n”);else printf(“n > 0\n”);

Page 26: 1 If statement and relational operators –, >=, ==, != Finding min/max of 2 numbers Finding the min of 3 numbers Forming Complex relational expressions

26

Cascaded if Syntax

if (expression1)statement1;

[else if (expression2) statement2;

else if (expression3) statement3;

… else

statementN;]

Page 27: 1 If statement and relational operators –, >=, ==, != Finding min/max of 2 numbers Finding the min of 3 numbers Forming Complex relational expressions

27

Cascaded if Example

int finalGrade;…if (finalGrade >= 90)

printf(“Passed: Your grade is A \n”);else if (finalGrade >= 85)

printf(“Passed: Your grade is A- \n”);else if (finalGrade >= 80)

printf(“Passed: Your grade is B+ \n”);else if (finalGrade >= 75)

printf(“Passed: Your grade is B \n”);else if (finalGrade >= 70)

printf(“Passed: Your grade is B- \n”);else if (finalGrade >= 55)

printf(“Passed: Your grade is C \n”);else

printf(“Failed \n”);

Page 28: 1 If statement and relational operators –, >=, ==, != Finding min/max of 2 numbers Finding the min of 3 numbers Forming Complex relational expressions

28

Conditional Operator• You will encounter statements of the

following sort in many place in your code:

if (expression) statement1;

else statement2;

• There is a shorter way to write such statements using the tertiary conditional operator– condition ? expr1 : expr2

• Examples:

a = (b >= 0) ? b : -b; a gets the absolute value of b

min = (a < b) ? a : b; min gets the minimum of a & b

Page 29: 1 If statement and relational operators –, >=, ==, != Finding min/max of 2 numbers Finding the min of 3 numbers Forming Complex relational expressions

29

switch Statement• Often we need to compare an expression against a

series of values to see which one matches– We can implement such code using cascaded if as follows

if (grade == 5) printf(“Excellent\n”);else if (grade == 4) printf(“Good\n”);else if (grade == 3) printf(“Pass\n”);else if (grade == 2) printf(“Poor\n”);else if (grade == 1) printf(“Fail\n”);else printf(“Illegal grade\n”);

• As an alternative to this kind of cascaded if, C provides the “switch” statement

Page 30: 1 If statement and relational operators –, >=, ==, != Finding min/max of 2 numbers Finding the min of 3 numbers Forming Complex relational expressions

30

switch Statement Example• Here is the re-implementation of the previous

cascaded if statements using the switch statement

switch(grade){ case 5: printf(“Excellent\n”); break; case 4: printf(“Good); break; case 3: printf(“Pass\n”);

break; case 2: printf(“Poor\n”); break; case 1: printf(“Fail\n”); break; default: printf(“Illegal grade\n”); break;} /* end-switch */

Page 31: 1 If statement and relational operators –, >=, ==, != Finding min/max of 2 numbers Finding the min of 3 numbers Forming Complex relational expressions

31

switch Statement Syntax• Selects a sequence of one or more instructions

based on the result of comparing the value of an expression to a specific value

switch(expression) {case value1:

statement1;…[break;]

case value2:statement2;

…[break;]

default:statementN;

…[break;]

} /* end-switch */

Page 32: 1 If statement and relational operators –, >=, ==, != Finding min/max of 2 numbers Finding the min of 3 numbers Forming Complex relational expressions

32

Another switch Exampleint main(){

char operator;int a, b;

printf(“Enter an expression: “); scanf(“%d%c%d”, &a, &operator, &c);

switch(operator) {case ‘+’:

printf(“%d+%d = %d\n”, a, b, a+b);break;

case ‘-’:

printf(“%d-%d = %d\n”, a, b, a-b);break;

case ‘*’: printf(“%d*%d = %d\n”, a, b, a*b);

break;case ‘/’:

if(value == 0) {printf(“Error: Divide by zero \n”);printf(“ Operation ignored \n”);

} else printf(“%d/%d = %d\n”, a, b, a/b);

break;default:

printf(“Unknown operator \n”);break;

} /* end-switch */

return 0;} /* end-main */

Page 33: 1 If statement and relational operators –, >=, ==, != Finding min/max of 2 numbers Finding the min of 3 numbers Forming Complex relational expressions

33

The role of break inside switch • Notice that “break” takes us out of the switch

statement• If break is omitted after a case, the control

continues with the first statement of the next case

switch(grade){ case 5: printf(“Excellent\n”); case 4: printf(“Good); case 3: printf(“Pass\n”); case 2: printf(“Poor\n”); case 1: printf(“Fail\n”); default: printf(“Illegal grade\n”);} /* end-switch */

• If grade == 3, this will print– Pass Poor Fail Illegal grade

Page 34: 1 If statement and relational operators –, >=, ==, != Finding min/max of 2 numbers Finding the min of 3 numbers Forming Complex relational expressions

34

The role of break inside switch• Falling through the case may be what is

really intended in your code.– If that’s the case, put a comment for your own

benefit

• Example:

switch(grade){ case 5: case 4: case 3: case 2: num_passing++; /* Fall through */ case 1: num_total++; break;} /* end-switch */