edited by
38,097 views
115 115 votes

The output of executing the following C program is _______________ .

#include<stdio.h>

int total(int v) {
    static int count = 0;
    while(v) {
        count += v&1;
        v >>= 1;
    }
    return count;
}

void main() {
    static int x=0;
    int i=5;
    for(; i>0; i--) {
        x = x + total(i);
    }
    printf("%d\n", x);
}

8 Answers

Best answer
88 88 votes
// inside total()

while(v) {
        count += v&1;   \\ check the lowest bit of v
        v >>= 1;        \\ or v = v >> 1 : right shift the bit pattern of v
}

This piece of code will count the no of set bits in $v$. 


In the main function, i values goes from $5$ to $1$, So there will be $5$ calls to total().

Each call to total(i) counts the no of set bits in i. But the count is a static variable,

So, total(i) = Total no of set bits in all $i \leq 5$. 


$\begin{align*} & \text{x} = \sum_{i=1}^{5}\left [ \text{ total}\left ( i \right ) \right ] = \color{blue}{2+3+5+6+7} = \color{red}{\bf 23}\\ \end{align*}$

edited by
49 49 votes

Answer: 23

 

24 24 votes

Ans:23

total function count no. of 1's in input,but also remember previous inputs.

5--0101

4--0100

3--0011

2--0010

1-0000

TOTAL(5)-->COUNT=2

TOTAL(4)-->2+1=3,COUNT=3

TOTAL(3)-->3+2=5,COUNT=5

TOTAL(2)-->5+1=6,COUNT=6

TOTAL(1)-->6+1=7,COUNT=7

in the main it add all the values of outer loop--->2+3+5+6+7=23

10 10 votes

The code with the full explanation is given below.

int total(int v)
{
  static int count=0; /* initialized ONLY ONCE because of the 'static' keyword */ 
                      /* it can be never be initialized again. */
                      /* So the value of count will be cumulative. */
  while(v)
  {
      count += v&1; /* v&1 returns the Least Significant Bit (LSB) */
                    /* of the binary representation of v.*/
                    /* So v&1 has the value either 0 or 1 */
      
      v >>=1;   /* v is shifted to right meaning that v = v/2 */
  }
  /* So the value of count will be the number of 1's */ 
  /* in the binary representation of v*/
  return count;
}

/*So the value of total(5)=2 because 5 is 101 in binary which has two 1's. */
/*Similarly the value of total(4)=1 because 4 is 100 in binary which one 1. */
/*But calling total(5) and total(4) one after another, total(4)=2+1=3 because */
/*the count variable in the function is cumulative.  */

void main()
{
    static int x=0;
    int i=5;
    for(; i>0; i--)
    {
        x = x +total(i); /* x = total(5)+total(4)+total(3)+total(2)+total(1) */
                         /* x = 2 + 3 + 5 + 6 + 7 */
                         /* x = 23  */
    }
    printf("%d\n", x);  /*It will give the output as 23.*/
}

 

edited by
6 6 votes

$main$

$\fbox{static x=0}$$\fbox{i=5}$

$for(;5>0;i--)$

$x=0+total(5)$

                    $\downarrow$

$\fbox{static count=0}$

$1.while(5)\{$

$count=0+101\&001$

$count=0+1$

$\fbox{static count=1}$

$v=101>>1//right\ shift$

$v=010$

$2.while(2)\{$

$count=1+010\&001$

$count=1+0$

$\fbox{static count=1}$

$v=010>>1//right\ shift$

$v=001$

$3.while(1)\{$

$count=1+001\&001$

$count=1+1$

$\fbox{static count=2}$

$v=001>>1//right\ shift$

$v=000$

$while(0)//condition\ false$

$return\ count;$

$\downarrow$

$main()$

$x=0+2$

$\fbox{static x=2}$


Similary do for:

$x=2+total(4)$

$\fbox{static x=5}$

$x=5+total(3)$

$\fbox{static x=10}$

$x=10+total(2)$

$\fbox{static x=16}$

$x=16+total(1)$

$\fbox{static x=23}$

$Ans: 23$

1 1 vote

 

iBinary# of 1stotal(i) returns
510122
410013
301125
201016
100117

 

Explanation:


total(i) counts bits in i and adds to a static counter.

 Each call returns the cumulative bit count so far.
 

x = 2 + 3 + 5 + 6 + 7 = 23

Answer:
Position:
Show:

Related questions

161 161 votes
11 answers 11 answers
44.0k
44.0k views
srestha asked Feb 14, 2017
43,950 views
Consider the following C program.#include<stdio.h #include<string.h void printlength(char *s, char *t) { unsigned int c=0; int len = ((strlen(s) - strlen(t)) c) ? strlen...
176 176 votes
10 answers 10 answers
42.0k
42.0k views
Arjun asked Feb 14, 2017
41,979 views
Consider the C functions foo and bar given below:int foo(int val) { int x=0; while(val 0) { x = x + foo(val ); } return val; }int bar(int val) { int x = 0; while(val 0)...
92 92 votes
12 answers 12 answers
34.1k
34.1k views
Arjun asked Feb 14, 2017
34,104 views
Consider the following two functions.void fun1(int n) { if(n == 0) return; printf("%d", n); fun2(n - 2); printf("%d", n); } void fun2(int n) { if(n == 0) return; printf("...
143 143 votes
11 answers 11 answers
53.3k
53.3k views
Arjun asked Feb 14, 2017
53,297 views
Consider the following C code:#include<stdio.h int *assignval (int *x, int val) { *x = val; return x; } void main () { int *x = malloc(sizeof(int)); if (NULL == x) return...