### Find Output Of Program

Question 1 :

What will be the output of the program?

``````#include
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;
}``````

A). -2, 3, 1, 1
B). 2, 3, 1, 2
C). 1, 2, 3, 1
D). 3, 3, 1, 2

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;
becomes m = -2 && 3 && 1;
becomes m = TRUE && TRUE; 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 i,j,k are increemented by '1'(one).

Hence the output is "-2, 3, 1, 1".

Question 2 :

Assunming, integer is 2 byte, What will be the output of the program?

``````#include
int main()
{
printf("%x\n", -2<<2);
return 0;
}``````

A). ffff
B). 0
C). fff8
D). Error

Explanation :

The integer value 2 is represented as 00000000 00000010 in binary system.
Negative numbers are represented in 2's complement method.
1's complement of 00000000 00000010 is 11111111 11111101 (Change all 0s to 1 and 1s to 0).
2's complement of 00000000 00000010 is 11111111 11111110 (Add 1 to 1's complement to obtain the 2's complement value).
Therefore, in binary we represent -2 as: 11111111 11111110.
After left shifting it by 2 bits we obtain: 11111111 11111000, and it is equal to "fff8" in hexadecimal system.

Question 3 :

What will be the output of the program?

``````#include
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;
}``````

A). 2, 2, 0, 1
B). 1, 2, 1, 0
C). -2, 2, 0, 0
D). -2, 2, 0, 1

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".

Question 4 :

What will be the output of the program?

``````#include
int main()
{
int x=12, y=7, z;
z = x!=4 || y == 2;
printf("z=%d\n", z);
return 0;
}``````

A). z=0
B). z=1
C). z=4
D). z=2

Explanation :

Step 1: int x=12, y=7, z; here variable x, y and z are declared as an integer and variable x and y are initialized to 12, 7 respectively.
Step 2: z = x!=4 || y == 2;
becomes z = 12!=4 || 7 == 2;
then z = (condition true) || (condition false); Hence it returns 1. So the value of z=1.
Step 3: printf("z=%d\n", z); Hence the output of the program is "z=1".

Question 5 :

What will be the output of the program?

``````#include
int main()
{
static int a[20];
int i = 0;
a[i] = i  ;
printf("%d, %d, %d\n", a[0], a[1], i);
return 0;
}``````

A). 1, 0, 1
B). 1, 1, 1
C). 0, 0, 0
D). 0, 1, 0