## Programming-for-Output-Problems

Question 1 |

Assume A and B are non zero positive integers. The following code segment

Computes the LCM of two numbers | |

Divides the larger number by the smaller number | |

Computes the GCD of two numbers | |

Finds the smaller of two numbers |

Question 1 Explanation:

→ The above iterative code is computes the GCD of two numbers using euclidean algorithm.

→ The procedure is to subtract smaller number from larger. So that we can reduce larger number then doesn’t change the value of GCD.

→ if we performing number of iterations based on condition the larger of two numbers will end up with GCD.

→ The procedure is to subtract smaller number from larger. So that we can reduce larger number then doesn’t change the value of GCD.

→ if we performing number of iterations based on condition the larger of two numbers will end up with GCD.

Question 2 |

What is the output of the following program ?

z2 | |

z1z2 | |

Compilation error | |

None of these |

Question 2 Explanation:

Question 3 |

Consider the following program
Assuming required header files are included and if the machine in which this program is executed is little-endian, then the output will be

0 | |

99999999 | |

1 | |

unpredictable |

Question 3 Explanation:

Question 4 |

Consider the following declaration:

person.name +2 | |

kd → (name +2 ) | |

*((*kd).name + 2 ) | |

either (a) or (b), but not (c) |

Question 4 Explanation:

*(kd -> name +2) /* this is wrong statement */

We have to write *((*kd).name+2).

Note: They are specifically asked about a value stored at that location of the string by using "*" outside the brackets. Otherwise, option A and B would be correct.

We have to write *((*kd).name+2).

Note: They are specifically asked about a value stored at that location of the string by using "*" outside the brackets. Otherwise, option A and B would be correct.

Question 5 |

Consider the following C program
How many lines of output does this program produce?

0-9 lines of output | |

10-19 lines of output | |

20-29 lines of output | |

More than 29 lines of output |

Question 5 Explanation:

→ Since there is one line of output for each loop, we need to determine the number of

times the loop executes. Since i is constant, we need to see the growth of j only.

→ Let the initial value of j be denoted by J1 and the subsequent values by J

→ J

n = 1, 2, ...

→ The loop will execute as long as i/j=2.0/2

→ Thus the loop will execute 11 times which is equivalent to say there will be 11 lines of output.

times the loop executes. Since i is constant, we need to see the growth of j only.

→ Let the initial value of j be denoted by J1 and the subsequent values by J

_{n}for n= 2, 3,... so that J denotes a progression of j. We see that J_{n}= 2J_{n-1};→ J

_{1}= 2, which gives J_{n}= 2^{n-1};n = 1, 2, ...

→ The loop will execute as long as i/j=2.0/2

^{n-1}>0.001 which gives n<3log_{2}10+2 (or) n<11.97.→ Thus the loop will execute 11 times which is equivalent to say there will be 11 lines of output.

Question 6 |

What is the output of this C++ program?

910 | |

920 | |

870 | |

900 |

Question 6 Explanation:

Step-1: In main function, number variable has been initialized to 30.

Step-2: We pass address of number as parameters in the square function. As per the concept of function overloading in C++ the second square function will be executed.

Step-3: --(*y) will be executed first since decrement operator has the higher precedence than multiplication.

*x = (*x) * --(*y);

*x = 30 * 29;

*x = 870

Note: x is a pointer variable and it holds the address of the variable number.

Step-2: We pass address of number as parameters in the square function. As per the concept of function overloading in C++ the second square function will be executed.

Step-3: --(*y) will be executed first since decrement operator has the higher precedence than multiplication.

*x = (*x) * --(*y);

*x = 30 * 29;

*x = 870

Note: x is a pointer variable and it holds the address of the variable number.

Question 7 |

**Consider the following C function:**

int f(int n)

{

static int i = 1;

if(n >= 5) return n;

n = n+i;

i++;

return f(n);

}

The value returned by f(1) is

5
| |

6 | |

7 | |

8 |

Question 7 Explanation:

The variable “i” is static variable and the value of that variable will be retained between multiple function calls.

