chapter 7 conditional statements
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 PresentationTRANSCRIPT
Chapter 7 Conditional Statements
Spring 2014
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
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
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
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.
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
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
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
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
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
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
7.2 The if Statement
if statement - uses conditions to determine a specific action
Syntax:if ( <condition> )
<action>
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 { }
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
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>
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
7.2.1 The else Statement
if ( grade >= 60 ) pass = true;else{ pass = false; cout << "Hope you do better next time" << endl;}
else Example
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;
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>
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;
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;
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;
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
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;}
7.3 Variable ScopeScope of a variable – determines:
• What code can access or change the variable
• How long the variable exists or lives
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
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 - 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.
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.
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.
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 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 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
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 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 ( 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 = 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 >> 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 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:
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 of the condition
int a = 5, b = 0;
int larger = a > b ? a : b;
cout << larger << endl;// Output5
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 = 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)
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
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