Exercise "If you judge people, you have no time to love them."
- Mother Teresa
1.
What will be the output of the program?
#include<stdio.h>
#define MAN(x, y) ((x)>(y)) ? (x):(y);
int main()
{
int i=10, j=5, k=0;
k = MAN(++i, j++);
printf("%d, %d, %d\n", i, j, k);
return 0;
}
A.
12, 6, 12 B.
11, 5, 11 C.
11, 5, Garbage D.
12, 6, Garbage
Answer: Option A
Explanation:
The macro MAN(x, y) ((x)>(y)) ? (x):(y); returns the biggest number of given two numbers.
Step 1 : int i=10, j=5, k=0; The variable i, j, k are declared as an integer type and initialized to value 10, 5, 0 respectively.
Step 2 : k = MAN(++i, j++); becomes,
=> k = ((++i)>(j++)) ? (++i):(j++);
=> k = ((11)>(5)) ? (12):(6);
=> k = 12
Step 3 : printf("%d, %d, %d\n", i, j, k); It prints the variable i, j, k .
In the above macro step 2 the variable i value is increemented by 2 and variable j value is increemented by 1.
Hence the output of the program is 12, 6, 12
2.
What will be the output of the program?
#include<stdio.h>
#define SQUARE(x) x*x
int main()
{
float s=10, u=30, t=2, a;
a = 2*(s-u*t)/SQUARE(t);
printf("Result = %f", a);
return 0;
}
A.
Result = -100.000000 B.
Result = -25.000000 C.
Result = 0.000000 D.
Result = 100.000000
Answer: Option C
Explanation:
The macro function SQUARE(x) x*x calculate the square of the given number 'x' . (Eg: 102 )
Step 1 : float s=10, u=30, t=2, a; Here the variable s, u, t, a are declared as an floating point type and the variable s, u, t are initialized to 10, 30, 2.
Step 2 : a = 2*(s-u*t)/SQUARE(t); becomes,
=> a = 2 * (10 - 30 * 2) / t * t; Here SQUARE(t) is replaced by macro to t*t .
=> a = 2 * (10 - 30 * 2) / 2 * 2;
=> a = 2 * (10 - 60) / 2 * 2;
=> a = 2 * (-50) / 2 * 2 ;
=> a = 2 * (-25) * 2 ;
=> a = (-50) * 2 ;
=> a = -100;
Step 3 : printf("Result=%f", a); It prints the value of variable 'a'.
Hence the output of the program is -100
3.
What will be the output of the program?
#include<stdio.h>
#define SQR(x)(x*x)
int main()
{
int a, b=3;
a = SQR(b+2);
printf("%d\n", a);
return 0;
}
Answer: Option E
Explanation:
The macro function SQR(x)(x*x) calculate the square of the given number 'x' . (Eg: 102 )
Step 1 : int a, b=3; Here the variable a, b are declared as an integer type and the variable b is initialized to 3.
Step 2 : a = SQR(b+2); becomes,
=> a = b+2 * b+2; Here SQR(x) is replaced by macro to x*x .
=> a = 3+2 * 3+2;
=> a = 3 + 6 + 2;
=> a = 11;
Step 3 : printf("%d\n", a); It prints the value of variable 'a'.
Hence the output of the program is 11
4.
What will be the output of the program?
#include<stdio.h>
#define JOIN(s1, s2) printf("%s=%s %s=%s \n", #s1, s1, #s2, s2);
int main()
{
char *str1="India";
char *str2="BIX";
JOIN(str1, str2);
return 0;
}
A.
str1=IndiaBIX str2=BIX B.
str1=India str2=BIX C.
str1=India str2=IndiaBIX D.
Error: in macro substitution
Answer: Option B
Explanation:
No answer description available for this question. Let us discuss .
5.
What will be the output of the program?
#include<stdio.h>
#define CUBE(x) (x*x*x)
int main()
{
int a, b=3;
a = CUBE(b++);
printf("%d, %d\n", a, b);
return 0;
}
Answer: Option E
Explanation:
The macro function CUBE(x) (x*x*x) calculates the cubic value of given number(Eg: 103 .)
Step 1 : int a, b=3; The variable a and b are declared as an integer type and varaible b id initialized to 3.
Step 2 : a = CUBE(b++); becomes
=> a = b++ * b++ * b++;
=> a = 3 * 3 * 3; Here we are using post-increement operator, so the 3 is not increemented in this statement.
=> a = 27; Here, 27 is store in the variable a . By the way, the value of variable b is increemented by 3. (ie: i=6)
Step 3 : printf("%d, %d\n", a, b); It prints the value of variable a and b .
Hence the output of the program is 27, 6.