 The order in which the computer executes statements in a program
 Statements are executed one after the other
 A statement used to alter the sequential flow of control (see our discussion in Chapter 1)
 The selection structure, and the loop structure are examples of control strucures
Selection structures
if ( Expression )

 If the condition in parentheses (expression) is true, then perform one action, else perform a different action
 Boolean expressions are either true (which is represented by any nonzero number) or false (which is represented by the number 0)
 Statement1A is called the thenclause while Statement1B is called the elseclause
if (number > 0)
cout << "The number is positive" << endl;
else
cout << "The number is either negative or zero" << endl;
 Statement1A and Statement1B may correspond to a block of statements
 Block of statements must be encloded in { }
if (number > 0)
{
cout << "The number is : " << number << endl;
cout << "The number is positive" << endl;
}
else
{
cout << "Not a positive number" << endl;
cout << "The number is either negative or zero" << endl;
}
 If the condition in parentheses (expression) is true, then perform some action; otherwise, don't do anything
if ( Expression )

if (age < 18)
cout << "Not an eligible ";
cout << "voter." << endl;
 Statement may correspond to a block of statements (must be enclosed in { })
if (age < 18)
{
n = 18  age;
cout << "Not an eligible ";
}
cout << "voter." << endl;
 Problems which involve multiple decisions can be coded using nested if statements
if ( Expression1 )

if (number > 0)
{
cout << "The number is : " << number << endl;
cout << "The number is positive" << endl;
}
else if (number < 0)
{
cout << "The number is : " << number << endl;
cout << "The number is negative" << endl;
}
else
{
cout << "The number is : " << number << endl;
cout << "The number is equal to zero" << endl;
}
 Nested if structures yield less comparisons (more efficient code)
 Consider the following alternative implementation
(you need to make 3 comparisons no matter what value is stored in "number")
if (number > 0)
{
cout << "The number is : " << number << endl;
cout << "The number is positive" << endl;
}
if (number < 0)
{
cout << "The number is : " << number << endl;
cout << "The number is negative" << endl;
}
if (number == 0) // the symbol '==' means equal to
{
cout << "The number is : " << number << endl;
cout << "The number is equal to zero" << endl;
}
 The body of an if statement can contain other if statements
if (sum > 40)
if (average < 20)
cout << "The sum is > 40 and the average is < 20" << endl;
else
cout << "The sum is > 40 and the average is >= 20" << endl;
else
cout << "The sum is <= 40" << endl;
 When if statements are nested, it is often confusing to associate an if with its corresponding else
if (sum > 40)
if (average < 20)
cout << "The sum is > 40 and the average is < 20" << endl;
else
cout << "The sum is <= 40" << endl;
 Rule: in the absence of braces, an else is always paired with the closest preceding if that doesn't already have an else paired with it !!
 So, does it make sense to rewrite the above segment of code as follows ?
if (sum > 40)
if (average < 20)
cout << "The sum is > 40 and the average is < 20" << endl;
else
cout << "The sum is <= 40" << endl;
 No !!! (changing the indentation does not make any difference !!!)
 So, what is the solution ? Use braces !!
if (sum > 40)
{
if (average < 20)
cout << "The sum is > 40 and the average is < 20" << endl;
}
else
cout << "The sum is <= 40" << endl;
average
 The braces indicate that the else statement belongs to the outer if statement
Logical (or Boolean) expressions
sum > 40, average < 20, (sumaverage) < 10
++  Relational Operators  +++ ==  equal to  +++ !=  not equal to  +++ >  greater than  +++ <  less than  +++ >=  greater than or equal  +++ <=  less than or equal  +++
if (denom ! = 0)
result = num / denom;
<Table from page 192>
 Do not confuse the assignment operator '=' with the '==' operator
* x=3 means assign the value 3 to the variable x
* x==3 means check if x is equal to 3
* Which message do you think will be printed on the screen if the following
segment of code is executed ?
cin >> n;
if(n=3)
cout << "n equals 3";
else
cout << "n doesn't equal 3";
* This segment of code will always print the message "n equals 3" !! Why ??
* When assignments are treated as logical expressions, they have the value of the expression at the right hand side (nonzero values correspond to true and zero values correspond to false)
 Comparing numbers for equality
* if x,y are integers, you check equality using the statement: if (x == y)
* if w,z are floats, you never check equality using the statement: if (w == z)
* In this case, you need to compare the absolute value of the difference of the two numbers with a very small number (e.g., if (fabs(wz) < 0.00001))
* This is because real numbers cannot be represented exactly in the memory of the computer (truncation or rounding take place during computations)
oneThird = 1.0 / 3.0;
x = f2oneThird + f2oneThird + f2oneThird;
* What is the value of x ? (x=0.999999)
 Many times, it is useful to compare characters in an expression (e.g., suppose that you want to sort a list of names alphabetically)
 In each language, there is a predefined ordering for all the characters (each character is associated with an integer value; try cout << int('A'); to print the integer value associated with 'A')
 The following ordering is true:
'0' '1' ... '9' 'A' 'B' ... 'Z' 'a' 'b' ... 'z'
 According to this ordering:
'0' < '1' < ... < '9' < 'A' < 'B' < ... < 'Z' < 'a' < 'b' < ... 'z'
 The following are valid logical expressions
'M' < 'R' (true), 'm' < 'r' (true), 'm' < 'R' (false), '0' < '1' (true)
 Logical operators are used to construct more complex logical expressions by combining a number of logical expressions together
++ Logical Operators  +++ &&  logical AND  +++   logical OR  +++ !  logical NOT  +++
 Truth table for the logical AND operator
* The logical AND of two logical expressions is true if both expressions are true
<Table from page 194>
(finalScore > 90) && (midtermScore > 70), (x  y < 1) && (y > 10)
 Truth table for the logical OR operator
* The logical OR of two logical expressions is true if at least one of the expressions is true
<Table from page 195>
(midtermGrade == 'A')  (finalGrade == 'A'), (x < 10)  (y  2 < 20)
 Truth table for the logical NOT operator
* The logical NOT of a logical expression is true if the logical expression is false
<Table from page 195>
!(hours > 40) is equivalent to hours <= 40
 Note that the same logical expression can be written in many different ways !!
!(a == b) is equivalent to a != b
!(a == b  a == c) is equivalent to (a != b) && (a != c)
!(a == b && c > d) is equivalent to (a != b)  (c <= d)