chapter 7 conditional statements

46
Chapter 7 Conditional Statements Spring 2014

Upload: zihna

Post on 05-Jan-2016

44 views

Category:

Documents


1 download

DESCRIPTION

Chapter 7 Conditional Statements. Spring 2014. Chapter 7 Conditional Statements. 7.1 Conditional Expressions. Conditions - compare the values of variables, constants and literals using one or more relational operators - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Chapter 7  Conditional Statements

Chapter 7 Conditional Statements

Spring 2014

Page 2: Chapter 7  Conditional Statements

Chapter 7

Conditional Statements

Page 3: Chapter 7  Conditional Statements

7.1 Conditional ExpressionsConditions - compare the values of

variables, constants and literals using one or more relational operators

• Binary operators - a variable, constant, or literal must appear on each side of the operator

• The comparison determines whether the expression is true or false

Page 4: Chapter 7  Conditional Statements

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 assignmentDouble equal sign (==) tests for equality

Page 5: Chapter 7  Conditional Statements

7.1.1 Relational Operators

const int CONST_INT_EXP = 9;int int_exp1 = 0, int_exp2 = 5;float float_exp = 9.0;char char_exp = 'a';

bool result;

result = int_exp1 == 0; // trueresult = int_exp2 >= int_exp1; // trueresult = int_exp1 > CONST_INT_EXP; // falseresult = float_exp == CONST_INT_EXP; // trueresult = char_exp <= int_exp1; // false result = int_exp1 != int_exp2; // trueresult = char_exp == 'a'; // true

Page 6: Chapter 7  Conditional Statements

7.1.1 Relational Operators

// ----- ILLEGAL OR MALFORMED CONDITIONS ----

result = int_exp1 < int_exp2 < float_exp;// Malformed condition. May or may not compile // depending on compiler used. Even if the// compiler will compile this condition, it // should NEVER be written in this manner.

result = char_exp == "a";// Illegal. Attempting to compare a character// to a string literal.

Page 7: Chapter 7  Conditional Statements

7.1.2 Logical Operators

Logical operators - combine multiple relational operators into a larger composite condition

Operators:

|| (OR) - binary operator• False value only if the conditions on each

side of the operator are false

Page 8: Chapter 7  Conditional Statements

7.1.2 Logical Operators

Operators: (continued)

&& (AND) - binary operator• Results in a true value only if the condition

on both sides of the operator are true

! (NOT) - unary operator• Reverses logic of the single condition

Page 9: Chapter 7  Conditional Statements

7.1.2 Logical OperatorsTruth table - displays Boolean results produced when the operator is applied to specified operands

Logical AND and OR truth table Condition 1 Condition 2 && Result || Result

true true true true

true false false true

false true false true

false false false false

Page 10: Chapter 7  Conditional Statements

7.1.2 Logical OperatorsLogical NOT truth table

Order of precedence - && operator evaluated before the || operator

• The ! operator - highest level of precedence of all logical operators and is higher than the relational operators

Condition ! Result

true false

false true

Page 11: Chapter 7  Conditional Statements

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

Page 12: Chapter 7  Conditional Statements

7.1.2 Logical Operators

int int_exp1 = 0, int_exp2 = 5;float float_exp = 9.0;char char_exp = 'a';const int CONST_INT_EXP = 9;

bool result;result = int_exp1 < int_exp2 && float_exp == 9.0; // true

result = int_exp1 > CONST_INT_EXP || float_exp == 9.0; // true

result = !(float_exp == 9.0 || int_exp1 > CONST_INT_EXP);// false

// Short-Circuit Evaluationresult = float_exp == 9.0 || int_exp1 > CONST_INT_EXP; // true

Various logical operators

T Not Evaluated

TTT

F TT

T FTF

T

Page 13: Chapter 7  Conditional Statements

7.2 The if Statement

if statement - uses conditions to determine a specific action

Syntax:if ( <condition> )

<action>

Page 14: Chapter 7  Conditional Statements

7.2 The if Statement<condition> - any valid expression, either built from

relational and logical operators or from evaluation of a single variable

• zero is false while any non-zero value is considered true

<action> - any valid C++ statement • multiple statements must be enclosed in curly

braces { }

Page 15: Chapter 7  Conditional Statements

7.2 The if Statementif statement - uses conditions to determine a specific action

// Example 1if ( test >= 80 && test < 90 ) cout << "You have earned a B" << endl; // Action block// Example 2if ( test >= 90 ){ // Start of the action block cout << "You have earned an A" << endl; cout << "Excellent work!" << endl;} // End of the action block// Example 3if ( test >= 70 && test < 80 ){ // Start of the action block cout << "You have earned a C" << endl;} // End of the action block

Page 16: Chapter 7  Conditional Statements

7.2.1 The else Statement

else statement - optional part of if statement• Can’t stand alone• Must be associated with an if

if ( <condition> )

<action 1>

else

<action 2>

Page 17: Chapter 7  Conditional Statements

7.2.1 The else Statement

else • no condition or expression associated with it

• relies on results of the condition associated with the if

• executes action(s) only if the condition is false

• action can contain one or more statements

• if more than one statement, the action must be enclosed in curly braces

Page 18: Chapter 7  Conditional Statements

7.2.1 The else Statement

if ( grade >= 60 ) pass = true;else{ pass = false; cout << "Hope you do better next time" << endl;}

else Example

Page 19: Chapter 7  Conditional Statements

7.2.1 The Nested if

Nested if - embedding another if in action block of the else

