# 5.9. Chapter Review Questions¶

1. Which of these are Boolean expressions? Assume the variables are of type int:

true
"false"
x = 3
n < 10
count == 22
x <= 2 || x > 10
x == 2 || 3
1 < y < 10

2. What are the values of these expressions? Be able to explain:

2 < 3 && 4 < 5
2 < 3 && 4 < 3
2 < 3 || 4 < 5
2 < 3 || 4 < 3
3 < 2 || 4 < 3
2 < 3 || 4 < 5 && 4 < 3

3. Correct the last two entries in the first problem, supposing the user meant “x could be either 2 or 3” and then “y is strictly between 1 and 10”.

4. Add parentheses in 2 < 3 || 4 < 5 && 4 < 3 to get a different result.

5. Suppose you have four possible distinct situations in your algorithm, each requiring a totally different response in your code, and exactly one of the situations is sure to occur. Have many times must you have if followed by a condition?

6. Suppose you have four possible distinct situations in your algorithm, each requiring a totally different response in your code, and at most one of the situations will occur, so possibly nothing will happen that needs a response at all. Have many times must you have if followed by a condition?

7. Assume IsBig(x) returns a Boolean value. Remove the redundant part of this statement:

if (IsBig(x) == true)
x = 3;

8. Write an equivalent (and much shorter!) statement with no if:

if (x > 7)
return true;
else
return false;

9. Write an equivalent (and much shorter!) statement with no if:

if (x > 7)
isSmall = false;
else
isSmall = true;

10. Assume x and y are local int variables. Code fragments are separated by a blank line below. Pairs of the fragments are logically equivalent, but not necessarily with a directly adjacent fragment. Match the pairs. Be sure you understand when different pairs would behave differently. Caution: there is some pretty awful code here, that we would hope you would never write, but you might need to correct/read! Think of pitfalls. In each equivalent pair, which code fragment is more professional?

if (x > 7) {    //a
x = 5;
}
y = 1;

if (x > 7) {    //b
x = 5;
y = 1;
}

if (x > 7)      //c
x = 5;
y = 1;

if (x > 7) {    //d
x = 5;
}
else {
y = 1;
}

if (x > 7)      //e
x = 5;
else if (x <= 7) {
y = 1;
}

if (x > 7) {    //f
y = 1;
}
if (x > 7) {
x = 5;
}

11. Same situation as the last problem, and same caution, except this time assume the fragments appear in a function that returns an int. In each pair of equivalent fragments, which is your preference?

y = 1;         //a
if (x > 7) {
return x;
}

if (x > 7) {   //b
return x;
}
y = 1;

if (x > 7) {   //c
return x;
}
else {
y = 1;
}

if (x > 7) {   //d
return x;
y = 1;
}

if (x > 7) {   //e
y = 1;
return x;
}
y = 1;

if (x > 7) {   //f
return x;
}

if (x > 7);    //g
return x;

return x;      //h

12. Same situation as the last problem, and same caution:

if (x > 5)        //a
if (x > 7)
return x;
else
y = 1;

if (x > 5)  {     //b
if (x > 7)
return x;
}
else {
y = 1;
}

if (x > 7)        //c
return x;
if (x <= 5)
y = 1;

if (x > 7)        //d
return x;
if (x > 5)
y = 1;