if( x < 10 && y > 12)
In this statement, the Boolean expression is x < 10 && y > 12. This expression is either true or false. Of course, there are several possibilities here:
Possibility 1: x >= 10 and
y <= 12
the expression will be: false
Possibility 2: x >= 10 and
y > 12
the expression will be: false
Possibility 3: x < 10 and
y <= 12
the expression will be: false
Possibility 4: x < 10 and
y > 12
the expression will be: true
So your program will go one way when the expression evaluates to false and another way when the expression evaluates to true. So its flow is controlled by this Boolean expression. Note that the expression inside ( ) in the if statement can be very simple or very complicated. But, in either case that statement will evaluate to true or false, regardless of its complexity. When an expression is complex, your compiler uses the precedence rules to decide the order in which each different part of the expression should be executed. In the following expression, for example, the order of execution is decided by these rules:
if ( (x + 2) > 3 || (x + 1) < -3 )
will be executed in this order:
if ( ((x + 2) > 3) || ((x + 1) < -3) )
The rules are listed in Display 3.2 of the textbook. Here, first the expression ((x + 2) > 3) will be evaluated and then the expression ((x + 1) < -3). Because there is an OR, "| |", between the two expressions, if the first one evaluates to true, the second one never gets evaluated. This is because, in an OR expression, once either one of the two expressions is true, the entire expression evaluates to true.
Exercise 4.1
Following is a list of some Boolean expressions. Carefully go through each one of them (do not use a program or a compiler) and determine whether they evaluate
to true or false. Assume that count = 0 and limit = 10. If you believe that a statement is syntactically incorrect, correct it in your answer and evaluate the correct statement.
Expression
Answer
A: ( (count == 0) && (limit < 20))
B: ( count == 0 && limit < 20 )
C: ( (limit > 12) || (count < 5) )
D: ( !(count == 5) )
E: ( (count == 1) && (x < y) )
F: ( (count < 10) || (x < y) )
G: ( !( ((count < 10) || (x < y)) &&
(count >= 0)) )
H: ( ((limit/count) > 7) || (limit < 20)
)
I: ( (limit < 20) || ((limit/count)
> 7) )
J: ( ((limit/count) > 7) &&
(limit < 0) )
K: ( (limit < 0) && (( limit/count) >
7) )
L: ( (5 && 7) + (!6) )
Now, create a file ex41.cpp and cut and paste the following program in it. Compile and run the program and see how well your answers to the above expressions match the program's output.
// ex41.cpp - This program illustrates
the Boolean expressions and the
// order of precedence
#include<iostream>
using namespace std;
int main()
{
int count = 0, limit = 10;
int x,y;
cout << "a " << ( (count = = 0)
&& (limit < 20)) << "\n";
cout << "b " << ( count = = 0 &&
limit < 20 ) << "\n";
cout << "c " << ( (limit > 12)
|| (count < 5) ) << "\n";
cout << "d " << ( !(count = = 5)
) << "\n";
cout << "e " << ( (count = = 1)
&& (x < y) ) << "\n";
cout << "f " << ( (count <
10) || (x < y) ) << "\n";
cout << "g " << ( !( ((count <
10) || (x < y)) && (count >= 0)) ) << "\n";
cout << "h " << ( ((limit/count)
> 7) || (limit < 20) ) << "\n";
cout << "i " << ( (limit <
20) || ((limit/count) > 7) ) << "\n";
cout << "j " << ( ((limit/count)
> 7) && (limit < 0) ) << "\n";
cout << "k " << ( (limit <
0) && (( limit/count) > 7) ) << "\n";
cout << "l " << ( (5 &&
7) + (!6) ) << "\n";
return 0;
}
Note that some of the statements may cause run-time errors. Find those statements and explain why the errors have happened. To make the program go to the next statement, simply comment (//) the line that causes the run-time error. Recompile and run the program again until all lines that cause a run-time error are commented. Compare the results with your previous answers and observe the errors.
Continue to observe vy answering the following questions:
a) What is the difference between h and i?
b) Would it make any difference if in "j" we switch the first and the second
statements, i.e., we use:
cout << "j " << ( (limit <
0) && ((limit/count) > 7) ) << "\n";