8.35疑问

ltolll 2007-11-29 01:00:32
#define T(x,y,r) x*r*y/4
main()
{//原题有改动,数值是一样的.
int a=3,b=3,c=5,s;
s=T(a++,a*++b,a+b+c);
printf("%d",s);
}

我的计算过程是这样:
s=3*3+3+5*3*4/4=9+3+15=27
为什么结果是28?
...全文
159 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ltolll 2007-12-25
  • 打赏
  • 举报
回复
yangs2000
tc3,tc2也是 27啊。
----------------------
Alancheny
Turbo c/c++ 3.0 是28

好奇怪啊!难倒TC3.0还有多个版本?
ltolll 2007-12-25
  • 打赏
  • 举报
回复
我的环境XP+VS2005
Alancheny 2007-11-29
  • 打赏
  • 举报
回复
Turbo c/c++ 3.0 是28
yangs2000 2007-11-29
  • 打赏
  • 举报
回复
tc3,tc2也是 27啊。
effective_person 2007-11-29
  • 打赏
  • 举报
回复
结果是 28的同志们
你们使用什么编译的啊
怎么就我一个人是 27
难道就没有人用 vc6.0吗?
yxwsbobo 2007-11-29
  • 打赏
  • 举报
回复
后置++ 没有作用??
s=T(a,a*++b,a+++b+c);

这样也是28
effective_person 2007-11-29
  • 打赏
  • 举报
回复
我觉得这个题目会有争议
我把楼主的程序在vc6.0上运行得到的是 结果是 27

#include <iostream>
using namespace std;
#define T(x,y,r) x*r*y/4
main()
{
int a=3,b=3,c=5,s;
s=T(a++,a*++b,a+b+c);
printf("%d",s); //s=3*3+3+5*3*4/4;//其中在计算r时 b=3没有等于4 可能跟编译器有关吧

}


告诉楼主像这样的题目只要把
x用a++
r用a+b+c
y用a*++b
带进去就可以了 记住别随意加()
楼主还可以执行这个程序看看有什么区别

#include <iostream>
using namespace std;
#define T(x,y,r) (x)*(r)*(y)/4
main()
{//原题有改动,数值是一样的.
int a=3,b=3,c=5,s;
s=T(a++,a*++b,a+b+c);
printf("%d",s);
}


Wolf_FienD 2007-11-29
  • 打赏
  • 举报
回复
#define T(x,y,r) x*r*y/4


谁做项目时这样写,会被 抽巴掌的.
yxwsbobo 2007-11-29
  • 打赏
  • 举报
回复
学习了
霁云 2007-11-29
  • 打赏
  • 举报
回复
lz的理解是正确的 我忽略了y和r的顺序
霁云 2007-11-29
  • 打赏
  • 举报
回复
可以这样理解:

int a=3, b=3, c=5, s;
b += 1;
s = T(a, a * b, a + b + c) = a * a + b + c * a * b / 4 = 3 * 3 + 4 + 5 * 3 * 4 / 4 = 9 + 4 + 15 = 28;
a += 1;

后置++要慎用,会产生临时变量

effective_person 2007-11-29
  • 打赏
  • 举报
回复
你用什么编译器啊
我运行怎么是27 啊(vc6.0)

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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