Introduction to C programming/Quizes/BooleanLogic/Answers

Question 1

edit

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

edit

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

edit

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

edit

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.