first line of f() is executed only once.

Depending upon the value “n” and “i”, the function f() will until n>=5.

You can find the tracing of function f() from the below Execution of f(1)

i = 1

n = 2

i = 2

Call f(2)

i = 2

n = 4

i = 3

Call f(4)

i = 3

n = 7

i = 4

Call f(7)

since n >= 5 return n(7) with return value = 7

first line of f() is executed only once.

Depending upon the value “n” and “i”, the function f() will until n>=5.

You can find the tracing of function f() from the below Execution of f(1)

i = 1

n = 2

i = 2

Call f(2)

i = 2

n = 4

i = 3

Call f(4)

i = 3

n = 7

i = 4

Call f(7)

since n >= 5 return n(7) with return value = 7

Question 8 |

**Consider the following code segment**

for (int k=0; k<20; k=k+2)

{

if (k % 3 == 1)

system.out.print(k+ " ")

}

What is printed as a result of executing the code segment?

4 16 | |

4 10 16 | |

0 6 12 18 | |

1 4 7 10 13 16 19 |

Question 8 Explanation:

for loop starts from 0 to 20 and increments with 2 at each iteration.

k = 0 % 3 = 0

k = 2 % 3 = 2

k = 4 % 3 = 1 // prints 4

k = 6 % 3 = 0

k = 8 % 3 = 2

k = 10 % 3 = 1 // prints 10

k = 12 % 3 = 0

k = 14 % 3 = 2

k = 16 % 3 = 1 // prints 16

k = 18 % 3 = 0

So, Output is 4 10 16

k = 0 % 3 = 0

k = 2 % 3 = 2

k = 4 % 3 = 1 // prints 4

k = 6 % 3 = 0

k = 8 % 3 = 2

k = 10 % 3 = 1 // prints 10

k = 12 % 3 = 0

k = 14 % 3 = 2

k = 16 % 3 = 1 // prints 16

k = 18 % 3 = 0

So, Output is 4 10 16

Question 9 |

What is the output of this C code?

5 5 5 | |

5 5 junk | |

5 junk junk | |

Compile time error |

Question 9 Explanation:

If we are given p instead of *p then it prints the address of k but we are printing the value of k.

The same rule applies in **m.

Output is 5 5 5

The same rule applies in **m.

Output is 5 5 5

Question 10 |

What will be the output of the following program? Assume that you are running this program in little-endian processor.

1 | |

320 | |

64 | |

Compilation error |

Question 10 Explanation:

Ptr = (char*) &a ; /* It is type casted to char* */

Printf (“%d”, *ptr) ; /* Here *ptr is referring a single character */

Printf (“%d”, *ptr) ;

Output: 64 /* @ ASCII value is 64 */

Note: Assume short a is 2 byte integer.

Printf (“%d”, *ptr) ; /* Here *ptr is referring a single character */

Printf (“%d”, *ptr) ;

Output: 64 /* @ ASCII value is 64 */

Note: Assume short a is 2 byte integer.

Question 11 |

Consider the following segment of C-code:
The number of comparisons made in the execution of the loop for any n > 0 is:

⌊log _{2}n⌋*n | |

n | |

⌊log _{2}n⌋ | |

⌊log _{2}n⌋+1 |

Question 11 Explanation:

Explanation:

Let us consider n=6, then

1<=6 (correct)

2<=6 (correct)

4<=6 (correct)

8<=6 (False)

4 comparisons required

Option A:

⌊log n⌋+1

⌊log 6⌋+1

3+1=4 (correct)

Option B:

n=6 (False)

Option C:

⌊log n⌋

⌊log 6⌋=3 (False)

Option D:

⌊log

⌊log

Let us consider n=6, then

1<=6 (correct)

2<=6 (correct)

4<=6 (correct)

8<=6 (False)

4 comparisons required

Option A:

⌊log n⌋+1

⌊log 6⌋+1

3+1=4 (correct)

Option B:

n=6 (False)

Option C:

⌊log n⌋

⌊log 6⌋=3 (False)

Option D:

⌊log

_{2}n⌋+1⌊log

