Friday, August 10, 2018

C Questions And Answers – 2018C10

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:

 

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

 

main()

{

int i;

i = abc();

printf("%d",i);

}

abc()

{

     _AX = 1000;

}

 

Answer:

                   1000

 

Explanation:

Normally the return value from the function is through the information from the accumulator. Here _AH is the pseudo global variable denoting the accumulator. Hence, the value of the accumulator is set 1000 so the function returns value 1000.

 

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

 

int i;

main(){

int t;

for ( t=4;scanf("%d",&i)-t;printf("%d\n",i))

 

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

}

// If the inputs are 0,1,2,3 find the o/p

 

Answer:

4--0

3--1

2--2

 

Explanation:

Let us assume some x= scanf("%d",&i)-t the values during execution will be,

t i x

4 0 -4

3 1 -2

2 2 0

 

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

 

main(){

int a= 0;int b = 20;char x =1;char y =10;

if(a,b,x,y)

printf("hello");

}

 

Answer:

                   hello

 

Explanation:

The comma operator has associativity from left to right. Only the rightmost value is returned and the other values are evaluated and ignored. Thus the value of last variable y is returned to check in if.

Since it is a nonzero value if becomes true so, "hello" will be printed.

 

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

 

main(){

unsigned int i;

for(i=1;i>-2;i--)

printf("c aptitude");

}

 

Explanation:

i is an unsigned integer. It is compared with a signed value. Since the both types doesn't match, signed is promoted to unsigned value. The unsigned equivalent of -2 is a huge value so condition becomes false and control comes out of the loop.

 

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

 

In the following pgm add a stmt in the function fun such that the address Of 'a' gets stored in 'j'.

 

main(){

int * j;

void fun(int **);

fun(&j);

}

void fun(int **k) {

int a =0;

/* add a stmt here*/

}

 

Answer:

                   *k = &a

 

Explanation:

The argument of the function is a pointer to a pointer.

 

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

 

What are the following notations of defining functions known as?

 

i. int abc(int a,float b)

{

/* some code */

}

 

ii. int abc(a,b)

  int a; float b;

{

/* some code*/

}

 

Answer:

i. ANSI C notation

ii. Kernighan & Ritche notation

 

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

 

main()

{

char *p;

p="%d\n";

p++;

p++;

printf(p-2,300);

}

 

Answer:

                   300

 

Explanation:

The pointer points to % since it is incremented twice and again decremented by 2, it points to '%d\n' and 300 is printed.

 

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

 

main(){

char a[100];

a[0]='a';a[1]]='b';a[2]='c';a[4]='d';

abc(a);

     }

abc(char a[]){

a++;

printf("%c",*a);

a++;

printf("%c",*a);

}

 

Explanation:

The base address is modified only in function and as a result a points to 'b' then after incrementing to 'c' so bc will be printed.

 

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

 

func(a,b)

int a,b;

{

     return( a= (a==b) );

}

 

main()

{

int process(),func();

printf("The value of process is %d !\n ",process(func,3,6));

}

process(pf,val1,val2)

int (*pf) ();

int val1,val2;

{

     return((*pf) (val1,val2));

}

 

Answer:

                   The value if process is 0 !

 

Explanation:

The function 'process' has 3 parameters - 1, a pointer to another function 2 and 3, integers. When this function is invoked from main, the following substitutions for formal parameters take place: func for pf, 3 for val1 and 6 for val2.

 

This function returns the result of the operation performed by the function 'func'. The function func has two integer parameters. The formal parameters are substituted as 3 for a and 6 for b. since 3 is not equal to 6, a==b returns 0. therefore the function returns 0 which in turn is returned by the function 'process'.

 

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

 

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

No comments:

Post a Comment