#include <stdio.h>
#include <stdlib.h>
#define calc(a,b) (a*b)/(a-b)
void calculate(){
int a = 20, b = 10;
printf("%f\n", calc(a+4,b-2));//output 0.00000
}
如何打印实际答案,4.83。
答案 0 :(得分:2)
#define calc(a,b) ((a)*(b))/((a)-(b))
你能发现额外的括号吗?
- &GT; calc(a+4,b-2)
解析为((a+4)*(b-2))/((a+4)-(b-2))
。正确的。
没有额外括号的解决方案:
- &GT; calc(a+4,b-2)
解析为(a+4*b-2)/(a+4-b-2)
。这是非常不同的!
答案 1 :(得分:1)
这里的问题是您的数据类型是整数,而不是格式说明符。整数除法总是被截断为整数。您应该考虑将变量更改为float而不是int。
试试这个:
#include <stdio.h>
#include <stdlib.h>
#define calc(a,b) (a*b)/(a-b)
void calculate(){
float a = 20.0f, b = 10.0f;
printf("%f\n", calc(a+4,b-2));//output 0.00000
}
答案 2 :(得分:1)
您需要先修复表达式。 calc(a+4,b-2)
的类型为int,整数除法为截断。
例如,您可以将声明更改为:
double a = 20.0, b = 10.0;
然后将"%f\n"
更改为"%.2f\n"
以获得两位小数。