• retagged by
43,672 views
107 107 votes

Consider the following C program:

#include <stdio.h>
int r() {
       static int num=7;
       return num--;
}
int main() {
       for (r();r();r())
              printf(“%d”,r());
       return 0;
}

Which one of the following values will be displayed on execution of the programs?

  1. $41$
  2. $52$
  3. $63$
  4. $630$

11 Answers

Best answer
157 157 votes

Basic Points:-

  1. After every expression statement  in the for loop, there is a sequence point
  2. After the return value is copied, there is a sequence point.

for loop execution :-  for(e1;e2;e3)

On the first iteration, expression$1$ executed ( generally termed as initialization expression,)

next expression$2$ executed ( generally termed as condition check expression, if it evaluates to non-zero then only, for loop body executed, otherwise for loop terminates.)

After the first iteration, expression$3$ is executed  ( generally termed as increment expression. ), after that $e2$ evaluates and the process continues!

$\text{for}(\color{green}{r()};\color{red}{r()};\color{blue}{r()})$

{

    printf("%d",r());

}

before the main starts, the execution num is initialized with $7$ ( note that it is stored under static memory due to it is a static number.)

on first iteration :- $\color{green}{r()} \implies$ return $7$ but num changed to $6$.

$\color{red}{r()} \implies$ return $6$ but num changed to $5. \implies$ condition evaluate to true $\implies$ for loop body executes !

  printf("%d",r()); $\implies$ return $5$ but num changed to $4. \implies$ print $5$ on the screen.

$\color{blue}{r()} \implies$ return $4$ but num changed to $3$.

$\color{red}{r()} \implies$ return $3$ but num changed to $2. \implies$ condition evaluate to true $\implies$ for loop body executes !

  printf("%d",r()); $\implies$ return $2$ but num changed to $1. \implies$ print $2$ on the screen.

$\color{blue}{r()} \implies$ return $1$ but num changed to $0$.

$\color{red}{r()} \implies$ return $0$ but num changed to $-1. \implies$ condition evaluate to false $\implies$ for loop over !

Hence option $B$ : $52$

• edited by
17 17 votes

May be this works : 

Must know the property of loop that :

(i) for first run initialization part run for first and last time 

(2) condition part runs each time.

(3) updation part runs after one entry in code

(4) In last run where condition fails still for statement part run i.e. condition part fails surely no entry in code part but updation part runs.

11 11 votes

It will print 52

See the function starts from main which has a for loop .

for (r();r();r())

So first r() will return 7 and then 6 will go to second r() which is a condition (why 6 then notice its num-- so first it will return value then decrement , Now second r() which is a condition will return 6 and decrement to 5 ,further as this condition satisfies 5 will go for print :

printf("%d", r());

Now again here there is r() so it will print 5 and decrement again to 4

Which will go to increment/decrement condition of for that is third r() and as we see its a decrement

num--

so it will return 4 and decrement to 3 which will again go to second r() and will return 3 with decrementing to 2 and that 2 will go to print r() which will print 2  .

so final print 52

• edited by
5 5 votes
52. It will be decremented only after value is sent
2 2 votes

As it is given return num-- ; so the value retuned will be that of num before decreasing it. 

So, in first call, num = 7, returns 7 and becomes 6. Next call finds num = 6, returns 6 and makes num 5.

 

The maechanism of for loop:

     Initialize expression -> Test -> Body -> Update -> Test -> Body -> Update .................continues until test expression is false.

So the values will be :

    Initialize expression (returned 7, num = 6)-> Test (returned 6, num = 5) ->

    Body (returned 5 printed, num = 4  ) ->

    Update (returned 4, num = 3) -> Test (returned 3, num = 2) ->

    Body (returned 2 printed, num = 1) ->

    Update (returned 1, num = 0) -> Test (returned 0 You are terminated, num = -1) .

Values printed 52

• edited by
Answer:
Position:
Show:

Related questions

41 41 votes
6 answers 6 answers
25.6k
25.6k views
Arjun asked Feb 7, 2019
25,576 views
Consider the following C program:#include <stdio.h int main() { float sum = 0.0, j=1.0, i=2.0; while (i/j 0.0625) { j=j+j; sum=sum+i/j; printf("%f\n", sum); } return 0; ...
44 44 votes
2 answers 2 answers
23.3k
23.3k views
Arjun asked Feb 7, 2019
23,324 views
Consider the following C program:#include <stdio.h int main() { int a[] = {2, 4, 6, 8, 10}; int i, sum=0, *b=a+4; for (i=0; i<5; i++) sum=sum+(*b-i)-*(b-i); printf("%d\n"...
38 38 votes
10 answers 10 answers
23.5k
23.5k views
Arjun asked Feb 7, 2019
23,516 views
Consider the following C program:#include <stdio.h int main() { int arr[]={1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 5}, *ip=arr+4; printf(“%d\n”, ip ); return 0; }The number t...
36 36 votes
5 answers 5 answers
16.8k
16.8k views
Arjun asked Feb 7, 2019
16,815 views
Consider the following C program :#include<stdio.h int jumble(int x, int y){ x = 2*x+y; return x; } int main(){ int x=2, y=5; y=jumble(y,x); x=jumble(y,x); printf("%d \n"...