Wednesday, September 5, 2007

Apptitude and Technical Questions for interview

can anyone tell the output of the following c program? try to reply with explanation ... all the best..

1. main()
{
char s[ ]="man";
int i;
for(i=0;s[ i ];i++)
printf("\n%c%c%c%c",s[ i ],*(s+i),*(i+s),i[s]);
}

2. main()
{
float me = 1.1;
double you = 1.1;
if(me==you)
printf("I love U");
else
printf("I hate U");
}



3. main()
{
int i=-1,j=-1,k=0,l=2,m;
m=i++&&j++&&k++||l++;
printf("%d %d %d %d %d",i,j,k,l,m);
}

3 comments:

  1. answer to ques 2:

    output "i hate u"

    For floating point numbers (float, double, long double) the values
    cannot be predicted exactly. Depending on the number of bytes, the precession
    with of the value represented varies. Float takes 4 bytes and long double takes
    10 bytes. So float stores 0.9 with less precision than long double.
    Rule of Thumb:
    Never compare or at-least be cautious when using floating point
    numbers with relational operators (== , >, <, <=, >=,!= ) .

    ReplyDelete
  2. answer to ques 3:

    Answer:
    0 0 1 3 1
    Explanation :
    Logical operations always give a result of 1 or 0 . And also the
    logical AND (&&) operator has higher priority over the logical OR (||) operator. So
    the expression ‘i++ && j++ && k++’ is executed first. The result of this
    expression is 0 (-1 && -1 && 0 = 0). Now the expression is 0 || 2 which
    evaluates to 1 (because OR operator always gives 1 except for ‘0 || 0’
    combination- for which it gives 0). So the value of m is 1. The values of other
    variables are also incremented by 1.

    ReplyDelete
  3. Answer:
    mmmm
    aaaa
    nnnn
    Explanation:
    s[i], *(i+s), *(s+i), i[s] are all different ways of expressing the
    same idea. Generally array name is the base address for that array. Here s is
    the base address. i is the index number/displacement from the base address. So,
    indirecting it with * is same as s[i]. i[s] may be surprising. But in the case of C
    it is same as s[i].

    ReplyDelete