c语言中"?"":""<"">"计算如何算

 我来答
zhouiwen
2012-06-22 · 超过13用户采纳过TA的回答
知道答主
回答量:55
采纳率:0%
帮助的人:29.8万
展开全部
三目运算符应该从右边算到左边 他的算法完全错了
我给你说说吧 例 对于表达式 --a == b++ ? a++ : b++
这里涉及了C中的优先级、结合性、求值顺序。
结合性只有在相同优先级的运算符间才起作用,比如a+b*c,+与*优先级不同,这里根本不用去管结合性。而a+b+c则需要进行结合性考虑了,如果+为左结合性,那么应该理解为:(a+b)+c,如果+为右结合性,那么应该理解为a+(b+c),当然了,我们已经知道+为左结合性了。
对于?:,在C中与它优先级相同的只有它自己,因此只有连续的?:才会体现出它的右结合性,即a?b:c?d:e中,根据右结合性可知应理解为a?b:(c?d:e)。显然,上述问题中是体现不出这种结合性来的。
再者,还有一个求值顺序的问题,a?b:c中,C语言规定先对a求值,非零则对b求值并作为该表达式的值,为零则对c求值并作为表达式的值,并且b和c中有且仅有一个会被求值。对于题目中的就应该是:先进行(--a == b++)的求值,根据是否为零,会对(a++)或(b++)进行求值。说白了,也就是只有两种可能性:可能性1:先算(--a == b++),再算(a++);可能性2:先算(--a == b++),再算(b++)。至于(--a == b++)中到底是先算--a 还是b++则仅从C语言这个角度是无法判别的,这是个实现问题,如果要想写出健壮的可移植的代码就应该避免这种表述。
总结一下,就是先看优先级,次看结合性,有的求值有序,有的则无序。
小小_天晴
2012-06-05
知道答主
回答量:21
采纳率:50%
帮助的人:28.1万
展开全部
我给你举个例子吧,太抽象或许不好理解
比如说:
若w=1,x=2,y=3,z=4;则条件表达式w>x?w:y<z?y:z 结果为?

首先判断w是否大于x,若是的话,结果输出w,
若不是的话,则继续看第一个:后面的表达式,若后面表达式成立,则最后输出y,反之输出z。
本题,显然w>x不成立 则看y<z是否成立,显然成立,则输出y ,所以最后结果为3.

希望能够帮助到你,O(∩_∩)O谢谢~
追问
w>x?w:y<z?y:z 中?的存在有必要吗?后者中的Y:Z有什么意义呢?谢谢
追答
有必要
如果y<z成立,输出y
否则输出z。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式