21.
#define square(x) x*x
#define square(x) x*x
main()
{
int i;
i = 64/square(4);
printf("%d",i);
}
Answer:
64
Explanation:
the macro call square(4) will substituted by 4*4 so the
expression becomes i
= 64/4*4 . Since / and * has equal priority the expression
will be evaluated as (64/4)*4 i.e.
16*4 = 64
22.
main()
main()
{
char *p="hai friends",*p1;
p1=p;
while(*p!='\0') ++*p++;
printf("%s
%s",p,p1);
}
Answer:
ibj!gsjfoet
Explanation:
++*p++ will be parse in the given order
*p that is value at the location currently
pointed by p will be taken
++*p the
retrieved value will be incremented
when ; is
encountered the location will be incremented that is p++ will be executed
Hence, in the while loop initial value pointed by p is ‘h’,
which is changed to ‘i’ by executing
++*p and pointer moves to point, ‘a’ which is similarly
changed to ‘b’ and so on. Similarly blank space is converted to ‘!’. Thus, we
obtain value in p becomes “ibj!gsjfoet” and since p reaches ‘\0’ and p1 points
to p thus p1doesnot print anything.
23.
#include <stdio.h>
#include <stdio.h>
#define a 10
main()
main()
{
#define a 50
printf("%d",a);
printf("%d",a);
}
Answer:
50
Explanation:
The preprocessor directives can be redefined anywhere in the
program. So the most recently assigned value will be taken.
24.
#define clrscr() 100
main()
#define clrscr() 100
main()
{
clrscr();
printf("%d\n",clrscr());
}
Answer:
100
Explanation:
Preprocessor
executes as a
seperate pass before
the execution of the
compiler. So textual replacement of clrscr() to 100
occurs.The input program to compiler
looks like this :
main()
{
100;
printf("%d\n",100);
}
Note:
100; is an executable statement but with no action. So it
doesn't give any error
25.
main()
main()
{
printf("%p",main);
}
Answer:
Some address will be printed.
Explanation:
Function names are just addresses (just like array names are
addresses). main() is also a function. So the address of function main will be
printed. %p in printf specifies that the argument is an address. They are
printed as hexadecimal numbers.
27)
main()
main()
{
clrscr();
}
clrscr();
Answer:
No output/error
Explanation:
The first clrscr() occurs inside a function. So it becomes a
function call. In the second
clrscr(); is a
function declaration (because
it is not
inside any function).
28)
enum colors {BLACK,BLUE,GREEN}
enum colors {BLACK,BLUE,GREEN}
main()
{
printf("%d..%d..%d",BLACK,BLUE,GREEN);
return(1);
}
Answer:
0..1..2
Explanation:
enum assigns numbers starting from 0, if not explicitly defined.
29)
void main()
void main()
{
char far *farther,*farthest;
printf("%d..%d",sizeof(farther),sizeof(farthest));
}
Answer:
4..2
Explanation:
the second pointer is of char type and not a far pointer
30)
main()
main()
{
int i=400,j=300;
printf("%d..%d");
}
Answer:
400..300
Explanation:
printf takes the values of
the first two assignments of the
program. Any number of printf's may be given. All of them take only the first
two values. If more number of
assignments given in the
program,then printf
will take garbage values.
31)
main()
main()
{
char *p;
p="Hello";
printf("%c\n",*&*p);
p="Hello";
printf("%c\n",*&*p);
}
Answer:
H
Explanation:
* is a dereference operator & is a reference operator. They can be applied any number of times provided it is meaningful.
Here p points to the first character in the string
"Hello". *p dereferences it and so its value is H. Again
& references it to an address and * dereferences it to
the value H.
32)
main()
main()
{
int i=1;
while (i<=5)
{
printf("%d",i);
if (i>2)
goto here;
i++;
}
}
fun()
{
here:
printf("PP");
}
Answer:
Compiler error: Undefined label 'here' in function main
Explanation:
Labels have functions scope, in other words the scope of the
labels is limited to functions. The label 'here' is available in function fun()
Hence it is not visible in function main.
33)
main()
main()
{
static char
names[5][20]={"pascal","ada","cobol","fortran","perl"};
int i;
char *t;
t=names[3];
char *t;
t=names[3];
names[3]=names[4];
names[4]=t;
for (i=0;i<=4;i++)
printf("%s",names[i]);
}
Answer:
Compiler error: Lvalue required in function main
Explanation:
Array names are pointer constants. So it cannot be modified.
34)
void main()
void main()
{
int i=5;
printf("%d",i++ + ++i);
}
Answer:
Output Cannot be predicted exactly.
Explanation:
Side effects are involved in the evaluation of i
35)
void main()
void main()
{
int i=5;
printf("%d",i+++++i);
}
Answer:
Compiler Error
Explanation:
The expression i+++++i
is parsed as
i ++ ++
+ i which
is an illegal combination of operators.
36)
#include<stdio.h>
#include<stdio.h>
main()
{
int i=1,j=2;
switch(i)
{
case 1:
printf("GOOD");
break;
case j:
printf("BAD");
break;
}
}
Answer:
Compiler Error: Constant expression required in function
main.
Explanation:
The case statement can have only constant expressions (this
implies that we cannot use variable names directly so an error).
Note:
Enumerated types can be used in case statements.
37)
main()
main()
{
int i;
printf("%d",scanf("%d",&i)); // value 10 is given as input here
}
Answer:
1
Explanation:
Scanf returns number of items successfully read and not
1/0. Here 10 is given as input which
should have been scanned successfully. So number of items read is 1.
38)
#define f(g,g2) g##g2
main()
#define f(g,g2) g##g2
main()
{
int var12=100;
printf("%d",f(var,12));
}
Answer:
100
39)
main()
main()
{
int i=0;
for(;i++;printf("%d",i)) ;
printf("%d",i);
}
Answer:
1
Explanation:
before entering into the for loop the checking condition is
"evaluated". Here it evaluates to 0 (false) and comes out of the
loop, and i is incremented (note the semicolon after the for loop).
40)
#include<stdio.h>
#include<stdio.h>
main()
{
char s[]={'a','b','c','\n','c','\0'};
char *p,*str,*str1;
p=&s[3];
str=p;
str1=s;
printf("%d",++*p + ++*str1-32);
}
Answer:
M
Explanation:
p is pointing
to character '\n'.str1
is pointing to
character 'a' ++*p meAnswer:"p is pointing to '\n' and
that is incremented by one." the ASCII value of '\n' is 10. then it is
incremented to 11. the value of ++*p is 11. ++*str1 meAnswer:"str1 is
pointing to 'a' that is incremented by 1 and it becomes 'b'. ASCII value of 'b'
is 98. both 11 and 98 is added and result is subtracted from
32.
i.e. (11+98-32)=77("M");

No Response to "100 C Aptitude Questions with Answers (Part 2)"
Post a Comment