2 patient pxw patient_pxw 于 2016.03.30 22:10 提问

C语言在#define中带参数出错,为什么

#include
#define FUNC(X,Y) (1/(X)+1/(Y))
int main(void)
{
double x=FUNC(2,2);
printf("%lf\n",x);
return 0;
}
在VS2013中编译没有错误,但是输出结果是0.000000,为什么?是#define用错了吗?

4个回答

sinat_25537149
sinat_25537149   2016.03.30 22:19
已采纳

In C the divide between int also return int

so 1/2=0
so 1/2 + 1/2 = 0

solution
#define func(x,y) (1.0/(x)+1.0/(y))

sunny_128
sunny_128   2016.03.30 23:53

多项式是整数类型的,两个结果都是0.可以写成#define FUN(X,Y) (1.0/x+1.0/y)

SHIJIE15138
SHIJIE15138   2016.04.01 19:40

1,2都是整型的数据,整型数据之间进行运算之后还是整型,所以1/2=0,所以你的答案会输出0.000000

bai596140538
bai596140538   2016.03.30 22:54

数据转换问题,多理解下吧

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!