131) main()
{
char
str1[] = {‘s’,’o’,’m’,’e’};
char
str2[] = {‘s’,’o’,’m’,’e’,’\0’};
while
(strcmp(str1,str2))
printf(“Strings
are not equal\n”);
}
Answer:
“Strings
are not equal”
“Strings
are not equal”
….
Explanation:
If a
string constant is initialized explicitly with characters, ‘\0’ is not appended
automatically to the string. Since str1 doesn’t have null termination, it
treats whatever the values that are in the following positions as part of the
string until it randomly reaches a ‘\0’. So str1 and str2 are not the same,
hence the result.
132) main()
{
int
i = 3;
for
(;i++=0;) printf(“%d”,i);
}
Answer:
Compiler
Error: Lvalue required.
Explanation:
As we
know that increment operators return rvalues and hence it cannot appear on the left hand side
of an assignment operation.
133) void
main()
{
int
*mptr, *cptr;
mptr
= (int*)malloc(sizeof(int));
printf(“%d”,*mptr);
int
*cptr = (int*)calloc(sizeof(int),1);
printf(“%d”,*cptr);
}
Answer:
garbage-value
0
Explanation:
The
memory space allocated by malloc is uninitialized, whereas calloc returns the
allocated memory space initialized to zeros.
134) void
main()
{
static
int i;
while(i<=10)
(i>2)?i++:i--;
printf(“%d”, i);
}
Answer:
32767
Explanation:
Since i
is static it is initialized to 0. Inside the while loop the conditional
operator evaluates to false, executing i--. This continues till the integer
value rotates to positive value (32767). The while condition becomes false and
hence, comes out of the while loop, printing the i value.
135) main()
{
int
i=10,j=20;
j = i, j?(i,j)?i:j:j;
printf("%d
%d",i,j);
}
Answer:
10
10
Explanation:
The
Ternary operator ( ? : ) is equivalent for if-then-else statement. So the
question can be written as:
if(i,j)
{
if(i,j)
j = i;
else
j = j;
}
else
j
= j;
136) 1.
const char *a;
2. char* const a;
3. char const *a;
-Differentiate
the above declarations.
Answer:
1.
'const' applies to char * rather than 'a' ( pointer to a constant char )
*a='F' : illegal
a="Hi" : legal
2.
'const' applies to 'a' rather than to
the value of a (constant pointer to char )
*a='F' : legal
a="Hi" : illegal
3.
Same as 1.
137) main()
{
int
i=5,j=10;
i=i&=j&&10;
printf("%d
%d",i,j);
}
Answer:
1
10
Explanation:
The
expression can be written as i=(i&=(j&&10)); The inner expression
(j&&10) evaluates to 1 because j==10. i is 5. i = 5&1 is 1. Hence
the result.
138) main()
{
int
i=4,j=7;
j = j || i++ &&
printf("YOU CAN");
printf("%d
%d", i, j);
}
Answer:
4
1
Explanation:
The
boolean expression needs to be evaluated only till the truth value of the
expression is not known. j is not equal to zero itself means that the
expression’s truth value is 1. Because it is followed by || and true ||
(anything) => true where (anything) will not be evaluated. So the
remaining expression is not evaluated and so the value of i remains the same.
Similarly
when && operator is involved in an expression, when any of the operands
become false, the whole expression’s truth value becomes false and hence the
remaining expression will not be evaluated.
false && (anything) =>
false where (anything) will not be evaluated.
139) main()
{
register
int a=2;
printf("Address of a =
%d",&a);
printf("Value
of a = %d",a);
}
Answer:
Compiler
Error: '&' on register variable
Rule to Remember:
& (address of ) operator cannot be applied
on register variables.
140) main()
{
float
i=1.5;
switch(i)
{
case 1:
printf("1");
case
2: printf("2");
default
: printf("0");
}
}
Answer:
Compiler
Error: switch expression not integral
Explanation:
Switch
statements can be applied only to integral types.
No comments:
Post a Comment