_{2}6⌋+1=2+1=3 (False)Question 12 |

What is the output of the following C code?

#include

int main()

{

int index;

for(index=1; index<=5; index++)

{

printf("%d", index);

if (index==3)

continue;

}

}

1245 | |

12345 | |

12245 | |

12354 |

Question 12 Explanation:

The continue statement is used inside loops. When a continue statement is encountered inside a loop, control jumps to the beginning of the loop for next iteration, skipping the execution of statements inside the body of loop for the current iteration.

In the given code, there are no statements after continue statement , So it won’t effect on the output.

The loop will executes for five iterations,For each iteration it will print corresponding value i.e; 12345.

In the given code, there are no statements after continue statement , So it won’t effect on the output.

The loop will executes for five iterations,For each iteration it will print corresponding value i.e; 12345.

Question 13 |

Consider the following C code.

#include

#include

void main()

{

double pi = 3.1415926535;

int a = 1;

int i;

for(i=0; i < 3; i++)

if(a = cos(pi * i/2) )

printf("%d ",1);

else printf("%d ", 0);

}

What would the program print?

#include

#include

void main()

{

double pi = 3.1415926535;

int a = 1;

int i;

for(i=0; i < 3; i++)

if(a = cos(pi * i/2) )

printf("%d ",1);

else printf("%d ", 0);

}

What would the program print?

000 | |

010 | |

101 | |

111 |

Question 13 Explanation:

→The for loop will execute three times for a given i values 0,1,2.

→For a given i = 0:

a = cos(pi * 0/2) [ PI*0 is 0]

a = cos(0) = 1, if condition true and it will print 1

→For a given i = 1

a = cos (pi/2) [pi*1 is pi]

a=cos(1.57075) whose value approximately equal to zero

a = 0, Here the condition is false then else part will execute and it will print 0

→For i = 2

a = cos(pi) [pi*2/2 is nothing but pi]

a = -1, ,Here also condition is true and it will execute if part and it will print “1”

→Finally it will print 101.

→For a given i = 0:

a = cos(pi * 0/2) [ PI*0 is 0]

a = cos(0) = 1, if condition true and it will print 1

→For a given i = 1

a = cos (pi/2) [pi*1 is pi]

a=cos(1.57075) whose value approximately equal to zero

a = 0, Here the condition is false then else part will execute and it will print 0

→For i = 2

a = cos(pi) [pi*2/2 is nothing but pi]

a = -1, ,Here also condition is true and it will execute if part and it will print “1”

→Finally it will print 101.

Question 14 |

Write the output of the following C program

#include <stdio.h>

int main (void)

{

int shifty;

shifty = 0570;

shifty = shifty >>4;

shifty = shifty <<6;

printf("the value of shifty is %o",shifty);

}

#include <stdio.h>

int main (void)

{

int shifty;

shifty = 0570;

shifty = shifty >>4;

shifty = shifty <<6;

printf("the value of shifty is %o",shifty);

}

the value of shifty is 1500 | |

the value of shifty is 4300 | |

the value of shifty is 5700 | |

the value of shifty is 2700 |

Question 14 Explanation:

Given, shifty = 0570; // number starts with 0 means that number is octal number.

(0570)8 = (000 101 111 000)

shifty = shifty >>4 ( >> right shift operator where we need to shift the 4 bits towards right side means discard last four bits )

After right shifting 4 bits the shifty consists of the following digits

shifty = (000 000 010 111)

