C语言简单预定义程序,麻烦帮忙解答一下!

来源:百度知道 编辑:UC知道 时间:2024/05/16 03:54:14
#include<stdio.h>

#include<math.h>

#define POWER(x,y) pow(x,y)*y

#define ONE 1

#define SELEVE_ADD(x) ++x

void main()

{

int x=2;

printf("%f\n",POWER(SELEVE_ADD(x),ONE+1));

}
输出结果是10.000000,为什么会是这个结果?怎么计算出来的?麻烦详细解答一下

++x后,x的值为3.为pow的第1个参数值.
pow第2个参数就是ONE+1,2
问题在于展开POWER的时候
实际上展开后是这样的pow(3,2)*1+1......( pow(3,ONE+1)*ONE+1 )
so...就是3^2==9. 9*1+1==10
答案就是10了.

keypoint (1)
#define 是宏定义
宏定义就是字符串替换
keypoint (2)
有一点比较特别的地方是x为整型,打印的时候用的是"%f\n"是浮点型的
所以
printf("%f\n",pow(++x,1+1)*1+1);
pow函数和运算符的优先顺序应该知道吧

你把 POWER(SELEVE_ADD(x),ONE+1) 一层一层代, 便会发现问题,

首先 POWER(SELEVE_ADD(x),ONE+1) 被
换成 pow(SELEVE_ADD(x),ONE+1)*ONE+1
然后 pow(++x,1+2)*1+1;

也就是说 ONE+1只是被当作y 简单地作了一次替换, 当x=2时, 即为3的2次方, 然后再加了一个1, 而 你用 浮点形势输出,故为`10.0000000

更正:
printf("%f\n",POWER(SELEVE_ADD(x),(ONE+1)));
即: ONE+1加一个括号

POWER(SELEVE_ADD(x),ONE+1)
直接用
pow(++x,ONE+1)*ONE+1
替换
所以结果为pow(3,2)*1+1=9*1+1=10
printf("%f\n",POWER(SELEVE_ADD(x),ONE+1))把结果以float格式输出