一道C语言结构体习题

xiaya1986cv 2008-04-22 10:11:15
#include<stdio.h>
#define T(x,y,r) x*r*y/4
#define M(x,y) (x)>(y)? (x):(y)
main()
{
int a=1,b=3,c=5,s1,s2;
s1=M(a=b,b-a);
s2=T(a++,a*++b,a+b+c);
printf("%d %d\n",s1,s2);
}
最终的答案s1与s2分别为3,28 运行测试后也是这个结果。
s1没问题,可是s2有问题,把参数代入后式子是 a++ * a + b + c * a * ++b/4
此时的a=3,b=3,c=5
我的算式是 3*3+3+5*3+4/4
可是怎么算也算不到28啊
...全文
520 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
wingheaven 2010-01-20
  • 打赏
  • 举报
回复
3*3+3+5*3+4/4
=9+3+15+1=28
C334745710 2008-04-23
  • 打赏
  • 举报
回复
这就是宏与函数的区别,呵呵....
whjeric 2008-04-23
  • 打赏
  • 举报
回复
把算式写成宏,在替换的时候很容易出问题。
sun3411 2008-04-23
  • 打赏
  • 举报
回复
3*3+4?????+5*4*3/4
meteora112 2008-04-23
  • 打赏
  • 举报
回复
带负作用的宏,我看到就直接打个叉
HelloDan 2008-04-23
  • 打赏
  • 举报
回复
最好不要写这样的宏,好像值是与编译器有关的。
lanmuyi 2008-04-23
  • 打赏
  • 举报
回复
s2最终等于27
s2=T(a++,a*++b,a+b+c)=a++*a+b+c*a*++b/4=(a++)*a+b+c*a*(++b)/4=3*3+3+5*3*4/4=27
Yun0825 2008-04-23
  • 打赏
  • 举报
回复
恩,编译器相关的就要避免使用。
xiaya1986cv 2008-04-23
  • 打赏
  • 举报
回复
xiaya1986cv 2008-04-23
  • 打赏
  • 举报
回复
xiaya1986cv 2008-04-23
  • 打赏
  • 举报
回复
对不起标题写错了,是一道宏定义问题
我在Visual Studio 2005上面的运行结果:

xiaooqiang 2008-04-23
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 C334745710 的回复:]
这就是宏与函数的区别,呵呵....
[/Quote]
xk306 2008-04-23
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 lanmuyi 的回复:]
s2最终等于27
s2=T(a++,a*++b,a+b+c)=a++*a+b+c*a*++b/4=(a++)*a+b+c*a*(++b)/4=3*3+3+5*3*4/4=27
[/Quote]
HelloDan 2008-04-22
  • 打赏
  • 举报
回复
#define T(x,y,r) x*r*y/4
s2=T(a++,a*++b,a+b+c);

s2=a++*a*++b*a+b+c/4
gezichong 2008-04-22
  • 打赏
  • 举报
回复
那我的机子怎么运行出来是27?
lee213 2008-04-22
  • 打赏
  • 举报
回复
我的也是27。
xiaya1986cv 2008-04-22
  • 打赏
  • 举报
回复
s2肯定是28,怎么出来的呢?
gezichong 2008-04-22
  • 打赏
  • 举报
回复
s2=27

3*3+3+5*4*3/4

我是风 2008-04-22
  • 打赏
  • 举报
回复
++和--在宏中只是简单的替换,并没有执行。所以a++之后a的值没变。
xiaya1986cv 2008-04-22
  • 打赏
  • 举报
回复
等待ing.......

70,012

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