search
Log In
29 votes
4.1k views

Consider the C function given below.

int f(int j)
{ 
    static int i = 50; 
    int k; 
    if (i == j) 
    { 
        printf("something"); 
        k = f(i); 
        return 0; 
    } 
    else return 0; 
} 

Which one of the following is TRUE?

  1. The function returns $0$ for all values of $j$.
  2. The function prints the string something for all values of $j$.
  3. The function returns $0$ when $j = 50$.
  4. The function will exhaust the runtime stack or run into an infinite loop when $j = 50$.
in Programming
edited by
4.1k views

5 Answers

37 votes
 
Best answer

There is no updation for $i$ and $j$ in the function. so if we call function with $j = 50$ the recursive call will be continued infinitely. There is no terminating condition for recursion. hence answer D


edited by
0
Why answer can't be option a?
0

@rajatmyname because option a is strictly talking about all value of j but for 50 it will trapped in a loop

0

I have a small doubt.

In option D, it is clearly given that :

The function will exhaust the runtime stack or run into an infinite loop when j=50.

Consider only the underlined part. How at j=50, program will run into an infinite loop? 

0
Because when j = 50, the loop condition will be true forever and the program will keep on executing, thus exhausting the stack.
1
Exactly my point...

Shouldn't the answer be:

The function will exhaust the runtime stack or terminate abnormally when j=50.
9 votes
1. int f(int j)
 { 
 2.   static int i = 50; 
 3. int k; 
 4.   if (i == j) 
    { 
 5.       printf("something"); 
 6.       k = f(i);              key line function loop from 6 to 1 always when j=50  even not return 0. so 1st and 3rd statement are false.

        return 0; 
    } 
    else return 0; 
} 

since for value other then 50 it will not print anythng  b/c not satisfy if property.

so ans is D. since always same value pass as value.

2 votes
When j is 50, the function would call itself again and again as neither i nor j is changed inside the recursion.
1 vote

Option D

0 votes
Let's say that value of j given inside the function is 50.
int f(int j)
{
static int i = 50;
int k;
if (i == j) // This will be True.
{
printf ("Something");
k = f(i); // Again called f(i) with value of i as 50. So, the function will run into infinite loop.
return 0;
}
else return 0;
}
Answer:

Related questions

89 votes
4 answers
1
7.8k views
Suppose $n$ and $p$ are unsigned int variables in a C program. We wish to set p to $^nC_3$. If $n$ is large, which one of the following statements is most likely to set p correctly? $p = n * (n-1) * (n-2) / 6;$ $p = n * (n-1) / 2 * (n-2) / 3;$ $p = n * (n-1) / 3 * (n-2) / 2;$ $p = n * (n-1) * (n-2) / 6.0;$
asked Sep 28, 2014 in Programming jothee 7.8k views
39 votes
3 answers
2
6.6k views
Consider the following function. double f(double x){ if( abs(x*x - 3) < 0.01) return x; else return f(x/2 + 1.5/x); } Give a value $q$ (to $2$ decimals) such that $f(q)$ will return $q$:_____.
asked Sep 28, 2014 in Programming jothee 6.6k views
71 votes
9 answers
3
11.9k views
For a C program accessing $\mathbf{X[i] [j] [k]}$, the following intermediate code is generated by a compiler. Assume that the size of an integer is $32$ bits and the size of a character is $8$ bits. t0 = i ∗ 1024 t1 = j ∗ 32 t2 = k ∗ 4 t3 = t1 + t0 t4 = t3 + t2 t5 = X[t4] ... $\mathbf{X}$ is declared as "char $\mathbf{X[4] [32] [8]}$ . $\mathbf{X}$ is declared as "char $\mathbf{X[32] [16] [2]}$ .
asked Sep 28, 2014 in Compiler Design jothee 11.9k views
55 votes
3 answers
4
11.5k views
Consider the main memory system that consists of $8$ memory modules attached to the system bus, which is one word wide. When a write request is made, the bus is occupied for $100$ nanoseconds (ns) by the data, address, and control signals. During the same $100$ ns, ... be on the bus at any time. The maximum number of stores (of one word each) that can be initiated in $1$ millisecond is ________
asked Sep 28, 2014 in Operating System jothee 11.5k views
...