GATE | GATE-CS-2017 (Set 2) | Question 38

Consider the C program fragment below which is meant to divide x by y using repeated subtractions. The variable x, y, q and r are all unsigned int.

while(r >= y)
{
r = r - y;
q = q + 1;
}

Which of the following conditions on the variables x, y, q and r before the execution of the fragment will ensure that the loop terminates in a state satisfying the condition x == (y*q + r)?
(A) ( q == r ) && ( r == 0)
(B) ( x > 0 ) && ( r == x ) && ( y > 0 )
(C) ( q == 0 ) && ( r == x ) && ( y > 0 )
(D) ( q == 0 ) && ( y > 0 )


Answer: (C)

Explanation: x == ( y * q + r )
x= product, y= multiplicand, q = quotient , r =  remainder

  • For loop to be terminated, the quotient has to be 0, so only options C and D are left
  • If q=0 -> r=x should apply

Therefore, option C is most appropriate

Quiz of this Question



My Personal Notes arrow_drop_up