if ( avg >= 90 ) cout << "A" << endl;else if ( avg >= 80 ) cout << "B" << endl;

Page 20: Chapter 7  Conditional Statements

7.2.1 The Nested ifNested if indentation can cause the code to become

difficult to read

if ( <condition 1> ) <action 1>else if ( <condition 2> ) <action 2>else if ( <condition 3> ) <action 3>. . .else // Optional <last action>

Page 21: Chapter 7  Conditional Statements

7.2.1 The Nested ifInefficient if statement

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;

Page 22: Chapter 7  Conditional Statements

7.2.1 The Nested if

Using else if statements is much more efficient than using separate if statements

else if statement

if ( avg >= 90 ) cout << "A" << endl;else if ( avg >= 80 ) cout << "B" << endl;else if ( avg >= 70 ) cout << "C" << endl;else if ( avg >= 60 ) cout << "D" << endl;else cout << "F" << endl;

Page 23: Chapter 7  Conditional Statements

7.2.1 The Nested if

Why is else if more efficient?else if only evaluates if condition until it finds true

Inefficient if evaluates every if condition

if ( avg >= 90 ) cout << "A" << endl;else if ( avg >= 80 ) cout << "B" << endl;else if ( avg >= 70 ) cout << "C" << endl;else if ( avg >= 60 ) cout << "D" << endl;else cout << "F" << endl;

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;

Page 24: Chapter 7  Conditional Statements

7.2.1 The Nested if

Flow of an if statementStart If Statement

1st Condition>= 90

Action 1Display “A”

2nd Condition>= 80

3rd Condition>= 70

Action 2Display “B”

Action 3Display “C”

Action ElseDisplay “F”

End If Statement

True

True

True

False

False

False

4th Condition>= 60

False

Action 4Display “D”

True

Page 25: Chapter 7  Conditional Statements

7.2.1 The Nested ifNested control statement - has another control statement in its action blockMap most nested if statement with nearest unmatched else

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;}

Page 26: Chapter 7  Conditional Statements

7.3 Variable ScopeScope of a variable – determines:

• What code can access or change the variable

• How long the variable exists or lives

Page 27: Chapter 7  Conditional Statements

7.3 Variable ScopeBelow, 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

Page 28: Chapter 7  Conditional Statements

7.3 Variable Scope

Local scope – variables or constants declared within braces

Page 29: Chapter 7  Conditional Statements

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 powconst float PI = 3.141592F; // global scopefloat global_area = 0; // global scopeint main(){ float radius = 5; // local scope global_area = static_cast<float>( PI * pow( radius, 2 ) ); cout << global_area << " sq. in." << endl; return 0;}// Output78.5398 sq. in.

Page 30: Chapter 7  Conditional Statements

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 powconst float PI = 3.141592F; // global scopefloat global_area = 0; // global scopeint main(){ float radius = 5; // local scope global_area = static_cast<float>(PI * pow(radius, 2)); cout << global_area << " sq. in." << endl; return 0;}// Output78.5398 sq. in.

Page 31: Chapter 7  Conditional Statements

7.3 Variable Scope

Global variables - automatically initialized to 0Avoid global variables (i.e., global_area)

#include <iostream>using std::cout;using std::endl;#include <cmath> // Needed for powconst float PI = 3.141592F; // global scopefloat global_area = 0; // global scopeint main(){ float radius = 5; // local scope global_area = static_cast<float>(PI * pow(radius, 2)); cout << global_area << " sq. in." << endl; return 0;}// Output78.5398 sq. in.

Page 32: Chapter 7  Conditional Statements

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

Page 33: Chapter 7  Conditional Statements

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

Page 34: Chapter 7  Conditional Statements

7.4 The switch StatementGeneral form of the switch statement:

switch( <variable> ){ // Required

case <literal or const 1>: <action 1> break;case <literal or const 2>: <action 2> break;

...default: // Optional <default action>

}// Required

When first line is encountered, value of the variable determined

Execution jumps to the case which corresponds to the value of the variable being examined

Execution continues until either a break statement is encountered or to the end of switch

Page 35: Chapter 7  Conditional Statements

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

Page 36: Chapter 7  Conditional Statements

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

Page 37: Chapter 7  Conditional Statements

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;}

Page 38: Chapter 7  Conditional Statements

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;}

Page 39: Chapter 7  Conditional Statements

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;}

Page 40: Chapter 7  Conditional Statements

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. Enter name 2. Enter test scores 3. Display test scores 9. Exit

Please enter your choice from the list above:

Page 41: Chapter 7  Conditional Statements

7.5 Conditional Operator

Conditional operator - considered a ternary operator, meaning it has three operands

Syntax:<condition> ? <true expression> : <false expression>

Page 42: Chapter 7  Conditional Statements

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;// Output5

Page 43: Chapter 7  Conditional Statements

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;

Page 44: Chapter 7  Conditional Statements

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;

// Output09:10:05

Empty quotes above tell cout to print nothing if the condition is false (i.e. hour is 10 or greater)

Page 45: Chapter 7  Conditional Statements

7.7 C – The Differences

Previous versions of C did not have a Boolean data type• There isn’t a predefined true or false

• All relational operators return either a zero for false or a non-zero value, usually one, for true

Page 46: Chapter 7  Conditional Statements

7.7 C – The DifferencesC programmers often create their own

Boolean data type as shown below

#define BOOL int#define TRUE 1#define FALSE 0int main( void ){ BOOL done = FALSE; return 0;}

• The C99 version of the ANSI Standard includes a Boolean data type

• Not currently supported by Visual Studio