C++ Programming:
From Problem Analysis
to Program Design, Fourth Edition
Chapter 4: Control Structures I (Selection)
Objectives
In this chapter, you will:
• Learn about control structures
• Examine relational and logical operators
• Explore how to form and evaluate logical
(Boolean) expressions
• Discover how to use the selection control
structures if, if...else, and switch in a
program
• Learn to use the assert function to terminate a
program
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 2
Control Structures
• Control Structures control the flow of
execution.
• A computer can process:
− In sequence
− Selectively (branch) - making a choice
− Repetitively (iteratively) - looping
• Some statements are executed only if certain
conditions are met
• A condition is met if it evaluates to true
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 3
Control Structures (continued)
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 4
Relational Operators
• A condition is represented by a logical
(Boolean) expression that can be true or
false
• Relational operators:
− Allow comparisons
− Require two operands (binary)
− Evaluate to true or false
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 5
Relational Operators (continued)
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 6
Relational Operators and Simple
Data Types
• You can use the relational operators with all
three simple data types:
− 8 < 15 evaluates to true
− 6 != 6 evaluates to false
− 2.5 > 5.8 evaluates to false
− 5.9 <= 7.5 evaluates to true
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 7
Comparing Characters
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 8
Comparing Characters
#include<iostream>
using namespace std;
int main()
{
bool result;
result = 'a' < 'b';
cout << result << endl;
}
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 9
Converting Characters to their
ASCII Code
#include<iostream>
using namespace std;
int main()
{
char character;
cout << (int) character;
// or
cout << int (character);
}
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 10
Relational Operators and the
string Type
• Relational operators can be applied to strings
• Strings are compared character by character,
starting with the first character
• Comparison continues until either a mismatch
is found or all characters are found equal
• If two strings of different lengths are compared
and the comparison is equal to the last
character of the shorter string
− The shorter string is less than the larger string
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 11
Relational Operators and the
string Type (continued)
• Suppose we have the following declarations:
string str1 = "Hello";
string str2 = "Hi";
string str3 = "Air";
string str4 = "Bill";
string str5 = "Big";
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 12
Relational Operators and the
string Type (continued)
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 13
Relational Operators and the
string Type (continued)
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 14
Relational Operators and the
string Type (continued)
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 15
Logical (Boolean) Operators and
Logical Expressions
• Logical (Boolean) operators enable you to
combine logical expressions
unary
binary
binary
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 16
Logical (Boolean) Operators and
Logical Expressions (continued)
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 17
Order of Precedence
• Relational and logical operators are
evaluated from left to right
• The associativity is left to right
• Parentheses can override precedence
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 20
Order of Precedence (continued)
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 21
Order of Precedence (continued)
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 22
Order of Precedence (continued)
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 23
Order of Precedence (continued)
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 24
Short-Circuit Evaluation
• Short-circuit evaluation: evaluation of a logical
expression stops as soon as the value of the
expression is known.
• Example:
(age >= 21) || ( x == 5)
In case(age >= 21)is True, then the whole
statement is true.
(grade == 'A') && (x >= 7)
In case (grade == 'A') is False, then the whole
statement is false.
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 25
int Data Type and Logical
(Boolean) Expressions
• Earlier versions of C++ did not provide built-in
data types that had Boolean values
• Logical expressions evaluate to either 1 or 0
− The value of a logical expression was stored
in a variable of the data type int
• You can use the int data type to manipulate
logical (Boolean) expressions
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 26
The bool Data Type and Logical
(Boolean) Expressions
• The data type bool has logical (Boolean)
values true and false
• bool, true, and false are reserved words
• The identifier true has the value 1
• The identifier false has the value 0
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 27
Logical (Boolean) Expressions
• Logical expressions can be unpredictable
• The following expression appears to
represent a comparison of 0, num, and 10:
0 <= num <= 10
• It always evaluates to true because 0 <=
num evaluates to either 0 or 1, and 0 <= 10
is true and 1 <= 10 is true
• A correct way to write this expression is:
0 <= num && num <= 10
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 28
Selection: if and if...else
• One-Way Selection
• Two-Way Selection
• Compound (Block of) Statements
• Multiple Selections
• Nested if
• Comparing if...else Statements with a
Series of if Statements
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 29
Selection: if and if...else
(continued)
• Using Pseudocode to Develop, Test, and
Debug a Program
• Input Failure and the if Statement
• Confusion Between the Equality Operator
(==) and the Assignment Operator (=)
• Conditional Operator (?:)
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 30
One-Way Selection
• The syntax of one-way selection is:
• The statement is executed if the value of the
expression is true
• The statement is bypassed if the value is
false; program goes to the next statement
• if is a reserved word
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 31
One-Way Selection (continued)
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 32
One-Way Selection (continued)
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 33
One-Way Selection (continued)
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 35
Two-Way Selection
• Two-way selection takes the form:
• If expression is true, statement1 is
executed; otherwise, statement2 is
executed
− statement1 and statement2 are any C++
statements
• else is a reserved word
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 36
Two-Way Selection (continued)
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 37
Two-Way Selection (continued)
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 38
Two-Way Selection (continued)
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 39
Compound (Block of) Statement
• Compound statement (block of statements):
• A compound statement is a single statement
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 40
Compound (Block of) Statement
(continued)
if (age > 18)
{
cout << "Eligible to vote." << endl;
cout << "No longer a minor." << endl;
}
else
{
cout << "Not eligible to vote." << endl;
cout << "Still a minor." << endl;
}
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 41
Multiple Selections
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 42
Multiple Selections (continued)
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 43
Nested if
• Nesting: one control statement within another.
Example:
// outer if condition
if (num != 0) {
// inner if condition
if (num > 0) {
cout << "The number is positive." << endl;
}
// inner else condition
else {
cout << "The number is negative." << endl;
}
}
// outer else condition
else {
cout << "The number is 0" << endl;
}
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 44
Comparing if…else Statements
with a Series of if Statements
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 45
Confusion Between == and =
• C++ allows you to use any expression that
can be evaluated to either true or false as
an expression in the if statement:
if (x = 5)
cout << "The value is five." << endl;
• The appearance of = in place of ==
resembles a silent killer
− It is not a syntax error
− It is a logical error
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 46
Conditional Operator (?:)
• Conditional operator (?:) takes three arguments
− Ternary operator
• Syntax for using the conditional operator:
expression1 ? expression2 : expression3
• If expression1 is true, the result of the
conditional expression is expression2
− Otherwise, the result is expression3
• Example:
x > y ? cout << "x is greater than y" : cout << "x is not greater than y“;
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 47
switch Structures
• switch structure: alternate
to if-else
• switch (integral)
expression is evaluated first
• Value of the expression
determines which
corresponding action is
taken
• Expression is sometimes
called the selector
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 48
switch Structures (continued)
• One or more statements may follow a case
label
• Braces are not needed to turn multiple
statements into a single compound statement
• The break statement may or may not appear
after each statement
• switch, case, break, and default are
reserved words
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 50
Summary
• Control structures alter normal control flow
• Most common control structures are selection
and repetition
• Relational operators: ==, <, <=, >, >=, !=
• Logical expressions evaluate to 1 (true) or 0
(false)
• Logical operators: ! (not), && (and), || (or)
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 52
Summary (continued)
• Two selection structures: one-way selection
and two-way selection
• The expression in an if or if...else
structure is usually a logical expression
• No stand-alone else statement in C++
− Every else has a related if
• A sequence of statements enclosed between
braces, { and }, is called a compound
statement or block of statements
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 53
Summary (continued)
• Using assignment in place of the equality
operator creates a semantic error
• switch structure handles multiway selection
• break statement ends switch statement
• Use assert to terminate a program if certain
conditions are not met
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 54