y * = 2 means y = y * 2 i.e. y = 4, in this problem. So. the expression is equivalent to x = 4 + 4, which is 8. So, 8 will be printed. However, the order in which the operands are evaluated is implementation-dependent. If the right operand is evaluated first, the result will be 6.
k = -7. So, if 'k' is used as a Boolean variable, it will be treated as a true condition. So. ! k will be false i.e., 0. So, 0 < ? !k is actually 0 < 0. which is false. So. 0 will be printed.
4.
The following program fragment
int i = 107, x = 5;
printf (( x > 7) ? " %d " : "%c", i ) ;
Since x > 7 is false, the ternary operator?: returns "%c". So, print f ( "%c " , i) will be executed. So, the ASCII character corresponding to 107, i.e., ' k ' will be printed.