Tuesday, August 3, 2010

C Question Set 2-9


  1. 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.


 


  1. 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


  1. 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 non zero value if becomes true so, "hello" will be printed.


 


  1. 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.


 


  1. 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.


  1. 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


 


  1. 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.


 


  1. main(){

char a[100];


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


abc(;


}


abc(char a[]){


a++;


printf("%c",*;


a++;


printf("%c",*;


}


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.


  1. 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'.


 


  1. void main(){

static int i=5;


if(--i){


main();


printf("%d ",i);


}


}


Answer:


0 0 0 0


Explanation:


The variable "I" is declared as static, hence memory for I will be allocated for only once, as it encounters the statement. The function main() will be called recursively unless I becomes equal to 0, and since main() is recursively called, so the value of static I ie., 0 will be printed every time the control is returned.

No comments:

Post a Comment