Sunteți pe pagina 1din 12

C operator questions with answers

C programming tricky objective type operators questions and answers with explanation for written test and interview

(1) 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 expression.

final

value

of

variable

in

the

Compiler will treat this expression j = ++i+++i+++i; as i = ++i + ++i + ++i; Initial value of i operator final value Now final value of variable as shown in = 5 due to three pre increment of i=8. i i.e. 8 will assigned to each 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 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

returns

only

two

(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 More than , Associative 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;

S-ar putea să vă placă și