|
|
|
|
|
Quark Placement Paper 3 |
C - Question Paper
Quark Media House India Pvt. Ltd.
Note : There are 20 questions and no negative marking.
Time allotted is 30 minutes
1. What is the output of the following code
main()
{
printf("Hello %d",printf("QUARK test?
"));
}
a. Compile time error.
b. Hello QUARK test?
c. Run time error.
d. None of the above.
e. Quark Test ?Hello.
Ans. d. the output is QUARK test? Hello 12
This is because the evaluation of the parameters in a
function call is done from right to left, becz the
parameters were passed via a stack hence the first
parameter (the leftmost one) is at the bottom of the
stack and the rightmost parameter (if it is an
expresseion, it will be evaluated before putting it on
the stack) is on the top of the stack, hence while
popping the parameters from the stack, the function
printf (or any other function) gets them in the reverse
order, i.e., from right to left, hence the statement
printf(Quark test? ) gets evaluated first while
pushing it as a parameter on to the stack, and then the
statement printf(Hello %d) is executed. The
12 is the result of the return of printf(Quark
test? ) which returns the number of characters
printed.
If u need latest papers of any company mail me at
placement042002@yahoo.com
2.) Out put of the following code is
main()
{
int i,j,A;
for (A = -1;A<=1; A++)
printf("%d\t",!!A);
}
a. 1 0 1
b. 65534 0 65534
c. -1 0 1
d. -65534 0 65534
e. None of the above
Ans. 1 0 1
3) What is the out put of the following code?
main()
{
int i=255;
printf("%d\t",++(i++));
}
a. Compilation error
b. Runtime error
c. 256
d. 0
e. None of the above
Ans. Compile Time Error Lvalue Required
4) What shall be the output of the following code?
main()
{
char i = 'a';
printf("%c \t %c \t", i ,(++i));
}
a. a b
b. Compile time error
c. b b
d. a a
e. 65 66
Ans. b b
5) What shall be the output of the following code?
main() {
int i,j;
printf(QUARK %s\n,main());
}
a. Compilation error.
b. Run-time error
c. Continuous scrolling Quark on the screen.
d. None of the above.
Ans. There is nothing on the screen and prog waits till
the memory lasts and then out of memory run time error,
so ans is b.
6) What shall be the output of the following code ?
#define f(x) x*x*x
main(){
printf("\n%d",f(2+2));
}
a. 8
b. 64
c. 10
d. 12
Ans. f(2+2) will expand to 2+2*2+2*2+2
= 2+4+4+2
= 12
7) What shall be the output of the following code ?
main()
{
void fun1(void *);
char a[] = "quark";
void *temp;
temp = a;
fun1(temp);}
void fun1(void *temp1 )
{
int t1 = 0;
while(*((char*)temp1+ t1++ )!='\0') {
printf("%c",*((char*)temp1 + t1));
}
}
a. Compilation error
b. ark
c. quark
d. uark
Ans, uark
8. What will be the out put of the following code?
void main()
{ int x=3;
printf("%d\t %d",x>>1, x<<3);
}
a. 1 and 4
b. 1 and 24
c. 1 and 27
d. None of the above
Ans. 1 and 24
This is because 3 in binary is 00000000 00000011 in two
bytes (integer). Again, the right to left evaluation
rule of parameters is applicable and so x<<3 gets
executed first, it means left shift 3 times, but this
operator does not change the value of x itself, it
simply returns a value, so x retains its value after
this operation has been carried out, so we get 00000000
00011000 which is 24, so 24 is pushed onto the stack,
and then x>>1, right shift 1, 00000000 00000011,
which is 1 in decimal, so 1 is pushed onto the stack,
then printf("%d\t %d") gets executed
displaying 1 24.
If u need latest papers of any company mail me at
placement042002@yahoo.com
9. What will be the result of the following code?
int *x;
x =(int *) 15;
a. Compilation error
b. Compiles but gives a runtime error
c. Absolute location 15 in the memory space shall be
assigned to pointer x;
d. Location 15 in the program space is assigned to
pointer x;
e. Location 15 contains the address to an integer.
Ans d
10. Which of the following functions cannot be called
from another file?
a. const void func(){
..}
b. extern void func(){
}
c. void func(){
}
d. static void func(){
.}
Ans. static
11. What will be the out come of the following code?
#include<stdio.h>
int * func(){
static int x=0;
x++; return &x;
}
int main()
{
int * y = func();
printf("%d",(*y)++);
func();
printf("%d\n",*y);
return 0;
}
a. Compilation error.
b. Prints 1 and 3
c. Prints 1 and 3 but it is not good practice.
d. Prints 1 and 1
e. The code will not execute properly because y points
to a variable whose life span is limited to execution of
the function func();
Ans. Prints 1 and 3 but it is not a good practice
12. Referring to the above code , which of the following
would be the correct
implementation for myFunc ?
char *format = %d;
int main()
{
int x;
myFunc(scanf,&x);
printf(%d\n,x);
return(0);
}
a. void myFunc(int(*y)(const char*,
),int *x) {(*y)(format,&x);}
b. void myFunc(int(*y)(const char*,
),int *x) {(*y)(format,*x);}
c. void myFunc(int*y(const char*,
),int *x) {(*y)(format,&x);}
d. void myFunc(*(int y(const char*,
)),int *x) {(*y)(format,x);}
e. void myFunc(int(*y)(const char*,
),int *x) {(*y)(format,x);}
13. What shall be the output of the following C code?
void main()
{
unsigned int x= -1;
int y =0;
if(y<=x) printf(A is true\n);
if (y = =(x = -10)) printf(B is true\n);
if ((int) x>=y) printf(C is true\n);
}
a. A is true.
b. B is true.
c. C is true.
d. None of the above.
Ans. A is true because x contains 1, i.e., in binary
it is ffff, i.e., all 1s, so being unsigned, all 1s are
interpreted as the value 65535 and not as 1 (however,
all 1s are interpreted as 1 if it is just an int),
hence y<=x returns true.
14. In the following code what is the correct way to
increment the variable ptr to
point to the next member of the array
union intfloat
{
int intArray[ 5];
float floatArray[ 5];
};
union intfloat arr[20];
void *ptr =arr;
a. ++(int*)ptr;
b. ptr = ptr+5;
c. ptr = ptr +sizeof(*ptr);
d. ptr = ptr+sizeof(intfloat.floatArray);
e. ptr = (void*)((union intfloat*)ptr +1);
Ans. e. ptr = (void*)((union intfloat*)ptr +1);
15.What shall be the output of the following program?
#define PRINTXYZ(x,y,z) printf (#x "=%d\t" #z
"=%d\n", x, y)
void main() {
int x, y, z;
x=0; y=1; z=2;
x || ++y ||++z;
PRINTXYZ(x,y,z);
++x || ++y && ++z;
PRINTXYZ(x,y,z);
++x && ++y || ++z;
PRINTXYZ(x,y,z);
}
a. Compilation error.
b. Runtime error.
c.
x=0 z=2
x=1 z=3
x=2 z=4
d.
x=0 z=2
x=1 z=2
x=2 z=3
e. None of the above.
Ans. d.
16. What shall be the output of the following code ?
main()
{
printf(%d %d, sizeof(NULL), sizeof());
}
a. 1 and 0.
b. 0 and 1
c. 2 and 1
d. 4 and 1
e. None of the above
Ans. Depends on the machine and compiler. Actually it is
the sizeof(int) and sizeof(char) as a string is stored
as a char array terminated with 0, so sizeof()
gives 1, whereas sizeof(adsf) gives 5 (including
the terminating 0). So in TurboC we get c as the answer,
on VC we get d as the answer, so I guess e is the ans,
i.e., None of the above.
17. What shall be the output of the following code?
int *check ( int,int);
void main()
{int c,d;
c = check(11,29);
d= check(20,30);
printf("\nc=%u",c);
}
int * check(int i,int j )
{
int *p, *q;
p=&i;
q=&j;
if(i>=95)
return(q);
else
return(p);
}
a. 11
b. 29
c. Compilation error
d. Runtime error
e. None of the above.
Ans. e. None of the above. the statement c =
check(11,29) is assigning an int ptr to an int, so c has
an address of an int (which has gone out of scope, since
the function returns the address of a variable which had
its scope only inside the function, since the parameters
were passed by value) so the value printed can be
anything. Instead, if the statement was c =
*(check(11,29)) then c would have the value stored at
the address returned by the function, which would most
probably be 11, but it cannot be guaranteed since the
variable i has fallen out of scope.
18. What shall be the output of the following code?
void main()
{int a[3][2]={ 1,2,
5,7,
6,8};
printf("\n%d",((a+1)-(&a+1)));
}
a. 0
b. -16
c. -2
d. -8
e. None of the above.
Ans. 2. I havent been able to figure this one out.
a is the address of the 2-d array, here a, &a, *a
all give the same value, i.e., address of the array.
(a+1) gives the address of the second row, it is the
same as a[1]. *(a+1) gives the address of the first cell
of the second row. **(a+1) gives the value of the
element stored in the first cell in the second row.
(*(a+1)+1) gives the address of the second cell of the
second row. *(*(a+1)+1) gives the value of the element
stored in the second cell in the second row.
19.What shall be the output of the following code?
main()
{
char str1[]="Hello";
char str2[]="Hello";
if(str1= =str2&& (*(str1+6)= =*(str2+6)))
printf("\n Equal");
else
printf("\n unequal");
}
a. Equal
b. Unequal
c. Compilation error.
d. Runtime error.
e. None of the above.
Ans. b. Unequal, because the addresses of the two
strings are str1 and str2 and they are different.
20. Given that sizeof(int) is 2 , what is the output of
the following code
main()
{
int a, b=255,c=127;
a=~b;
c=c^(~a & b|0);\
c=c^(~(~b));
printf("%d\n",c);
}
a. Error because of overflow;
b. 255
c. 256
d. 127
e. None of the above
Ans. d. 127 |
|
| |
| |
|
|
|
|
|
|
|
|
|
|
|