C Programming - C Preprocessor - Discussion
Discussion Forum : C Preprocessor - Find Output of Program (Q.No. 5)
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
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 incremented in this statement.
=> a = 27; Here, 27 is store in the variable a. By the way, the value of variable b is incremented by 3. (ie: b=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.
Discussion:
41 comments Page 3 of 5.
Doaa said:
10 years ago
I think it will be like this 3+1*3+2*3+3
3+3+2*3+3
8*3+3
24+3
= 27
Start with multiply then add.
3+3+2*3+3
8*3+3
24+3
= 27
Start with multiply then add.
Himanshu said:
10 years ago
The above Problem has undefined result.
The different compiler will have the different result as there is no standard rule regarding this defined by C standard that how this will be executed.
It can be understand by taking example like i = i++;
It is undefined that whether the value of I will be incremented or it will be assigned first. Kindly stop posting this type of questions or make clearer options.
The different compiler will have the different result as there is no standard rule regarding this defined by C standard that how this will be executed.
It can be understand by taking example like i = i++;
It is undefined that whether the value of I will be incremented or it will be assigned first. Kindly stop posting this type of questions or make clearer options.
Sudip said:
1 decade ago
Guys the correct answer is 60, 6. I compiled this program in other version i.e. GNU GCC version 4.7.2 and other too. And in this compiler its showing 27, 6! absolutely wrong.
Pankaj said:
1 decade ago
Your answer in totally wrong. You can check by compiling. It is 60, 6.
Anand said:
1 decade ago
Answer will be 60, 6 as 3*4*5, 6.
Amol said:
1 decade ago
@Pushkar Bhauryal. Please see the calculation:
@Neetesh.
In pre increment CUBE (++b); is proceed as B=3 initial value:
For first x in cube value ++b = 4.
For second X value is ++4 = 5.
For third x value is ++5 = 6.
Now the output = 4*5*6 = 150 //wrong.
= 4*5*6 = 120;
But compiler gives 150.
How it comes calculated value is 120 but actual is 150?
@Neetesh.
In pre increment CUBE (++b); is proceed as B=3 initial value:
For first x in cube value ++b = 4.
For second X value is ++4 = 5.
For third x value is ++5 = 6.
Now the output = 4*5*6 = 150 //wrong.
= 4*5*6 = 120;
But compiler gives 150.
How it comes calculated value is 120 but actual is 150?
Rajesh said:
1 decade ago
I also think that, value of b will be 5. Since Increment (b++) will start from 3 not from 4 (If it will ++b then b=6).
Travis said:
1 decade ago
Correct answer is 60 6, because CUBE (b++) is replaced by (b++*b++*b++) and therefore (3*4*5) = 60 while b increments three times.
Sam said:
1 decade ago
Actually the behaviour is undefined.
In Turbo C k=++i + ++i; i.e., 2*i then i incremented two times.
In GCC k=++i + ++i; i incremented two times then 2*i;.
In Turbo C k=++i + ++i; i.e., 2*i then i incremented two times.
In GCC k=++i + ++i; i incremented two times then 2*i;.
Himansu said:
1 decade ago
What was output of :
#define PRODUCT(x) ( x * x )
main( )
{
int i = 3, j, k ;
j = PRODUCT( i++ ) ;
k = PRODUCT ( ++i ) ;
printf ( "\n%d %d", j, k ) ;
}
#define PRODUCT(x) ( x * x )
main( )
{
int i = 3, j, k ;
j = PRODUCT( i++ ) ;
k = PRODUCT ( ++i ) ;
printf ( "\n%d %d", j, k ) ;
}
Post your comments here:
Quick links
Quantitative Aptitude
Verbal (English)
Reasoning
Programming
Interview
Placement Papers