C Programming - Expressions - Discussion
Discussion Forum : Expressions - Find Output of Program (Q.No. 3)
3.
What will be the output of the program?
#include<stdio.h>
int main()
{
int i=-3, j=2, k=0, m;
m = ++i || ++j && ++k;
printf("%d, %d, %d, %d\n", i, j, k, m);
return 0;
}
Answer: Option
Explanation:
Step 1: int i=-3, j=2, k=0, m; here variable i, j, k, m are declared as an integer type and variable i, j, k are initialized to -3, 2, 0 respectively.
Step 2: m = ++i || ++j && ++k; here (++j && ++k;) this code will not get executed because ++i has non-zero value.
becomes m = -2 || ++j && ++k;
becomes m = TRUE || ++j && ++k; Hence this statement becomes TRUE. So it returns '1'(one). Hence m=1.
Step 3: printf("%d, %d, %d, %d\n", i, j, k, m); In the previous step the value of variable 'i' only increemented by '1'(one). The variable j,k are not increemented.
Hence the output is "-2, 2, 0, 1".
Discussion:
41 comments Page 2 of 5.
Jyoti said:
1 decade ago
Since in OR operator if one of 2 variables r true so the o/p will be true Therefore at first i is non-zero implies true so whole o/p m will become true Hence no need to calculate further so j & k will not be changed
Anup Kumar said:
1 decade ago
@Vijay.
Any non zero value in C is taken as true. Here -2 is true , So there is no need to check for 1 (which is true too) in case of an logical OR (||) operator. So m will receive a true, i.e 1 (value for true in C).
Any non zero value in C is taken as true. Here -2 is true , So there is no need to check for 1 (which is true too) in case of an logical OR (||) operator. So m will receive a true, i.e 1 (value for true in C).
MANIK said:
1 decade ago
In this case j,k are not incremented
because the left part of //(or) is true ,hence the output is '1',whether the right part is 0 or non-zero
since non-zero//zero=1 and also
non-zero//non-zero=1
because the left part of //(or) is true ,hence the output is '1',whether the right part is 0 or non-zero
since non-zero//zero=1 and also
non-zero//non-zero=1
Anu said:
1 decade ago
Eventhough according to the precedence rule the pre increment should be done first then its logical AND and at the end its logical OR this doesnt happen because of compiler optimisation.
Srikanth said:
7 years ago
I think operator precedence of logical AND (&&) is greater than logical OR (||).
First, we have to do logical AND operation and then logical OR operation.
First, we have to do logical AND operation and then logical OR operation.
Vivek said:
1 decade ago
{
int a=10,b=2,c;
a=!(c=c==c)&&++b;
printf("%d",b);
}
Why value of b is 2? Not 3 but if we replace && by || b is 3?
int a=10,b=2,c;
a=!(c=c==c)&&++b;
printf("%d",b);
}
Why value of b is 2? Not 3 but if we replace && by || b is 3?
Bruce Wayne said:
1 decade ago
@ANU.
What is compiler optimization? What should I do? study this as an odd case or will things like this happens with other operators too?
What is compiler optimization? What should I do? study this as an odd case or will things like this happens with other operators too?
Sach said:
8 years ago
According to operator precedence increment operator evaluates first and the logical operators.
So, why values of j and k not incremented?
So, why values of j and k not incremented?
Anchal said:
1 decade ago
I just want to know that arithmetic operator have high priority then logical then why we didn't increment all the values first.
Poonam tiwari said:
1 decade ago
Yes I have same question, why && operator is not evaluated first while it has higher priority then || operator?
Post your comments here:
Quick links
Quantitative Aptitude
Verbal (English)
Reasoning
Programming
Interview
Placement Papers