C语言的代参宏定义,#define SQ(y) ((y)*(y))....输出应该是2 12 30才对啊?? 5

#defineSQ(y)((y)*(y))#include<stdio.h>intmain(){inti=1;while(i<=5)printf("%d\n",SQ(i++));///////////输出为什么不是21230??????return0;}///////////////1925Pressanykeytocont... #define SQ(y) ((y)*(y))
#include <stdio.h>
int main()
{
int i=1;
while(i<=5)
printf("%d\n",SQ(i++)); ///////////输出为什么不是 2 12 30 ??????
return 0;
}
///////////////
1
9
25
Press any key to continue
展开
 我来答

答题抽奖

首次认真答题后

即可获得3次抽奖机会,100%中奖。

更多问题
最佳答案
yanglei5658
来自电脑网络类芝麻团 2015-05-25
yanglei5658
采纳数:664 获赞数:3013 LV11
擅长:C/C++ 其他编程语言 数学 数据结构及算法
参与团队:百度与你同在
向TA提问 私信TA
展开全部
首先i++是先运算,后加。
对于SQ(i++)来说,其实质是((i++)*(i++))。在后加运算符是在整个运算完成之后,才进行加1操作的。
因此,第一次
首先i=1,1*1 = 1,之后i++=2,再i++=3。
第二次循环
首先3*3 = 9,之后i++=4,再i++=5。
第三次循环
首先5*5 = 25,之后i++=6,再i++=7。
因为i=7,所以退出循环。
追问
"因此,第一次
首先i=1,1*1 = 1,之后i++=2,再i++=3。",第一个i++ = 1,第二个i++等于2,那么(i++)*(i++)=2才对啊?
追答
后加运算符是在整条语句执行完之后,再进行计算的。
所以,会执行完乘法后,再执行两次加法。
匿名用户
2015-05-25
展开全部
未定义行为,结果视编译器而定
追问
我如何定义行为才能使”
输出应该是2 12 30“
呢?~求指点啊~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起

为你推荐:

×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消