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 展开
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 展开
1个回答
展开全部
首先我们要明确计算的顺序,已经知道条件运算符是自右向左的,那么原式等价为:
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
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
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询