Chapter 7 Conditional Statements 7 1 Conditional Expressions

  • Slides: 41
Download presentation
Chapter 7 Conditional Statements

Chapter 7 Conditional Statements

7. 1 Conditional Expressions Condition – any expression that evaluates to true/false value <expr

7. 1 Conditional Expressions Condition – any expression that evaluates to true/false value <expr 1> <relational_operator> <expr 2> • Relational operators are BINARY X<4 Y == a+b q+1 != s*2

7. 1. 1 Relational Operators Relational Operator Description == Equality (be sure to use

7. 1. 1 Relational Operators Relational Operator Description == Equality (be sure to use two equal signs) * != Inequality < Less than > Greater than <= Less than or equal to >= Greater than or equal to * Single equal sign (=) is an assignment / does NOT compare values

7. 1. 1 Relational Operators const int CONST_i. EXP = 9; int iexp 1

7. 1. 1 Relational Operators const int CONST_i. EXP = 9; int iexp 1 = 0, iexp 2 = 5; float fexp = 9. 0; char cexp = 'a'; bool result = true; result = iexp 1 == 0; result = iexp 2 >= iexp 1; result = iexp 1 > CONST_i. EXP; result = fexp == CONST_i. EXP; // true // false // true result = cexp <= iexp 1; result = iexp 1 != iexp 2; result = cexp == 'a'; // false // true

7. 1. 1 Relational Operators // ----- ILLEGAL OR MALFORMED CONDITIONS ---result = 3

7. 1. 1 Relational Operators // ----- ILLEGAL OR MALFORMED CONDITIONS ---result = 3 < X < Y; // Malformed condition. What does it mean? // 3 < X and X < Y ? ? ? // 3 < X or X < Y ? ? ? cexp == "a"; // Illegal. Attempting to compare a character // to a string literal.

7. 1. 2 Logical Operators Logical operators - combine bool expressions Operators: or: x

7. 1. 2 Logical Operators Logical operators - combine bool expressions Operators: or: x || y (binary operator) • false only when both operands are false and: x && y (binary operator) • true only when both operands are true not: !x (unary operator) • false when operand is true; otherwise true.

7. 1. 2 Logical Operators Truth table - displays Boolean results produced when the

7. 1. 2 Logical Operators Truth table - displays Boolean results produced when the operator is applied to specified operands Logical AND and OR truth table Condition c 1 Condition c 2 c 1 && c 2 c 1 || c 2 true false true false true false

7. 1. 2 Logical Operators Logical NOT truth table Condition c !c true false

7. 1. 2 Logical Operators Logical NOT truth table Condition c !c true false true Order of precedence ! (not) && (and) || (or)

7. 1. 2 Logical Operators Misc Information: • Parentheses change the precedence • Parentheses

7. 1. 2 Logical Operators Misc Information: • Parentheses change the precedence • Parentheses can help clarify complicated conditions • Short-circuit evaluation - once the outcome of condition can be determined, evaluation ends

7. 1. 2 Logical Operators Various logical operators int iexp 1 = 0, iexp

7. 1. 2 Logical Operators Various logical operators int iexp 1 = 0, iexp 2 = 5; float fexp = 9. 0; char cexp = 'a'; const int CONST_i. EXP = 9; bool result; result = iexp 1 < iexp 2 && fexp == 9. 0; result = iexp 1 > CONST_i. EXP || fexp == 9. 0; // true result = !(fexp == 9. 0 || iexp 1 > CONST_i. EXP); // false // Short-Circuit Evaluation result = fexp == 9. 0 || iexp 1 > CONST_i. EXP; // true

7. 2 The if Statement Selects actions to be taken only when a specific

7. 2 The if Statement Selects actions to be taken only when a specific condition is satisfied Syntax: if ( <condition> ) <action> Example: if ( N % 2 == 1) cout << N << “ is ODD” << endl;

7. 2 if (<condition>) <action> <condition> - a valid expression that can be interpreted

7. 2 if (<condition>) <action> <condition> - a valid expression that can be interpreted as a TRUE/FALSE value • Relational expression (e. g. , x <= 2) • Logical expression ( x>5 && y != 2) • Integer-valued expression: 0=false; otherwise true. <action> - a valid C++ statement or block • Single statement terminated with semicolon • Compound statement (block) enclosed in set braces { } if (Age > 21) Sell_Beer = true; if (Income > 24000) { SSTax = 0. 05 * Income; Fed. Tax = 0. 075 * Income; }

7. 2 The if Statement if (condition) statement; // Example 1 if ( test

7. 2 The if Statement if (condition) statement; // Example 1 if ( test >= 80 && test < 90 ) cout << "You have earned a B" << endl; // Example 2 – relational expression/compound statement. if ( test >= 90 ) { cout << "You have earned an A" << endl; cout << "Excellent work!" << endl; } // Example 3 – logical expression/compound statement. if ( test >= 70 && test < 80 ) { cout << "You have earned a C" << endl; }

7. 2. 1 The else Statement • Optional part of an if statement •

7. 2. 1 The else Statement • Optional part of an if statement • Can’t stand alone • Must be associated with an open if if ( <condition> ) <action 1> // Consequence (true-part) else <action 2> // Alternative (false-part) • Means: “otherwise”, “catch-all”, “none of the above”

7. 2. 1 The else Statement else <action> // consequence. • no condition or

7. 2. 1 The else Statement else <action> // consequence. • no condition or expression associated with it • relies on the value of the condition associated with the previous if (or chain of ifs) • executes action(s) only if the previous condition (or chain of ifs) is false • if more than one statement, the action must be enclosed in curly braces

7. 2. 1 The if-else Statement else Example if ( grade >= 60 )

7. 2. 1 The if-else Statement else Example if ( grade >= 60 ) pass = true; else { pass = false; cout << "Hope you do better next time" << endl; }

7. 2. 1 Multiple alternative if The alternative of an if is another decision:

7. 2. 1 Multiple alternative if The alternative of an if is another decision: if ( avg >= 90 ) cout << “Grade = A" << endl; else if ( avg >= 80 ) cout << "B" << endl; ---- NOTE indentation. if ( avg >= 90 ) cout << “Grade = A" << endl; else if ( avg >= 80 ) cout << "B" << endl;

7. 2. 1 Selecting from multiple alternatives Only ONE action is selected from a

7. 2. 1 Selecting from multiple alternatives Only ONE action is selected from a chain of decisions. if ( Avg >= 90 ) Grade = ‘A’; else if ( Avg >= 80 ) Grade = ‘B’; else if ( Avg >= 70) Grade = ‘C’; else if ( Avg >= 60) Grade = ‘D’; else // Optional Grade = ‘F’; NOTE: The construct terminates when a choice is made. QUESTIONS: # of decisions needed to assign A? C? F?

7. 2. 1 Sequence of if statements Inefficient: how many decisions for A, C,

7. 2. 1 Sequence of if statements Inefficient: how many decisions for A, C, F? if ( avg >= 90 ) cout << "A" << endl; if ( avg >= 80 && avg < 90 ) cout << "B" << endl; if ( avg >= 70 && avg < 80 ) cout << "C" << endl; if ( avg >= 60 && avg < 70 ) cout << "D" << endl; if ( avg < 60 ) cout << "F" << endl;

7. 2. 1 Multiple-alternative chain of if Mutual exclusion: result can be only one

7. 2. 1 Multiple-alternative chain of if Mutual exclusion: result can be only one of the choices if ( avg >= 90 ) cout << "A" << endl; else if ( avg >= 80 ) cout << "B" << endl; 90 80 else if ( avg >= 70 ) cout << "C" << endl; else if ( avg >= 60 ) cout << "D" << endl; else cout << "F" << endl; 70 60

7. 2. 1 Multiple alternative if chain Notes: 1. Each condition is tried until

7. 2. 1 Multiple alternative if chain Notes: 1. Each condition is tried until one is satisfied (i. e. , value is true) 2. The matching consequence is executed 3. The decision process terminates the

7. 2. 1 The Nested if construct Nested the consequence is itself a decision.

7. 2. 1 The Nested if construct Nested the consequence is itself a decision. if ( gpa >= 3. 75 ) if ( credits > 25 ) if ( money < 30000 ) { scholarship = 5000; cout << "Way to go!" << endl; } else scholarship = 2000; else scholarship = 1000; else { scholarship = 0; cout << "You're on your own. " << endl; }

7. 3 Variable Scope of a variable – determines: • What code can access

7. 3 Variable Scope of a variable – determines: • What code can access or change the variable • How long the variable exists or lives

7. 3 Variable Scope Below, var_a and var_b defined within the scope of the

7. 3 Variable Scope Below, var_a and var_b defined within the scope of the block • Both accessible within the block where defined • Final line generates an error message - var_b is not defined { int var_a = 5, var_b = 10; var_a++; cout << "var_a: " << var_a << endl; } cout << "var_b: " << var_b; // Error: undeclared // identifier var_b

7. 3 Variable Scope Local scope – variables or constants declared within braces

7. 3 Variable Scope Local scope – variables or constants declared within braces

7. 3 Variable Scope Constant PI and variable global_area physically declared outside of function

7. 3 Variable Scope Constant PI and variable global_area physically declared outside of function placed at the global level #include <iostream> using std: : cout; using std: : endl; #include <cmath> // Needed for pow const float PI = 3. 141592 F; // global scope float global_area = 0; // global scope int main() { float radius = 5; // local scope global_area = static_cast<float>( PI * pow( radius, 2 ) ); cout << global_area << " sq. in. " << endl; return 0; } // Output 78. 5398 sq. in.

7. 3 Variable Scope Any code within the file can access PI or global_area

7. 3 Variable Scope Any code within the file can access PI or global_area #include <iostream> using std: : cout; using std: : endl; #include <cmath> // Needed for pow const float PI = 3. 141592 F; // global scope float global_area = 0; // global scope int main() { float radius = 5; // local scope global_area = static_cast<float>(PI * pow(radius, 2)); cout << global_area << " sq. in. " << endl; return 0; } // Output 78. 5398 sq. in.

7. 3 Variable Scope Global variables - automatically initialized to 0 Avoid global variables

7. 3 Variable Scope Global variables - automatically initialized to 0 Avoid global variables (i. e. , global_area) #include <iostream> using std: : cout; using std: : endl; #include <cmath> // Needed for pow const float PI = 3. 141592 F; // global scope float global_area = 0; // global scope int main() { float radius = 5; // local scope global_area = static_cast<float>(PI * pow(radius, 2)); cout << global_area << " sq. in. " << endl; return 0; } // Output 78. 5398 sq. in.

7. 4 The switch Statement switch statement - another form of conditional statement •

7. 4 The switch Statement switch statement - another form of conditional statement • Also called a selection statement • Checks only for equality and only for one variable

7. 4 The switch Statement Works well for checking a variable for limited set

7. 4 The switch Statement Works well for checking a variable for limited set of values • Only works with ordinal data types • Ordinal data types - can be translated into an integer to provide a finite, known, number set • Examples include int, bool, char, and long

7. 4 The switch Statement General form of the switch statement: When first line

7. 4 The switch Statement General form of the switch statement: When first line is encountered, value of the variable determined switch( <variable> ) { // Required case <literal or const 1>: Execution jumps to the <action 1> case which corresponds to the value of the break; variable being case <literal or const 2>: examined <action 2> Execution continues break; until either a break. . . statement is default: // Optional encountered or to the end of switch <default action> }// Required

7. 4 The switch Statement break statement - stops execution of the control structure

7. 4 The switch Statement break statement - stops execution of the control structure prematurely • Stops multiple case statements from being executed • Many believe poor programming to use outside the context of the switch statement

7. 4 The switch Statement default statement - executed if value of the variable

7. 4 The switch Statement default statement - executed if value of the variable doesn’t match any of previous cases • Type of catch all or “case else” • Technically can use the default case in any position • Should physically be the last one in the switch statement

7. 4 The switch Statement int menu_item = 0; . . . switch (

7. 4 The switch Statement int menu_item = 0; . . . switch ( menu_item ) { case 1: // Using literal values cout << "You have chosen option 1. " << endl; break; case 2: cout << "You have chosen option 2. " << endl; break; case 3: cout << "You have chosen option 3. " << endl; break; default: cout << "Invalid menu option. " << endl; }

7. 4 The switch Statement const short GREEN = 0; const short YELLOW =

7. 4 The switch Statement const short GREEN = 0; const short YELLOW = 1; const short RED = 2; short light_color = GREEN; switch ( light_color ) { case GREEN: // Using constants cout << "Go!" << endl; break; case YELLOW: // Let fall through case RED: cout << "Stop!"; cout << "Proceed when light is green. " << endl; break; default: cout << "Stop!"; cout << "Power is out!" << endl; }

7. 4 The switch Statement char letter_grade; cout << "Enter letter grade: "; cin

7. 4 The switch Statement char letter_grade; cout << "Enter letter grade: "; cin >> letter_grade; switch ( letter_grade ) { case 'A': // Using character literal values cout << "Excellent!" << endl; break; case 'B': cout << "Above average. " << endl; break; case 'C': cout << "Average. " << endl; break; case 'D': cout << "Below average. " << endl; break; case 'F': cout << "Failed!" << endl; break; default: cout << "Invalid letter grade. " << endl; }

7. 4 The switch Statement One of the most common uses of switch statement

7. 4 The switch Statement One of the most common uses of switch statement is in menu driven programs Student Grade Program - Main Menu 1. 2. 3. 9. Enter name Enter test scores Display test scores Exit Please enter your choice from the list above:

7. 5 Conditional Operator Conditional operator - considered a ternary operator, meaning it has

7. 5 Conditional Operator Conditional operator - considered a ternary operator, meaning it has three operands Syntax: <condition> ? <true expression> : <false expression>

7. 5 Conditional Operator One of the expressions is returned based upon the evaluation

7. 5 Conditional Operator One of the expressions is returned based upon the evaluation of the condition int a = 5, b = 0; int larger = a > b ? a : b; cout << larger << endl; // Output 5

7. 5 Conditional Operator Equivalent if statement to code on previous page int a

7. 5 Conditional Operator Equivalent if statement to code on previous page int a = 5, b = 0; int larger; if ( a > b ) larger = a; else larger = b;

7. 5 Conditional Operator More challenging conditional operator example short hour = 9, minute

7. 5 Conditional Operator More challenging conditional operator example short hour = 9, minute = 10, second = 5; cout << (hour < 10 ? "0" : "") << hour << ": " << (minute < 10 ? "0" : "") << minute << ": " << (second < 10 ? "0" : "") << second << endl; // Output 09: 10: 05 Empty quotes above tell cout to print nothing if the condition is false (i. e. hour is 10 or greater)