What will be output of
the following program?
#include<stdio.h>
int main(){
float a=0.7;d
if(a<0.7){
printf("C");
}
else{
printf("C++");
}
return 0;
}
EXPLANATION
Output:
Turbo C++ 3.0: c
Turbo C ++4.5: c
Linux GCC: c
Visual
C++: c
Explanation:
0.7 is double constant (Default). Its binary value is written in 64 bit.
Binary value of 0.7 = (0.1011 0011 0011 0011 0011 0011 0011 0011 0011 0011 0011
)
Now here variable a is a floating point variable while 0.7 is double constant.
So variable a will contain only 32 bit value i.e.
a = 0.1011 0011 0011
0011 0011 0011 0011 0011 while
0.7 = 0.1011 0011 0011 0011 0011 0011 0011 0011 0011 0011 0011....
It is obvious a < 0.7
Hide
(2)
What will be output of
the following program?
#include<stdio.h>
int main(){
int i=5,j;
j=++i+++i+++i;
printf("%d %d",i,j);
return 0;
}
EXPLANATION
Output:
Turbo C++ 3.0: 8 24
Turbo C ++4.5: Compilation error
Linux GCC: Compilation error
Visual
C++: Compilation error
Explanation:
Rule :- ++ is pre increment operator so in any arithmetic expression it first
increment the value of variable by one in whole expression then starts
assigning the final value of variable in the expression.
Compiler will treat
this expression j = ++i+++i+++i; as
i = ++i + ++i + ++i;
Initial value of i = 5 due to three pre
increment operator final value of i=8.
Now final value of i i.e. 8 will assigned to
each variable as shown in the following figure:
So, j=8+8+8
j=24 and
i=8
Hide
(3)
What will be output of
the following program?
#include<stdio.h>
int main(){
int i=1;
i=2+2*i++;
printf("%d",i);
return 0;
}
EXPLANATION
Output:
Turbo C++ 3.0: 5
Turbo C ++4.5: 5
Linux GCC: 5
Visual
C++: 5
Explanation:
i++ i.e. when postfix increment operator is used any expression the it first
assign the its value in the expression the it increments the value of variable
by one. So,
i = 2 + 2 * 1
i = 4
Now i will be incremented by one so i = 4 + 1
= 5
Hide
(4)
What will be output of
the following program?
#include<stdio.h>
int main(){
int a=2,b=7,c=10;
c=a==b;
printf("%d",c);
return 0;
}
EXPLANATION
Output:
Turbo C++ 3.0: 0
Turbo C ++4.5: 0
Linux GCC: 0
Visual
C++: 0
Explanation:
== is relational operator which returns only two values.
0: If a == b is false
1: If a == b is true
Since
a=2
b=7
So, a == b is false hence b=0
Hide
(5)
What will be output of
the following program?
#include<stdio.h>
void main(){
int x;
x=10,20,30;
printf("%d",x);
return 0;
}
EXPLANATION
Output:
Turbo C++ 3.0: 10
Turbo C ++4.5: 10
Linux GCC: 10
Visual
C++: 10
Explanation :
Precedence table:
Operator
|
Precedence
|
Associative
|
=
|
More than ,
|
Right to left
|
,
|
Least
|
Left to right
|
Since assignment operator (=) has more precedence than comma operator .So =
operator will be evaluated first than comma operator. In the following
expression
x = 10, 20, 30
First 10 will be assigned to x then comma
operator will be evaluated.
Hide
(6)
What will be output of
the following program?
#include<stdio.h>
int main(){
int a=0,b=10;
if(a=0){
printf("true");
}
else{
printf("false");
}
return 0;
}
EXPLANATION
Output:
Turbo C++ 3.0: false
Turbo C ++4.5: false
Linux GCC: false
Visual
C++: false
Explanation:
As we know = is assignment operator not
relation operator. So, a = 0 means zero will assigned to variable a. In c zero
represent false and any non-zero number represents true.
So, if(0) means condition is always false
hence else part will execute.
Hide
(7)
What will be output of
the following program?
#include<stdio.h>
int main(){
int a;
a=015
+ 0x71 +5;
printf("%d",a);
return 0;
}
EXPLANATION
Output:
Turbo C++ 3.0: 131
Turbo C ++4.5: 131
Linux GCC: 131
Visual
C++: 131
Explanation:
015 is octal number its decimal equivalent is = 5 * 8 ^ 0 + 1 * 8 ^ 1 = 5 + 8 =
13
0x71 is hexadecimal number (0x is symbol of
hexadecimal) its decimal equivalent is = 1 * 16 ^ 0 + 7 * 16 ^ 1 = 1 + 112 =
113
So, a = 13 + 113 + 5 = 131
Hide
(8)
What will be output of
the following program?
#include<stdio.h>
int main(){
printf("%d %d %d",sizeof(3.14),sizeof(3.14f),sizeof(3.14L));
return 0;
}
EXPLANATION
Output:
Turbo
C++ 3.0: 8 4 10
Turbo C
++4.5: 8 4 10
Linux
GCC: 8 4 12
Visual
C++: 8 4 8
Explanation:
3.14f is floating point constant. Its size is 4 byte. 3.14 is double constant
(default). Its size is 8 byte. 3.14L is long double constant. Its size is 10
byte. sizeof() operator always return the size of data type which is written
inside the(). It is keyword.
Hide
(9)
What will be output of
the following program?
#include<stdio.h>
int main(){
int x=100,y=20,z=5;
printf("%d %d %d");
return 0;
}
EXPLANATION
Output:
Turbo C++ 3.0: 5 20 100
Turbo C ++4.5: 5 20 100
Linux GCC: Garbage values
Visual
C++: 5 100 20
By default x, y, z are auto type data which
are stored in stack in memory. Stack is LIFO data structure. So in stack first
stores 100 then 20 then 5 and program counter will point top stack i.e. 5.
Default value of %d in printf is data which is present in stack. So output is
revere order of declaration. So output will be 5 20 100.
Hide
(10)
What will be output of
the following program?
#include<stdio.h>
int main(){
int a=2;
a=a++
+ ~++a;
printf("%d",a);
return 0;
}
EXPLANATION
Output:
Turbo C++ 3.0: -1
Turbo C ++4.5: 0
Linux GCC: 0
Visual
C++: 0
Explanation:
Same theory as question (2) and (13).
Hide
(11)
What will be output of
the following program?
#include<stdio.h>
int main(){
int a;
a=sizeof(!5.6);
printf("%d",a);
return 0;
}
EXPLANATION
Output:
Turbo C++ 3.0: 2
Turbo C ++4.5: 2
Linux GCC: 4
Visual
C++: 4
Explanation:
! is negation operator
it return either integer 0 or 1.
! Any operand = 0 if operand is non zero.
! Any operand = 1 if operand is zero.
So, !5.6 = 0
Since 0 is integer number and size of integer
data type is two byte.
Hide
(12)
What will be output of
the following program?
#include<stdio.h>
int main(){
float a;
(int)a= 45;
printf("%d,a);
return 0;
}
EXPLANATION
Output:
Turbo C++ 3.0:
Compilation error
Turbo C ++4.5:
Compilation error
Linux GCC: Compilation
error
Visual
C++: Compilation error
Explanation:
After performing any operation on operand it
always return some constant value.
(int) i.e. type casting operator is not
exception for this. (int) a will return one constant value and we cannot assign
any constant value to another constant value in c.
(int)a = 45; is equivalent to
3456 = 45 ( Here 3456 in any garbage value of int(a)).
Hide
(13)
What will be output of
the following program?
#include<stdio.h>
int main(){
int i=5;
int a=++i + ++i + ++i;
printf("%d",a);
return 0;
}
EXPLANATION
Output:
Turbo C++ 3.0: 21
Turbo C ++4.5: 21
Linux GCC: 22
Visual
C++: 24
Explanation:
Rule : ++ (in ++i) is pre increment operator
so in any arithmetic expression it first increment the value of variable by one
in whole equation up to break point then start assigning the value of variable
in the equation. There are many break point operators in. For example:
(1) Declaration statement.
(2) && or operator.
(3) Comma (,) operator etc.
In the following expression:
int a=++i + ++i + ++i;
Here break point is due to declaration .It break after each increment i.e.
(initial value of i=5) after first increment value 6 assign to variable i then
in next increment will occur and so on.
So, a = 6 + 7 + 8;