Test your C & CPP skills

Predict the output or error(s) for the following:

1. void main()
{

int const * p=5;

printf("%d",++(*p));
}
Answer:
Compiler error: Cannot modify a constant value.
Explanation:
p is a pointer to a "constant integer". But we tried to change the value of the "constant integer".

2. main()
{
char s[ ]="man";
int i;
for(i=0;s[ i ];i++)
printf("\n%c%c%c%c",s[ i ],*(s+i),*(i+s),i[s]);
}
Answer:
mmmm
aaaa
nnnn
Explanation:
s[i], *(i+s), *(s+i), i[s] are all different ways of expressing the same idea. Generally array name is the base address for that array. Here s is the base address. i is the index number/displacement from the base address. So, indirecting it with * is same as s[i]. i[s] may be surprising. But in the case of C it is same as s[i].

3. main()
{
float me = 1.1;
double you = 1.1;
if(me==you)
printf("I love U");
else
printf("I hate U");
}
Answer:
I hate U
Explanation:
For floating point numbers (float, double, long double) the values cannot be predicted exactly. Depending on the number of bytes, the precession with of the value represented varies. Float takes 4 bytes and long double takes 10 bytes. So float stores 0.9 with less precision than long double.
Rule of Thumb:
Never compare or at-least be cautious when using floating point numbers with relational operators (== , >, <, <=, >=,!= )

4. main()
{
static int var = 5;
printf("%d ",var--);
if(var)
main();
}
Answer:
5 4 3 2 1
Explanation:
When static storage class is given, it is initialized once. The change in the value of a static variable is retained even between the function calls. Main is also treated like any other ordinary function, which can be called recursively.

5. main()
{
int c[ ]={2.8,3.4,4,6.7,5};
int j,*p=c,*q=c;
for(j=0;j<5;j++) {
printf(" %d ",*c);
++q; }
for(j=0;j<5;j++){
printf(" %d ",*p);
++p; }
}

Answer:
2 2 2 2 2 2 3 4 6 5
Explanation:
Initially pointer c is assigned to both p and q. In the first loop, since only q is incremented and not c , the value 2 will be printed 5 times. In second loop p itself is incremented. So the values 2 3 4 6 5 will be printed.

6. main()
{
extern int i;
i=20;
printf("%d",i);
}

Answer:
Linker Error : Undefined symbol '_i'
Explanation:
extern storage class in the following declaration,
extern int i;
specifies to the compiler that the memory for i is allocated in some other program and that address will be given to the current program at the time of linking. But linker finds that no other variable of name i is available in any other program with memory space allocated for it. Hence a linker error has occurred .

7. main()
{
int i=-1,j=-1,k=0,l=2,m;
m=i++&&j++&&k++||l++;
printf("%d %d %d %d %d",i,j,k,l,m);
}
Answer:
0 0 1 3 1
Explanation :
Logical operations
always give a result of 1 or 0 . And also the logical AND (&&) operator has higher priority over the logical OR (||) operator. So the expression ‘i++ && j++ && k++’ is executed first. The result of this expression is 0 (-1 && -1 && 0 = 0). Now the expression is 0 || 2 which evaluates to 1 (because OR operator always gives 1 except for ‘0 || 0’ combination- for which it gives 0). So the value of m is 1. The values of other variables are also incremented by 1.

8. main()
{
char *p;
printf("%d %d ",sizeof(*p),sizeof(p));
}

Answer:
1 2
Explanation:
The sizeof() operator gives the number of bytes taken by its operand. P is a character pointer, which needs one byte for storing its value (a character). Hence sizeof(*p) gives a value of 1. Since it needs two bytes to store the address of the character pointer sizeof(p) gives 2.

9. main()
{
int i=3;
switch(i)
{
default:printf("zero");
case 1: printf("one");
break;
case 2:printf("two");
break;
case 3: printf("three");
break;
}
}
Answer :
three
Explanation :
The default case can be placed anywhere inside the loop. It is executed only when all other cases doesn't match.



Comments (21)

