in Programming in C edited by
794 views
1 vote
1 vote

The question is based on the following program fragment.

f(intY[10],int x){

int u,j,k;

i=0;j=9;

do{

            k=(i+j)/2;

            if(Y[k] < x) i=k; else j=k;

      } while(Y[k]!=x) && (i<j));

       if (Y[k]==x) printf(“x is in the array.”);

        else printf(“x is not in the array.”);

}

On which of the following contents of ‘Y’ and ‘x’ does the program fail?

  1. $Y$ is $[1\;2\;3\;4\;5\;6\;7\;8\;9\;10]$ and $x<10$
  2. $Y$ is $[1\;3\;5\;7\;9\;11\;13\;15\;17\;19]$ and $x<1$
  3. $Y$ is $[2\;2\;2\;2\;2\;2\;2\;2\;2\;2]$ and $x>2$
  4. $Y$ is $[2\;4\;6\;8\;10\;12\;14\;16\;18\;20]$ and $2<x<20$ and $’x’$ is even 
in Programming in C edited by
by
794 views

1 comment

This question is identical to GATE CSE 2008 | Question: 84

0
0

1 Answer

1 vote
1 vote

For option C, these are the values of i, j and k. After i = 8 and j = 9, the value of k will be 8 and since the updated value of i is still 8, this results in an infinite loop. 

 

i j k
0 9 4
4 9 6
6 9 7
7 9 8
8 9 8
8 9 8

 

Answer:

Related questions