C语言程序解答(编译软件为Turboc2.0)

有下面程序#include<stdio.h>#defineMIN(x,y)(x)>(y)?(x):(y)#defineT(x,y,r)x*r*y/4main(){inta... 有下面程序
#include <stdio.h>
#define MIN(x,y) (x)>(y)?(x):(y)
#define T(x,y,r) x*r*y/4
main()
{
int a=1,b=3,c=5,s1,s2;
s1=MIN(a=b,b-a);
printf("s1=%d,s2=%d\n",s1,T(a++,a*++b,a+b+c));

}
他的输出结果是:s1=3,s2=31,结果为什么会是“s2=31”???
我知道上面程序中的输出语句进行宏展开后会成为以下语句:
printf("s1=%d,s2=%d\n",s1,a++*a+b+c*a*++b/4);
代入a,b,c的值后,根据输出结果“s2=31”来推算,上面输出语句只能按照下面这样算,结果才能是31。
printf("s1=%d,s2=%d\n",s1, 3*4+4+5*3*4/4);
在上述语句中,第一个a取3,第二个a取4,我明白,但我不明白的是,第三个a的值为什么要取3,而不是取4,请高手指点迷津,谢谢!
我问的是第三个a的值为什么要取3,而不是取4???
展开
 我来答
wgwhwu
2015-11-28
知道答主
回答量:1
采纳率:0%
帮助的人:2万
展开全部
这个a的取值受到++b或b++的影响,把上面的表达式“a++*a+b+c*a*++b/4”改成a++*a+b+c*a*b++/4后,其结果为27(3*4+4+5*3*3/4),注意第1个b的值为4而不是3,第3个a的取值仍然是3。
冷唱本炎藏1v
2015-11-18 · TA获得超过510个赞
知道答主
回答量:219
采纳率:0%
帮助的人:67.2万
展开全部
应该如同二楼所说的吧~
你运行该程序时是不是有黑窗口闪出后马上关闭了啊?
如果是的话,建议最后用scanf()语句来等待输入以保证可以顺利看到运行结果~
如果不是的话我就不清楚了~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

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

说明

0/200

提交
取消

辅 助

模 式