## Question 1

Assume that w=6, x=10, y=6 and z=3. What are the truth values of the following statements?

• w<9
• True. 6<9
• w!=y
• False. 6 is equal to 6
• z>x
• False. 3 is less than 10
• z<=y
• True. 3 is less than 6
• x-6>y*2
• False. x-6 is 4. y*2 is 12. 4 is less than 12, not greater.

## Question 2

With the same values of w,x,y and z, what are the values of the following combinations?

• w<9 && w!=y
• False. w<9 is true, but w!=y is false. If either term of an AND is false, the total is false.
• x+7>2 || x==6
• True. x+7>2 is true. x==6 is false. If either part of an OR is true, the total is true. In fact, the compiler won't even check the second term, it already knows the total is true.
• !(x-9>1)
• True. x-9>1 is false (its equal). The NOT of a false statement is true.
• !((x>y) && (x<z))
• True. x>y is true. x<z is false. So their AND is false. And the NOT of a fasle statement is true.
• (x>7) && !(x>7)
• False. x>7 is true.  !(x>7) is false. If either part of an AND is false, the total is false. This is actually a trick question- x && !x is always false.
• (x>7) || !(x>7)
• True. x>7 is true.  !(x>7) is false. If either part of an OR is true, the total is true. This is another trick question- x || !x is always true.

## Question 3

Under what values of x, y, and z do the following numbered statements get executed? Give the answers in forms like x>y>z.

```if(x==y){
statement 1;
statement 2;
}
else if(y>z){
statement 3;
if(x==z){
statement 4;
if(y<z){
statement 5;
}
}
}
else{
statment 6;
}
```
• statement 1: this occurs only if x==y. We get this from the if its in
• statement 2: this occurs only if x==y. Since it is in the same block as 1, it has the same conditions
• statement 3: this occurs only if x!=y and y>z. We get the first term due to it being in an else branch for if 1, and the second from the second if
• statement 4: this occurs only if x!=y, y>z and z==x. We get this from the 3 ifs/elses it's in.
• statement 5: never. This statement would require y>z and y<z. This cannot be true, so the line never executes. A compiler may warn you of this.
• statement 6: this occurs only if x!=y and y<=z. We get this as the else from the 2 above ifs.

## Question 4

Under what values of x do the following numbered statements get executed?

```switch (x){
case 0:
statement 1;
break;
case 1:
statement 2;
case 2:
statement 3;
case 4:
statement 4;
break;
case 5:
case 6:
statement 5;
default:
statement 6;
break;
}
```
• statement 1: only if x=0
• statement 2: only if x=1
• statement 3: only if x=1 or x=2 (no break after statement 2, so a 1 would fall through)
• statement 4: only if x=1, x=2, or x=4. No breaks for either case 1 or 2.
• statement 5: only if x=5 or x=6.
• statement 6: any value of x except 0,1,2, and 4. Notice that it does happen for 5 and 6 due to not having a break.