Alex Ursut
Said this on 9-1-2009 At 01:47 am
Please recommend other c/c++ tests. This article is of great use to me.
senthil
Said this on 1-29-2010 At 06:31 pm

good

Cool_Dev
Said this on 2-11-2010 At 05:38 pm

First question itself is wrong.. i think  int const * p=5; is not a valid, as a pointer cannot be initialized using an integer value...   either need to assign the address of an integer using '&' operator, or with another pointer..

 

Cool_Dev

Said this on 3-27-2010 At 12:59 pm

had u got the 1st question answer......?

lalaji
Said this on 2-24-2010 At 10:08 pm

ans 22 wrong

cse_2006
Said this on 4-11-2010 At 11:01 am

Can you explain why it is wrong?

Said this on 3-27-2010 At 12:55 pm

answer 5 will be wrong.......... if is it right tell me how ? plz...........

Said this on 3-28-2010 At 11:27 am

Can you please explain why it is wrong?

raj
Said this on 10-7-2010 At 05:19 am
main()
{
int c[ ]={2.8,3.4,4,6.7,5};
int j,*p=c,*q=c;
for(j=0;j<5;j++) {
printf(" %d ",*c);
++q; }
for(j=0;j<5;j++){
printf(" %d ",*p);
++p; }
}

Answer:
2 2 2 2 2 2 3 4 6 5

There might be 2 doubts :
1: its not displaying numbers after decimal points?
Ans: array "c" is declared as integer, So numbers asfter decimal 
        point will be get truncated.
2: first loop only first index  value of array c( i.e 2) is displayed repeatedly?
ANS: Since q is a variable that is stored indepedently of the variable c,
         So  any manipulation to q varable does not get reflected to c.
suryasekhar
Said this on 12-10-2010 At 10:37 pm

answer 222222834

divija
Said this on 4-11-2010 At 10:33 am

the ans is correct!!!

for(j=0;j<5;j++) {
printf(" %d ",*c);
++q; }in this loop c points to first value i.e 2.8 but here c is not incrementing ,so only the loop gets executed 5 times with no increment in c value.so it prints 2 five times.

then in the next for loop

for(j=0;j<5;j++){
printf(" %d ",*p);
++p; }

here when j=0 p points to 2.8 note that here p is incremented unlike in the first loop.

so here p gets incremented along with j so now p points to 3.4 when j=1 and  to 4 when j=2 and so on.

therefore it prints 2 3 4 6 5

finally the output is 2 2 2 2 2 2 3 4 6 5

hope i was clear .


cse_2006
Said this on 4-11-2010 At 11:00 am

Thanks Divija for clarification.

Said this on 4-11-2010 At 01:47 am

this the one of the best websides for understanding the c/c++ test.......

Said this on 6-2-2011 At 10:18 am

hai

divija
Said this on 4-13-2010 At 08:15 pm

can someone help me out in understaning question no 83 plzz....

rajaopal
Said this on 6-27-2010 At 11:47 am

can someone help me out in understaning question nos  47,49,50 plzz....

maya
Said this on 7-17-2010 At 09:13 pm

anyone pls explain q no 39......

Said this on 7-20-2010 At 06:52 pm

can anyone say me where can i find to download the e-book for "test your skills in C and C++" please respond to me....

swapna
Said this on 9-17-2010 At 08:46 pm

can someone explain me 42nd question plzz...

rajesh
Said this on 10-4-2010 At 01:37 am

send me C&C++ writtent test questions to my mail if possible

sivaprakashCIT
Said this on 1-16-2011 At 11:37 pm

REALLY INTERESTING!!!!!!!!!!!!!!!!!!!!!!!!!!

Post a Comment
* Your Name:
* Your Email:
(not publicly displayed)
Reply Notification:
Approval Notification:
Website:
* Security Image:
Security Image Generate new
Copy the numbers and letters from the security image:
* Message:

Email to Friend

Fill in the form below to send this article to a friend:

Email to Friend
* Your Name:
* Your Email:
* Friend's Name:
* Friend's Email:
* Security Image:
Security Image Generate new
Copy the numbers and letters from the security image
* Message: