C语言中问题

下列程序的运行结果是(),写详细点
#define POWER(x) ((x)*(x))
#include <stdio.h>
main()
{int i=1;
while(i<=4)printf("%d\t",POWER(i++));
printf("\n");
}

输出结果为:
1 9

原因如下:
i的初始值为1,

对于while(i<=4)printf("%d\t",POWER(i++));
第1次循环判断:i<=4成立,
执行POWER(i++),进行宏展开,得到((i++)*(i++)),
对于i++处理来说,是先将i的值带入表达式,表达式计算完毕后再进行++处理,
所以((i++)*(i++))的值=1*1=1,
表达式计算完毕后,i进行两次++处理,i的值等于3
此次循环输出: 1

第2次循环判断:i<=4成立,
执行POWER(i++),进行宏展开,得到((i++)*(i++)),
对于i++处理来说,是先将i的值带入表达式,表达式计算完毕后再进行++处理,
所以((i++)*(i++))的值=3*3=9,
表达式计算完毕后,i进行两次++处理,i的值等于11
此次循环输出: 9

第3次循环判断:i<=4不成立,循环结束

所以最后输出:
1 9
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-08-29
运行结果:
1 9

POWER(i++)=(i++)*(i++);i=1,所以第一个输出1,此时i已经累积为3.
所以第二个输出3×3=9,而i已经累积到5,不满足while的条件,循环结束。
第2个回答  2020-01-13
第3个回答  2023-04-10
不应该是2,12吗
第4个回答  2009-08-29
二楼的够详细了
相似回答