shifty = shifty <<6( << left shift operator where we need to shift the 6 bits towards left side means add si bits to the end of the binary number. So the binary number becomes as follows shifty = (010 111 000 000)

= (2700)

(0570)8 = (000 101 111 000)

_{2}(Converting octal number into binary number)shifty = shifty >>4 ( >> right shift operator where we need to shift the 4 bits towards right side means discard last four bits )

After right shifting 4 bits the shifty consists of the following digits

shifty = (000 000 010 111)

_{2}shifty = shifty <<6( << left shift operator where we need to shift the 6 bits towards left side means add si bits to the end of the binary number. So the binary number becomes as follows shifty = (010 111 000 000)

_{2}= (2700)

_{8}Question 15 |

The following three ‘C’ language statements is equivalent to which single statement?

y=y+1;

z=x+y;

x=x+1

y=y+1;

z=x+y;

x=x+1

z = x + y + 2; | |

z = (x++) + (++y); | |

z = (x++) + (y++); | |

z = (x++) + (++y) + 1; |

Question 15 Explanation:

From the below statements

y=y+1;

z=x+y;

x=x+1

First statement: “y” value is incremented by 1

Second statement : that incremented value is added to x and stored into “z”

Third statement : “y” value is incremented by 1

z = (x++) + (++y);

X++ post-increment , so it will perform action which is addition and later the value of “x” is incremented .

++y pre-increment , here first value “y” is incremented and updated value is added to value x.

Finally the result will store into z.

The sequence of operations you can find from the below statements

z=x+y; //z = x + (++y)

x=x+1 //z = (x++) + (++y)

y=y+1;

z=x+y;

x=x+1

First statement: “y” value is incremented by 1

Second statement : that incremented value is added to x and stored into “z”

Third statement : “y” value is incremented by 1

z = (x++) + (++y);

X++ post-increment , so it will perform action which is addition and later the value of “x” is incremented .

++y pre-increment , here first value “y” is incremented and updated value is added to value x.

Finally the result will store into z.

The sequence of operations you can find from the below statements

z=x+y; //z = x + (++y)

x=x+1 //z = (x++) + (++y)

Question 16 |

How many lines of output does the following C code produce?

#include<stdio.h>

float i=2.0;

float j=1.0;

float sum = 0.0;

main()

{

while (i/j > 0.001)

{

j+=j;

sum=sum+(i/j);

printf("%f\n", sum);

}

}

#include<stdio.h>

float i=2.0;

float j=1.0;

float sum = 0.0;

main()

{

while (i/j > 0.001)

{

j+=j;

sum=sum+(i/j);

printf("%f\n", sum);

}

}

8 | |

9 | |

10 | |

11 |

Question 16 Explanation:

Iteration-1:

while (1.000000 > 0.001)

{

j=2.0

sum=0+1.000000;

printf("%f\n",sum); /* It will print 1.000000 */

}

Iteration-2: 1.500000

Iteration-3: 1.750000

Iteration-4: 1.875000

Iteration-5: 1.937500

Iteration-6: 1.968750

Iteration-7: 1.984375

Iteration-8: 1.992188

Iteration-9: 1.996094

Iteration-10: 1.998047

Iteration-11: 1.999023

The program will terminate after 11th iteration. So, it print 11 lines.

while (1.000000 > 0.001)

{

j=2.0

sum=0+1.000000;

printf("%f\n",sum); /* It will print 1.000000 */

}

Iteration-2: 1.500000

Iteration-3: 1.750000

Iteration-4: 1.875000

Iteration-5: 1.937500

Iteration-6: 1.968750

Iteration-7: 1.984375

Iteration-8: 1.992188

Iteration-9: 1.996094

Iteration-10: 1.998047

Iteration-11: 1.999023

The program will terminate after 11th iteration. So, it print 11 lines.

Question 17 |

The output of the following code is:

int main()

{

static int x[ ]={1,2,3,4,5,6,7,8}

int i;

for(i=2;i<6;++i)

x[x[i]]=x[i];

for(i=0;i<8;++i)

printf(“%d”,x[i]);

Return 0;

}

int main()

{

static int x[ ]={1,2,3,4,5,6,7,8}

int i;

for(i=2;i<6;++i)

x[x[i]]=x[i];

for(i=0;i<8;++i)

printf(“%d”,x[i]);

Return 0;

}

12244668 | |

11335578 | |

12335578
| |

12343676 |

Question 17 Explanation:

Question 18 |

Consider the following code fragment

void foo(int x, int y)

{

x+=y;

y+=x;

}

main()

{

int x=5.5;

foo(x,x);

}

What is the final value of x in both call by value and call by reference, respectively?

void foo(int x, int y)

{

x+=y;

y+=x;

}

main()

{

int x=5.5;

foo(x,x);

}

What is the final value of x in both call by value and call by reference, respectively?

5 and 16 | |

5 and 12 | |

5 and 20 | |

12 and 20 |

Question 18 Explanation:

__Call by Value:__

The call by value method of passing arguments to a function copies the actual value of an argument into the formal parameter of the function. In this case, changes made to the parameter inside the function have no effect on the argument.

foo(x,x) ---->foo(5,5)

Modification of x and y values won’t effect in the main program, So still x will hold value “5” because the data type is integer.

__Call by Reference:__

The call by reference method of passing arguments to a function copies the address of an argument into the formal parameter. Inside the function, the address is used to access the actual argument used in the call. It means the changes made to the parameter affect the passed argument.

Function call foo(x,x)---foo(5,5) calls the function

void foo(int x, int y)

{

x+=y;

y+=x;

}

Here x and y variables, both pointing to same variable “x” in the main function.

So, if any modification done in the function it automatically reflect in the main function.

x+=y means x=x+y=5+5=10 // The variable “x” of main function will hold value 10 which used by both local variables of x and y

y+=x means u=y+x= 10+10=20 // Y value is 10 because , it point to variable ”x” in the main function.

Question 19 |

Consider the following C declaration

struct

{

short s[5];

union

{

float y;

long z;

}u;

}t;

Assume that the objects of the type short, float and long occupy 2 bytes, 4 bytes and 8 bytes, respectively. The memory requirement for variable t, ignoring alignment consideration, is

struct

{

short s[5];

union

{

float y;

long z;

}u;

}t;

Assume that the objects of the type short, float and long occupy 2 bytes, 4 bytes and 8 bytes, respectively. The memory requirement for variable t, ignoring alignment consideration, is

22 bytes | |

18 bytes | |

14 bytes | |

10 bytes |

Question 19 Explanation:

short [5] = 5×2 = 10
max[float, long] = max [4, 8] = 8
Total = short[5] + max[float,long] = 10+8 = 18

Question 20 |

**Consider the following program fragment**

if(a > b)

if(b > c)

s1;

else

s2;

s2 will be executed if

a <= b | |

b > c | |

b >= c and a <= b | |

a > b and b <= c |

Question 20 Explanation:

Here, possibility to happen “dangling if” error. But according to else statement it is matched with above if statement only.

We can write code segment is like this because to avoid “dangling if”

if(a>b)

{

if(b>c)

{ s1; }

else

{ s2; }

}

→ To execute s2, it (a>b) should be TRUE. And it (b>c) should be FALSE.

Hence, Option-D is correct

We can write code segment is like this because to avoid “dangling if”

if(a>b)

{

if(b>c)

{ s1; }

else

{ s2; }

}

→ To execute s2, it (a>b) should be TRUE. And it (b>c) should be FALSE.

Hence, Option-D is correct

Question 21 |

If n has 3, then the statement a[++n]=n++;

assigns 3 to a[5] | |

assigns 4 to a[5] | |

assigns 4 to a[4] | |

what is assigned is compiler dependent |

Question 21 Explanation:

Given statement consists of three operators which are pre-increment , post-increment and equal to operator. According to operator precedence and associativity, the order of operators evaluation is post-increment,pre-increment and finally equal to operator.
But one variable value is modifying multiple times in the same expression means that behaviour is undefined behaviour which is compiler dependent.

Question 22 |

The following program

main()

{

inc();

inc();

inc();

}

inc()

{

static int x;

printf("%d", ++x);

}

main()

{

inc();

inc();

inc();

}

inc()

{

static int x;

printf("%d", ++x);

}

prints 012 | |

prints 123 | |

prints 3 consecutive, but unpredictable numbers | |

prints 111 |

Question 22 Explanation:

In this question, we have to remind one point about “static” storage class.

Static storage class by default value is 0.

Step-1: We are calling inc( ) in main function. So, it will enter into inc() function.

Here, we are using pre increment function, so it replaced 0 with 1.

Step-2: Second inc() in main function. So, it will enter into inc() function.

Here, we are using pre increment function, so it replaced 1 with 2.

Step-3: Third inc() in main function. So, it will enter into inc() function.

Here, we are using pre increment function, so it replaced 2 with 3.

Note: The static storage class instructs the compiler to keep a local variable in existence during the life-time of the program instead of creating and destroying it each time it comes into and goes out of scope.

Static storage class by default value is 0.

Step-1: We are calling inc( ) in main function. So, it will enter into inc() function.

Here, we are using pre increment function, so it replaced 0 with 1.

Step-2: Second inc() in main function. So, it will enter into inc() function.

Here, we are using pre increment function, so it replaced 1 with 2.

Step-3: Third inc() in main function. So, it will enter into inc() function.

Here, we are using pre increment function, so it replaced 2 with 3.

Note: The static storage class instructs the compiler to keep a local variable in existence during the life-time of the program instead of creating and destroying it each time it comes into and goes out of scope.

Question 23 |

Consider the following program fragment

i=6720;

j=4;

while (i%j==0)

{

i=i/j;

j=j+1;

}

On termination j will have the value

i=6720;

j=4;

while (i%j==0)

{

i=i/j;

j=j+1;

}

On termination j will have the value

4 | |

8 | |

9 | |

6720 |

Question 23 Explanation:

Initial values of i and j are 6720 and 4 respectively

i=6720

j=4

i%j==0 which is 6720%4 ==0 condition is true then

i=i/j=6720/4=1680

j=j+1=5

i=1630

j=5

i%j==0 which is 1680%5 ==0 condition is true then

i=i/j=1630/5=336

j=j+1=6

j=6

i%j==0 which is 336%6 ==0 condition is true then

i=i/j=336/6=56

j=j+1=7

i=56

j=7

i%j==0 which is 56%7 ==0 condition is true then

i=i/j=56/7=8

j=j+1=8

i=8

j=8

i%j==0 which is 8%8 ==0 condition is true then

i=i/j=8/8=1

j=j+1=9

i=1

j=9

i%j==0 which is 1%9 ==0 condition is false.

At this iteration, the “j” value is 9.

__Iteration 1:__i=6720

j=4

i%j==0 which is 6720%4 ==0 condition is true then

i=i/j=6720/4=1680

j=j+1=5

__Iteration-2:__i=1630

j=5

i%j==0 which is 1680%5 ==0 condition is true then

i=i/j=1630/5=336

j=j+1=6

__Iteration-3:__i=336j=6

i%j==0 which is 336%6 ==0 condition is true then

i=i/j=336/6=56

j=j+1=7

__Iteration-4:__i=56

j=7

i%j==0 which is 56%7 ==0 condition is true then

i=i/j=56/7=8

j=j+1=8

__Iteration-5:__i=8

j=8

i%j==0 which is 8%8 ==0 condition is true then

i=i/j=8/8=1

j=j+1=9

__Iteration-6:__i=1

j=9

i%j==0 which is 1%9 ==0 condition is false.

At this iteration, the “j” value is 9.

Question 24 |

Consider the following declaration:

int a, *b=&a, **c=&b;

The following program fragment

a=4;

**c=5;

int a, *b=&a, **c=&b;

The following program fragment

a=4;

**c=5;

does not change the value of a | |

assigns address of c to a | |

assigns the value of b to a | |

assigns 5 to a |

Question 24 Explanation:

In the given program fragment, three variables are there

Ordinary variable -a // value will be stored

Pointer variable -b // address of variable will be stored

Pointer to pointer variable(double pointer) -c // address of pointer variable will stored.

a=4 means storing/assigning value to “a”.

**c means value at(value at(c)) =value at(value at(&b)) (c holds address of pointer “b”)

=value at(&a) (b holds the address of “a”)

Memory location of variable “a”, value 5 is stored/assigned into the variable.

Ordinary variable -a // value will be stored

Pointer variable -b // address of variable will be stored

Pointer to pointer variable(double pointer) -c // address of pointer variable will stored.

a=4 means storing/assigning value to “a”.

**c means value at(value at(c)) =value at(value at(&b)) (c holds address of pointer “b”)

=value at(&a) (b holds the address of “a”)

Memory location of variable “a”, value 5 is stored/assigned into the variable.

Question 25 |

The output of the following program is

main()

{

static int x[] = {1,2,3,4,5,6,7,8}

int i;

for (i=2; i<6; ++i)

x[x[i]]=x[i];

for (i=0; i<8; ++i)

printf("%d", x[i]);

}

main()

{

static int x[] = {1,2,3,4,5,6,7,8}

int i;

for (i=2; i<6; ++i)

x[x[i]]=x[i];

for (i=0; i<8; ++i)

printf("%d", x[i]);

}

1 2 3 3 5 5 7 8 | |

1 2 3 4 5 6 7 8 | |

8 7 6 5 4 3 2 1 | |

1 2 3 5 4 6 7 8 |

Question 25 Explanation:

For loop will execute for the i value 2,3,4,5

For i = 2, x[x[2]] = x[2]

= x[3] = 3 // since x[2] = 3

The array elements representation are

Question 26 |

Which of the following has the compilation error in C?

int n=17; | |

char c=99; | |

float f=(float)99.32; | |

#include |

Question 26 Explanation:

Option A: General declaration of integer variable.

Option B: General declaration of character variable.

Option C: It is type casting. But given cast also same type.

Option D: We have to include a file otherwise it treated as compiler error.

Option B: General declaration of character variable.

Option C: It is type casting. But given cast also same type.

Option D: We have to include a file otherwise it treated as compiler error.

Question 27 |

The for loop

for (i=0; i<10; ++i)

printf("%d", i&1);

prints:

for (i=0; i<10; ++i)

printf("%d", i&1);

prints:

0101010101 | |

0111111111 | |

0000000000 | |

1111111111 |

Question 27 Explanation:

The loop will execute for 10 times, from “i” value 0 to 9

“&” is bitwise AND operator.

For a given i=0 , the value is 0&1 is 0000 & 0001 which is 0

i=1, 0001 & 0001 which is 1

i=2 , 0010 & 0001 which is 0

i=3 0011 & 0001 which is 1

i=4 , 0100 & 0001 which is 0

i=5 0101 & 0001 which is 1

i=6 , 1100 & 0001 which is 0

i=7 0111 & 0001 which is 1

i=8 , 1000 & 0001 which is 0

i=9 1001 & 0001 which is 1

So the output is 0101010101(from i=0 to 9)

“&” is bitwise AND operator.

For a given i=0 , the value is 0&1 is 0000 & 0001 which is 0

i=1, 0001 & 0001 which is 1

i=2 , 0010 & 0001 which is 0

i=3 0011 & 0001 which is 1

i=4 , 0100 & 0001 which is 0

i=5 0101 & 0001 which is 1

i=6 , 1100 & 0001 which is 0

i=7 0111 & 0001 which is 1

i=8 , 1000 & 0001 which is 0

i=9 1001 & 0001 which is 1

So the output is 0101010101(from i=0 to 9)

Question 28 |

What will be the output of following?

main()

{

static int a=3;

printf("%d",a--);

if(a)

main();

}

main()

{

static int a=3;

printf("%d",a--);

if(a)

main();

}

3 | |

3 2 1 | |

3 3 3 | |

Program will fall in continuous loop and print 3 |

Question 28 Explanation:

Step-1: initial a=3 but we are given storage class is static.

Step-2: In printf( ) we are given post decrement. So, it will print 3 then decrements.

Step-3: if(2) then we are calling main() function, a=2 because of static otherwise it will be 3 only.

Step-4: It will print 2 and next iteration will print 1.

Step-2: In printf( ) we are given post decrement. So, it will print 3 then decrements.

Step-3: if(2) then we are calling main() function, a=2 because of static otherwise it will be 3 only.

Step-4: It will print 2 and next iteration will print 1.

There are 28 questions to complete.