0% found this document useful (0 votes)
44 views

C Skill Testing Programming

The document contains 9 code snippets with outputs or errors. For each snippet, the expected output or error is provided along with an explanation. The snippets cover topics like pointers, arrays, data types, logical operators, switch statements, and more. Overall, the document tests fundamental C programming concepts and skills.

Uploaded by

Aman Singla
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
44 views

C Skill Testing Programming

The document contains 9 code snippets with outputs or errors. For each snippet, the expected output or error is provided along with an explanation. The snippets cover topics like pointers, arrays, data types, logical operators, switch statements, and more. Overall, the document tests fundamental C programming concepts and skills.

Uploaded by

Aman Singla
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 5

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:

54321

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:

2222223465

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:

00131

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:

12
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.

Read more: http://www.ittestpapers.com/articles/test-your-c--cpp-skills.html#ixzz10CqkEvz9

You might also like