Sunday, August 12, 2018

C Questions And Answers – 2018C12

There are many commonly asked questions regarding C programming language. Below are some collected such question-answer examples. The questions are usually related with 32-bit system, Turbo C IDE in windows or GCC under Linux environment [not always].

For more such examples, click C_Q&A label.

Predict the output or error(s) for the following:

 

-------------------------------------------------------------------------------------------------

 

#include<conio.h>

main()

{

int x,y=2,z,a;

if(x=y%2) z=2;

a=2;

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

}

 

Answer:

                   Garbage-value 0

 

Explanation:

The value of y%2 is 0. This value is assigned to x. The condition reduces to if (x) or in other words if(0) and so z goes uninitialized.

 

Thumb Rule: Check all control paths to write bug free code.

 

-------------------------------------------------------------------------------------------------

 

main()

{

int a[10];

printf("%d",*a+1-*a+3);

}

 

Answer:

                   4

 

Explanation:

*a and -*a cancels out. The result is as simple as 1 + 3 = 4 !

 

-------------------------------------------------------------------------------------------------

 

#define prod(a,b) a*b

main()

{

int x=3,y=4;

printf("%d",prod(x+2,y-1));

}

 

Answer:

                   10

 

Explanation:

The macro expands and evaluates to as:

                   x+2*y-1 => x+(2*y)-1 => 10

 

-------------------------------------------------------------------------------------------------

 

main()

{

unsigned int i=65000;

while(i++!=0);

printf("%d",i);

}

 

Answer:

                   1

 

Explanation:

Note the semicolon after the while statement. When the value of i becomes 0 it comes out of while loop. Due to post-increment on i the value of i while printing is 1.

 

-------------------------------------------------------------------------------------------------

 

main()

{

int i=0;

while(+(+i--)!=0)

i-=i++;

printf("%d",i);

}

 

Answer:

                   -1

 

Explanation:

Unary + is the only dummy operator in C. So it has no effect on the expression and now the while loop is, while(i--!=0) which is false and so breaks out of while loop. The value –1 is printed due to the post-decrement operator.

 

-------------------------------------------------------------------------------------------------

 

main()

{

float f=5,g=10;

enum{i=10,j=20,k=50};

printf("%d\n",++k);

printf("%f\n",f<<2);

printf("%lf\n",f%g);

printf("%lf\n",fmod(f,g));

}

 

Answer:

Line no 5: Error: Lvalue required

Line no 6: Cannot apply leftshift to float

Line no 7: Cannot apply mod to float

 

Explanation:

Enumeration constants cannot be modified, so you cannot apply ++.

Bit-wise operators and % operators cannot be applied on float values.

fmod() is to find the modulus values for floats as % operator is for ints.

 

-------------------------------------------------------------------------------------------------

 

main()

{

int i=10;

void pascal f(int,int,int);

f(i++,i++,i++);

printf(" %d",i);

}

void pascal f(integer :i,integer:j,integer :k)

{

     write(i,j,k);

}

 

Answer:

Compiler error: unknown type integer

Compiler error: undeclared function write

 

Explanation:

Pascal keyword doesn’t mean that pascal code can be used. It means that the function follows Pascal argument passing mechanism in calling the functions.

 

-------------------------------------------------------------------------------------------------

 

void pascal f(int i,int j,int k)

{

     printf(“%d %d %d”,i, j, k);

}

void cdecl f(int i,int j,int k)

{

     printf(“%d %d %d”,i, j, k);

}

main()

{

int i=10;

f(i++,i++,i++);

printf(" %d\n",i);

i=10;

f(i++,i++,i++);

printf(" %d",i);

}

 

Answer:

10 11 12 13

12 11 10 13

 

Explanation:

Pascal argument passing mechanism forces the arguments to be called from left to right. cdecl is the normal C argument passing mechanism where the arguments are passed from right to left.

 

-------------------------------------------------------------------------------------------------

 

What is the output of the program given below

main()

{

signed char i=0;

for(;i>=0;i++) ;

printf("%d\n",i);

}

 

Answer

                   -128

 

Explanation

Notice the semicolon at the end of the for loop. THe initial value of the i is set to 0. The inner loop executes to increment the value from 0 to 127 (the positive range of char) and then it rotates to the negative value of -128. The condition in the for loop fails and so comes out of the for loop. It prints the current value of i that is -128.

 

-------------------------------------------------------------------------------------------------

 

main()

{

unsigned char i=0;

for(;i>=0;i++) ;

printf("%d\n",i);

}

 

Answer

                   infinite loop

 

Explanation

The difference between the previous question and this one is that the char is declared to be unsigned. So the i++ can never yield negative value and i>=0 never becomes false so that it can come out of the for loop.

 

-------------------------------------------------------------------------------------------------

 

…till next post, bye-bye & take care.

No comments:

Post a Comment