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);
}
answer to ques 2:
ReplyDeleteoutput "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 (== , >, <, <=, >=,!= ) .
answer to ques 3:
ReplyDeleteAnswer:
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.
Answer:
ReplyDeletemmmm
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].