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;
}
2, 2, 0, 1
1, 2, 1, 0
-2, 2, 0, 0
-2, 2, 0, 1
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 4 of 5.

Vijaybhupathi said:   1 decade ago
If m=-2||1, then m=true=1; can any body justify it?

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

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.

Ripu said:   1 decade ago
All are giving explanation according to answer, please try it to make it elucidate according to standard of c.

Sindhu said:   1 decade ago
Why the value of j, k are not incremented?

Aahas said:   1 decade ago
I just don't understand how to solve it.

Rahul said:   1 decade ago
Thanks Jyoti. You are correct.

Sushil said:   1 decade ago
But if && and || operator are there, then according to precedence && will be evaluated first.

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

Saravanan said:   1 decade ago
Isn't that the operation goes from right to left ?

As the increment operator is executed from right to left.


Post your comments here:

Your comments will be displayed after verification.