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

C Puzzles

This document contains 6 questions and their answers related to C programming concepts like macros, functions, operators etc. Each question provides a short code snippet and asks to predict the output. The corresponding answers explain the step-by-step working of each code and the final output.
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
470 views

C Puzzles

This document contains 6 questions and their answers related to C programming concepts like macros, functions, operators etc. Each question provides a short code snippet and asks to predict the output. The corresponding answers explain the step-by-step working of each code and the final output.
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
You are on page 1/ 4

C Puzzles : Questions and Answers - Level 1

Questions
L1.Q1 : Write the output of the following program
#include #define ABC #define XYZ #define XXX void main() { int 20 10 ABC - XYZ

a;

a = XXX * 10; }
Solution

printf("%d\n", a);

for L1.Q1

L1.Q2 : Write the output of this program


#include #define calc(a, b) (a * b) / (a - b) void main() { int a = 20, b = 10; printf("%d\n", calc(a + 4, b -2)); }

Solution for L1.Q2 L1.Q3 : What will be output of the following program ?
#include void main() { int cnt = 5, a; do { a /= cnt; } while (cnt --); printf ("%d\n", a);

Solution for L1.Q3 L1.Q4 : Print the output of this program


#include void main() { int a, b, c, abc = 0; a = b = c = 40; if (c) { int abc; } } abc = a*b+c;

printf ("c = %d, abc = %d\n", c, abc);

Solution for L1.Q4 L1.Q5 : Print the output of this program


#include main() { int k = 5; if (++k < 5 && k++/5 || ++k <= 8); } printf("%d\n", k);

Solution for L1.Q5 L1.Q6 : What is the output of this program ?


#include void fn(int, int); main() {

int

a = 5;

printf("Main : %d %d\n", a++, ++a); fn(a, a++); }

void fn(int a, int b) { printf("Fn : a = %d \t b = %d\n", a, b); }

Solution for L1.Q6

Answers
L1.A1 Solution for L1.Q1
a = xxx * 10 which is => a = ABC - XYZ * 10 => a = 20 - 10 * 10 => a = 20 - 100 => a = -80

L1.A2 Solution for L1.Q2


Actual substitution is like this : calc(20+4, 10 -2) is calculated as follows (20+4 * 10-2) / (20+4 - 10-2) (20+40-2) / 12 58 / 12 = 4.8 since it is printed in %d the ans is 4

L1.A3 Solution for L1.Q3


This problem will compile properly, but it will give run time error. It will give divide-by-zero error. Look in to the do loop portion do { a /= cnt; } while (cnt --); when the 'cnt' value is 1, it is decremented in 'while ( cnt --)' and on next reference of 'cnt' it becomes zero. a /= cnt; /* ie. a /= 0 */ which leads to divide-by-zero error.

L1.A4 Solution for L1.Q4


the result will be c = 40 and abc = 0; because the scope of the variable 'abc' inside if(c) {.. }

is not valid out side that if (.) { .. }.

L1.A5 Solution for L1.Q5


The answer is 7. The first condition ++k < 5 is checked and it is false (Now k = 6). So, it checks the 3rd condition (or condition ++k <= 8) and (now k = 7) it is true. At this point k value is incremented by twice, hence the value of k becomes 7.

L1.A6 Solution for L1.Q6


The solution depends on the implementation of stack. (Depends on OS) In some machines the arguments are passed from left to right to the stack. In this case the result will be Main : 5 7 Fn : 7 7 Other machines the arguments may be passed from right to left to the stack. In that case the result will be Main : 6 6 Fn : 8 7

Goto C Puzzle level 2 level 3

You might also like