C Programming - Expressions - Discussion

Discussion Forum : Expressions - Find Output of Program (Q.No. 6)
6.
What will be the output of the program?
#include<stdio.h>
int main()
{
    int i=4, j=-1, k=0, w, x, y, z;
    w = i || j || k;
    x = i && j && k;
    y = i || j &&k;
    z = i && j || k;
    printf("%d, %d, %d, %d\n", w, x, y, z);
    return 0;
}
1, 1, 1, 1
1, 1, 0, 1
1, 0, 0, 1
1, 0, 1, 1
Answer: Option
Explanation:

Step 1: int i=4, j=-1, k=0, w, x, y, z; here variable i, j, k, w, x, y, z are declared as an integer type and the variable i, j, k are initialized to 4, -1, 0 respectively.

Step 2: w = i || j || k; becomes w = 4 || -1 || 0;. Hence it returns TRUE. So, w=1

Step 3: x = i && j && k; becomes x = 4 && -1 && 0; Hence it returns FALSE. So, x=0

Step 4: y = i || j &&k; becomes y = 4 || -1 && 0; Hence it returns TRUE. So, y=1

Step 5: z = i && j || k; becomes z = 4 && -1 || 0; Hence it returns TRUE. So, z=1.

Step 6: printf("%d, %d, %d, %d\n", w, x, y, z); Hence the output is "1, 0, 1, 1".

Discussion:
51 comments Page 5 of 6.

Geetha said:   1 decade ago
In step 4 how that answer will come. Please give me explanation.

Purnima said:   1 decade ago
Step 1: i = 4, j = -1, k = 0
Take all values which are greater than or equal to zero as TRUE(T) and which are less than zero as FALSE(F).
Step 2: w = i || j || k
= 4 || -1 || 0
= (T || F) || T
= T || T = T
w = 1
Similarly we get all the expression. Check it out.

Sunitha said:   1 decade ago
@Purnima once check out your logic friend.except zero all the numbers are true.

And friend @Vicky kumar here the logical operators have left to right priority but When more than one logical operator is used in a statement, NOT is evaluated first, then AND, and finally OR)
i=4, j=-1, k=0
Here in statement z = i && j || k
= 4 && -1|| 0
= T && T || F
= T
= T || F
= T
AND FINALLY RETURNS 1. AS 1 INDICATES TRUE

Raji said:   1 decade ago
Please explain about the precedence of && and || operator and also explain the how the second and third step is executed.

Udaya said:   1 decade ago
I think the Logic is like whenever they got OR operator they are not going for further expression as OR operator will return 1 of one operand is 1. And if the operator is && they were executing the whole expression.

Pradip walghude said:   1 decade ago
&& and || are same priority precedence. It execute right to left.

Mukesh Modi said:   1 decade ago
Everyone have doubt in step 4 and step 5.

Here I am clearing your doubt if I am not wrong.

Because of precedence order && got 11 number and || 12 and their associativity is L to R.

Step 4: y = i || j &&k; becomes y = 4 || -1 && 0; Hence it returns TRUE. So, y=1.

when I compiled -1 && 0 it returns T. so i|| T then answer is T.

Step 5: z = i && j || k; becomes z = 4 && -1 || 0; Hence it returns TRUE. So, z=1.

i&&j that is 4&&-1 returns T. so T || k then answer is T.

so I think any -ve number(-1) is treated as T.

Rajesh said:   1 decade ago
@Muesh modi.

In step 4: When compiled as per your logic y=4||-1&&0 then first -1&&0 returns false.

And then 4||false becomes t||f returns true.

Neha said:   1 decade ago
According to this program they have considered only from left to right. There is no logic of precedence.

Mayank said:   1 decade ago
Y = T||T && F/*&& HAS HIGHER PRIORITY THEN ||*/.
Y = T||F.
Y = 1;


Post your comments here:

Your comments will be displayed after verification.