11.
What will be the output of the program, if a short int is 2 bytes wide?
#include<stdio.h>
int main()
{
short int i = 0;
for(i<=5 && i>=-1; ++i; i>0)
printf(“%u,”, i);
return 0;
}
A. 1 … 65535
B. Expression syntax error
C. No output
D. 0, 1, 2, 3, 4, 5
Answer: Option A
Explanation:
for(i<=5 && i>=-1; ++i; i>0) so expression i<=5 && i>=-1 initializes for loop. expression ++i is the loop condition. expression i>0 is the increment expression.
In for( i <= 5 && i >= -1; ++i; i>0) expression i<=5 && i>=-1 evaluates to one.
Loop condition always get evaluated to true. Also at this point it increases i by one.
An increment_expression i>0 has no effect on value of i.so for loop get executed till the limit of integer (ie. 65535)
12.
What will be the output of the program?
#include<stdio.h>
int main()
{
char ch;
if(ch = printf(“”))
printf(“It matters\n”);
else
printf(“It doesn’t matters\n”);
return 0;
}
A. It matters
B. It doesn’t matters
C. matters
D. No output
Answer: Option B
Explanation:
printf() returns the number of characters printed on the console.
Step 1: if(ch = printf(“”)) here printf() does not print anything, so it returns ‘0’(zero).
Step 2: if(ch = 0) here variable ch has the value ‘0’(zero).
Step 3: if(0) Hence the if condition is not satisfied. So it prints the else statements.
Hence the output is “It doesn’t matter”.
Note: Compiler shows a warning “possibly incorrect assignment”.
13.
What will be the output of the program?
#include<stdio.h>
int main()
{
unsigned int i = 65536; /* Assume 2 byte integer*/
while(i != 0)
printf(“%d”,++i);
printf(“\n”);
return 0;
}
A. Infinite loop
B. 0 1 2 … 65535
C. 0 1 2 … 32767 – 32766 -32765 -1 0
D. No output
Answer: Option D
Explanation:
Here unsigned int size is 2 bytes. It varies from 0,1,2,3, … to 65535.
Step 1:unsigned int i = 65536; here variable i becomes ‘0’(zero). because unsigned int varies from 0 to 65535.
Step 2: while(i != 0) this statement becomes while(0 != 0). Hence the while(FALSE) condition is not satisfying. So, inside the statements of while loop will not get executed.
Hence there is no output.
Note: Don’t forget that the size of int should be 2 bytes. If you run the above program in GCC it may run an infinite loop, because in Linux platform the size of the integer is 4 bytes.
14.
What will be the output of the program?
#include<stdio.h>
int main()
{
float a = 0.7;
if(0.7 > a)
printf(“Hi\n”);
else
printf(“Hello\n”);
return 0;
}
A. Hi
B. Hello
C. Hi Hello
D. None of above
Answer: Option A
Explanation:
if(0.7 > a) here a is a float variable and 0.7 is a double constant. The double constant 0.7 is greater than the float variable a. Hence the if condition is satisfied and it prints ‘Hi’
Example:
#include<stdio.h>
int main()
{
float a=0.7;
printf(“%.10f %.10f\n”,0.7, a);
return 0;
}
Output:
0.7000000000 0.6999999881
15.
What will be the output of the program?
#include<stdio.h>
int main()
{
int a=0, b=1, c=3;
*((a) ? &b : &a) = a ? b : c;
printf(“%d, %d, %d\n”, a, b, c);
return 0;
}
A. 0, 1, 3
B. 1, 2, 3
C. 3, 1, 3
D. 1, 3, 1
Answer: Option C
Explanation:
Step 1: int a=0, b=1, c=3; here variable a, b, and c are declared as integer type and initialized to 0, 1, 3 respectively.
Step 2: *((a) ? &b : &a) = a ? b : c; The right side of the expression(a?b:c) becomes (0?1:3). Hence it return the value ‘3’.
The left side of the expression *((a) ? &b : &a) becomes *((0) ? &b : &a). Hence this contains the address of the variable a *(&a).
Step 3: *((a) ? &b : &a) = a ? b : c; Finally this statement becomes *(&a)=3. Hence the variable a has the value ‘3’.
Step 4: printf(“%d, %d, %d\n”, a, b, c); It prints “3, 1, 3”.