为什么s2等于35,一个的c语言题,这个我想问一下请帮忙回答
s2= T(a++,a*++b,a+b+c);替换掉宏定义后是:
s2 = a++* a+b+c* a* ++b/4= 3* 4+3+5* 4* 4/4 = 35
如有帮助,请点击我评论上方【采纳该答案】按钮支持一下,谢谢!
宏定义是简单的字符替代,你的T的宏定义是不是有问题,s是哪里来的,是不是应该是r?
#define T(x,y,r) x*s*y/4
是不是应该是
#define T(x,y,r) x*r*y/4
宏定义按照字符逐个替换计算。
s2 = T(a++, a * ++b, a + b + c) = a++ * a + b + c * a * ++b/4;
从左到右计算:(按照a=3,b=3,c=5),过程为:
(1)替换第一个a,公式变为 a++ ; s2 = 3 * a + b + c * a * ++b/4;
(2)a++,a变成4,公式变为 s2 = 3 * 4 + b + c * a * ++b/4;
(3)替换b,公式变为 s2 = 3 * 4 + 3 + c * a * ++b/4;
(4)替换c,公式变为 s2 = 3 * 4 + 3 + 5 * a * ++b/4;
(5)替换a,公式变为 s2 = 3 * 4 + 3 + 5 * 4 * ++b/4;
(6)执行++b,b变成4
(7)替换++b,公式变为 s2 = 3 * 4 + 3 + 5 * 4 * 4/4;
(8)计算得到结果是 35
x*r*y/4
改为
(x)*(r)*(y)/4
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!