Absolute C++ 5th Edition by Walter Savitch - Test Bank
Chapter 2 - Test
Questions
These test questions are true-false, fill in the
blank, multiple choice, and free form questions that may require code. The
multiple choice questions may have more than one correct answer. You are
required to mark and comment on correct answers.. Mark all of the correct answers for full credit. The true false
questions require an explanation in
addition to the true/false response, and, if false, also require a correction.
True False:
1. The if,
while and for statements control only one
statement.
Answer: True
Explanation: The one statement may
be a block (statements that are enclosed with curly braces { }) or a simple
statement.
2. Given
the declaration
int x = 0;
The following expression causes a
divide by zero error:
(x !=0) || (2/x < 1);
Answer: False.
Explanation: The || operator uses short-circuit
evaluation. The first member of this expression is true; the truth value of the complete expression can be
determined from this; consequently, the second expression is not evaluated.
There is no divide-by-zero error.
3. Suppose
we have these declarations,
int x = -1, y = 0, z = 1;
This Boolean expression is correct
and it does what the programmer intends.
x < y < z
Answer: False
Explanation: Unfortunately, the expression compiles without error
and runs. The < operator associates (groups) left to right, so the expression
evaluates as
(x < y) < z
The left hand expression evaluates to true,
which, if compared to a numeric type, converts to 1. When compared to 1, this
is false.
What the programmer intends, expressed as mathematacs might is
-1 < 0< 1, a result that is clearly true.
4.
You want
to determine whether time has run out. The following code correctly implements
this.
!time > limit
Answer: False.
Explanation: The expression always
evaluates to false. This cannot be what
the programmer intended. The compiler doesn’t catch the problem because the
code is legal, correct C++. Corrected code is !(time > limit)
Code execution proceeds as follows:
The operator ! takes a bool argument. It returns the opposite bool value. The value of time is converted to a bool. The value of time is certainly nonzero, hence !time is !true, i.e., false. The > compares this result with a
numeric value, limit, (an int or perhaps some kind of floating
point). The value on the left (false) is converted to a 0 value of that type. The value of limit is unlikely to be a negative
number and we are concerned about time running out, so it is unlikely that time
is zero. Consequently, the inequality becomes 0>limit, where limit is nonzero. This is false.
5.
The value
of count is 0; limit is 10. Evaluate:
(count == 0)&&(limit < 20)
Answer: true
6.
The value
of count is 0; limit is 10. Evaluate:
count == 0 && limit < 20
Answer: true