Output of C programs | Set 55 (Ternary Operators)
Predict the output of below programs
Question 1
#include <stdio.h>
int main()
{
int x, a = 0;
x = sizeof (a++) ? printf ( "Geeks for Geeks\n" ) : 0;
printf ( "Value of x:%d\n" , x);
printf ( "Value of a:%d" , a);
return 0;
}
|
Output:
Geeks for Geeks
Value of x:16
Value of a:0
Explanation: sizeof is a compile-time operator, so at the time of compilation sizeof and its operand get replaced by the result value. The operand is not evaluated (except when it is a variable length array) at all; only the type of the result matters. In sizeof operator, a++ will not evaluated. So it will remain same i.e. value of a will be 0.
printf returns the number of width. Geeks for Geeks is of 16 width. This will return 16.So x is now 16.
Question 2
#include <stdio.h>
int main()
{
int x;
x = 5 > 8 ? 10 : 1 != 2 < 5 ? 20 : 30;
printf ( "Value of x:%d" , x);
return 0;
}
|
Output:
Value of x:30
Explanation:
exp1?exp2:exp3
5 > 8 ? 10: 1!= 2<5 ? 20:30
Output of exp1 is false, so exp3 (1 != 2 <5 ? 20 : 30) will be evaluated. In exp3, this is also form of ternary operator.
1 != 2< 5 ? 20 : 30 (exp1 ? exp2 : exp3)
Now, exp1 will be evaluated. According to operator precedence, 2<5 will be evaluated first (will give output 1). Now, exp1 is like 1!=1 (condition is false). So, exp3 will be evaluated. Therefore, final output is 30.
Question 3
#include <stdio.h>
int main()
{
int x;
x = 5 < 8 ? 1 != 2 < 5 == 0 ? 10 : 20 : 30;
printf ( "Value of x:%d" , x);
return 0;
}
|
Output:
Value of x:10
Explanation :
exp1?exp2:exp3
5 < 8? 1!=2<5 == 0 ? 10:20:30
exp1 is true, so exp2 will be evaluated. exp2 is also in form of ternary operator.
1!= 2<5 == 0? 10 : 20 (exp1?exp2:exp3)
exp1(1 != 2 < 5 ==0)is evaluated. In exp1, according to operator precedence, 2<5 will be evaluated first(condition is true). Now exp1 is 1!=1==0. Again, according to operator precedence, 1==0 is evaluated(condition is false). Now exp1 is 1!=0(condition is true). Now, exp2 will be evaluated. Therefore, final output is 10.
Question 4
#include <stdio.h>
#include <stdio.h>
int main()
{
int x;
x = 2 > 5 != 1 ? 5 < 8 && 8 > 2 ? !5 ? 10 : 20 : 30 : 40;
printf ( "Value of x:%d" , x);
return 0;
}
|
Output:
Value of x:20
Explanation:
exp1?exp2:exp3
2 > 5 != 1 ? 5 2 ? !5 ? 10:20:30:40
exp1 will be evaluated always. According to operator precedence, 2>5 will be evaluated first(condition is false). Now, exp1 is 0!=1.Condition is true.So, exp2 will be evaluated, this is also in ternary operator form.
52 ? !5 ? 10:20:30
(exp1?exp2:exp3)
exp1 will be evaluated. According to operator precedence, 52 will be evaluated(condition is true). Now, exp1 is 1&&1(condition is true). So exp2 will be evaluated, it is also in form of ternary operator.
!5 ? 10:20 (exp1?exp2:exp3)
exp1 will be evaluated, value of !5 is zero, so exp3 will be evaluated.Final output will be 20.
Question 5
#include <stdio.h>
int main()
{
int x;
x = 2 > 5 ? 1 != 2 > 5 ? 10 : 20 : 5 < 8 ? 2 != 2 > 5 ?
!5 ? 30 : !1 != 1 ? 40 : 50 : 60 : 70;
printf ( "Value of x:%d" , x);
return 0;
}
|
Output:
Value of x:40
Explanation
exp1?exp2:exp3
2>5 ? 1!=2>5?10:20 : 55?!5?30:!1!=1?40:50:60:70;
exp1 will be evaluated always.2>5(condition is false), so exp3 will be evaluated, which is also in form of ternary operator.
55?!5?30:!1!=1?40:50:60 : 70 (exp1?exp2:exp3)
exp1 will be evaluated, 5<8(condition is true), so exp2 will be evaluated, which is also in form of ternary operator.
2!=2>5 ? !5?30:!1!=1?40:50 : 60 (exp1?exp2:exp3)
exp1 will be evaluated.According to operator precedence, 2>5 will be evaluated first(condition is false). So, exp1 is now 2!=0(condition is true). Now, exp2 will be evaluated, which is in form of ternary operator.
!5 ? 30 : !1!=1?40:50 (exp1?exp2:exp3)
exp1 will be evaluated, value of !5 is zero. So, exp3 will be evaluated, which is in form of ternary operator.
!1!=1 ? 40 : 50 (exp1?exp2:exp3)
exp1 will be evaluated.According to operator precedence, !1 will be evaluated first ie. 0.Now, exp1 is 0!=1(condition is true), exp2 will be evaluated. Therefore final output is 40.
Last Updated :
19 Sep, 2017
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...