Page 1 of 23

Absolute C++

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

Page 2 of 23

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

Explanation: The operators == and < have higher precedences than &&, hence the

expressions, count == 0 and limit < 10 are evaluated (to true) then the

&& is executed.

7. The value of count is 0; limit is 10. Evaluate:

(count != 0)||(limit < 20)

Answer: true.

Explanation: The first expression evaluates to false, the value of the || expression

is determined by the second expression. The second expression is true so the ||

expression evaluates to true.

Page 3 of 23

8. In a while loop, the Boolean_Expression is executed before each execution of the

loop body.

Answer: true

9. In a do-while loop, a continue statement terminates the loop.

Answer: False

Explanation: The continue statement causes the Boolean_Expression to be

executed. If true, the body executes, otherwise the loop terminates.

10. A break statement is used in loops only.

Answer: False.

Explanation: In addition to its use in loops, a break statement is used in the

switch statement to transfer control to the next statement after the switch block.

11. When a loop is nested in side another loop, a break or continue statement

terminates or restarts the outermost loop of the nested loop structure.

Answer: False

Explanation: A break or continue terminates or restarts only the innermost loop

containing the break or continue.

Free Form Questions:

1. Assume variables first and second are declared to be double and are

initialized. Write a sequence of lines of code that cause the values stored in first

and second to be exchanged if the value of first is not less than second.

Answer:

// double first, second;

// these have been initialized

if (!(first < second))

{

double temp = first;

first = second;

second = temp;

}

//assert: first <= second

2. Write multiway if-else statements for which the output is “Alarm: Boiler

Pressure: TOO HIGH” if the value of the variable boiler_pressure is

greater than 1000 (psi), and the output is “Boiler Pressure: TOO LOW” if

the value of boiler_pressure is below 100(psi), otherwise the output is

“Boiler Pressure: within normal limits.”