Control Instructions - Programming

Q1:

What will be the output of the program?
#include<stdio.h>
int main()
{
    int x, y, z;
    x=y=z=1;
    z = ++x || ++y && ++z;
    printf('x=%d, y=%d, z=%d\n', x, y, z);
    return 0;
}

A x=2, y=1, z=1

B x=2, y=2, z=1

C x=2, y=2, z=2

D x=1, y=2, z=1

ANS:A - x=2, y=1, z=1

Step 1: x=y=z=1; here the variables x ,y, z are initialized to value '1'. Step 2: z = ++x || ++y && ++z; becomes z = ( (++x) || (++y && ++z) ). Here ++x becomes 2. So there is no need to check the other side because ||(Logical OR) condition is satisfied.(z = (2 || ++y && ++z)). There is no need to process ++y && ++z. Hence it returns '1'. So the value of variable z is '1' Step 3: printf('x=%d, y=%d, z=%d\n', x, y, z); It prints 'x=2, y=1, z=1'. here x is increemented in previous step. y and z are not increemented.