Wednesday, February 22, 2012

C question set 4


1-----------------------------------------------------------------------------------------

What are the following notations of defining functions known as?
int abc(int a,float b)
{
/* some code */
}
int abc(a,b)
int a; float b;
{
/* some code*/
}
Answer:


i. ANSI C notation 
ii. Kernighan & Ritche notation (K&R Notation)


2-----------------------------------------------------------------------------------------


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.


3-----------------------------------------------------------------------------------------

main()
{
 int i;
 i = abc();
 printf("%d",i);
}
abc()
{
 _AX = 1000;
}
Answer: 1000
Explanation:< blockquote>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.

4-----------------------------------------------------------------------------------------

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



5--------------------------------------------------------------------------------------------

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.


6----------------------------------------------------------------------------------------------

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.



7------------------------------------------------------------------------------------------------

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


8-----------------------------------------------------------------------------------------------

void main()
{
void *v;
int integer=2;
int *i=&integer;
v=i;
printf("%d",(int*)*v);
}
Answer:

Compiler Error. We cannot apply indirection on type void*.
Explanation:

Void pointer is a generic pointer type. No pointer arithmetic can be done on it. Void pointers are normally used for,
Passing generic pointers to functions and returning such pointers.
As a intermediate pointer type.
Used when the exact pointer type will be known at a later point of time.

9--------------------------------------------------------------------------------------------------

void main()
{
int i=i++,j=j++,k=k++;
printf("%d%d%d",i,j,k);
}
Answer:

Garbage values.
Explanation:

An identifier is available to use in program code from the point of its declaration. So expressions such
 as i = i++ are valid statements. The i, j and k are automatic variables and so they contain some garbage
 value. Garbage in is garbage out (GIGO).


10---------------------------------------------------------------------------------------------------

void main()
{
static int i=i++, j=j++, k=k++;
printf("i = %d j = %d k = %d", i, j, k);
}
Answer:

i = 1 j = 1 k = 1
Explanation:

Since static variables are initialized to zero by default.

No comments:

Post a Comment