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??? 展开
#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??? 展开
2个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询