当前位置: 代码迷 >> C语言 >> [求助]表达式求值
  详细解决方案

[求助]表达式求值

热度:153   发布时间:2006-03-09 21:19:00.0
[求助]表达式求值
问题一:
int x=1,y=0;
求表达式x-->(x+y)?5:25>y++?'1':'2'的值;
结果为什么是5?
y的最终值是0,为什么不是1?

问题二:
main()
{int x=3,y=3,z;
z=(++x)+(++x)+(++x);
printf("%d",z);
printf("%d",(++y)+(++y)+(++y));
}
为什么上面两个打印语句的结果会不一样?
搜索更多相关的解决方案: 求值  int  表达  打印  

----------------解决方案--------------------------------------------------------
答案:这两道题如果出自某本书,你可以把它当草纸了,如果出自某位老师,你可以直接告诉他地球开发院聘他为地球最高级CTO,如果是某位朋友或高人的话,恭喜你,你找了位研究带角动物的好老师。
----------------解决方案--------------------------------------------------------
以下是引用Xxibug在2006-3-9 21:32:00的发言:
答案:这两道题如果出自某本书,你可以把它当草纸了,如果出自某位老师,你可以直接告诉他地球开发院聘他为地球最高级CTO,如果是某位朋友或高人的话,恭喜你,你找了位研究带角动物的好老师。

我不知道二楼你在说什么


----------------解决方案--------------------------------------------------------
和编译器有关  
----------------解决方案--------------------------------------------------------
以下是引用z000ch在2006-3-9 21:19:00的发言:
问题一:
int x=1,y=0;
求表达式x-->(x+y)?5:25>y++?'1':'2'的值;
结果为什么是5?
y的最终值是0,为什么不是1?

问题二:
main()
{int x=3,y=3,z;
z=(++x)+(++x)+(++x);
printf("%d",z);
printf("%d",(++y)+(++y)+(++y));
}
为什么上面两个打印语句的结果会不一样?

第一题: x-->(x+y)?5: (25>y++?'1':'2') 看来题目的编译器条件表达式是从左向右结合的
先读x-- , x变为0 ,x+y=0 x-->(x+y)成立 表达式值为5,(25>y++?'1':'2')没有执行,y值不变
第二题:求z时,x先做三次自增为6 所以z=18, 第二个printf()中,其实就是 4+5+6=15;

个人理解




----------------解决方案--------------------------------------------------------
以下是引用zhangjuan在2006-3-9 21:47:00的发言:

我不知道二楼你在说什么

二楼说的4楼回答了,强烈建议4位斑竹做个置顶贴,关于复杂式的++--连=作出一个统一解释,要不过两天就来一个问的,然后还不停有人说是这个答案那个答案,虽然都没错却误导提问者.....


feng说得也是....

[此贴子已经被作者于2006-3-10 1:26:52编辑过]


----------------解决方案--------------------------------------------------------
有的人来了不看置顶贴,要是看了也应该知道发帖子之前搜索~
一搜索这样的就有结果
----------------解决方案--------------------------------------------------------

条件表达式的结合性非5楼所说的左结合。我试过了。


----------------解决方案--------------------------------------------------------
以下是引用feng1256在2006-3-9 21:53:00的发言:
和编译器有关


----------------解决方案--------------------------------------------------------

  相关解决方案