C语言算术运算中的一道题

求以下程序的输出结果:main(){intx=1,y=0,z;z=x-->(x+y)?5:25>y++?'1':'2';printf("%d",z);}谁说下这道题详细的... 求以下程序的输出结果:
main()
{ int x=1,y=0,z;
z=x-->(x+y)?5:25>y++?'1':'2';
printf("%d",z);
}
谁说下这道题详细的运算过程和答案。
一楼的你用TC运行下就知道结果是5了。
还有x-->(x+y) 中y的值你认为是1,我认为是0,因为条件运算符的运算优先级别明显比括号内的低,所以应该先算括号内的,再算算术运算和关系运算,最后才是条件运算,所以最后的条件运算应该是
1>1+0?5:'1'
0?5:'1'
看视结果为'1' ,但用TC运行后的结果却是5 ,就是不知道这是为什么了。
但我用TC单独运行z=x-->(x+y)时发现z的值却是0
展开
 我来答
百度网友dad142f
2009-12-27 · TA获得超过9905个赞
知道大有可为答主
回答量:1548
采纳率:100%
帮助的人:1869万
展开全部
首先我们要明确计算的顺序,已经知道条件运算符是自右向左的,那么原式等价为:
z=x-->(x+y)?5:(25>y++?'1':'2');
也就是先运算后面的括号里面的内容,而25显然是比y++要大的,那么后面这个括号里的值就应该是'1',注意这里是一个字符,而不是整形的1,当把它当做整形的时候,它应该是以其ASCII码来表示的,也就是49.
那么上式就转化为:z=x-->(x+y)?5:49.
而我们知道此时y是1,x是1,而x--计算的时候是先取1来进行比较然后再减一,也就是说大于号左边是1,右边是1+1,即2.那么z的值应该是后面一个也就是49.
故最后输出49
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式