c语言运算符有关的问题

1. d=(m=a!=b)&&(n=b>c)
2. int x=3,y=-4,z=5则x=y--<=x||x+y!=z
3. int x=3,y=-4,z=5则x++-y+(++y)的值
4. x=1,y=2,z=3则(x<y?x:y)==z++的值
5. Int x=1,y=0;则x-->(y+x)?5:25>y++?’1’:’2’
求问这些在c语言中是怎样的一个运算顺序,我自己算得都和答案不一样啊……

这个地方不是"运算顺序"的问题,C语言语法里根本没有规定求值顺序,有的只是运算符的优先级和结合性
由运算符优先级和结合性可知,以上表达式分别等效于
1.d=((m=(a!=b))&&(n=(b>c)))
2. x=(((y--)<=x)||((x+y)!=z))
3. ((x++)-y)+(++y)
4. ((x<y)?x:y)==(z++)
5. ((x--)>(y+x))?(5):((25>y++)?('1'):('2'))
然后代入初值可知,表达式值
1.没有初值,无法判断
2.整体表达式值为1,且最终x值为1,y值-5,z值为5

3.整体表达式值无解,因为此处涉及求值顺序问题,这是一个未定义行为,且最终x值为4,y值-3,z值为5
4.整体表达式值为0,且最终x值为1,y值2,z值为4
5.依旧是未定义行为,表达式整体值无解,且此处求值顺序涉及判断分支,故,变量x和y的最终值也是无解的
关于求值顺序的问题可参见裘宗燕的"C/C++ 语言中的表达式求值"
http://bbs.csdn.net/topics/370153775
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-09-19

去网上查一下运算符优先级表,按优先级和结合性去处理这些题,自己多练习就会了。

    d=(m=a!=b)&&(n=b>c)  

    有括号,先算括号内的

    算完两个括号内的,要算&&

    结果赋值给d

    m=a!=b   先算a!=b,结果赋值给m

    n=b>c  先算b>c,结果赋值给n

第2个回答  2015-09-19
建议不要纠结这个了,编程的时候也不要写这样的表达式,用括号来清晰表明自己的意图。
相似回答