
main() { int a=0,b=1,c=2; if(++a>0||++b>0) ++c; printf("%d,%d,%d",a,b,c); getch(); }结果是,1。1。3
我就不明白为什么得这么结果,想了好久也想不明白,他是怎样算的请大家教下我好嘛说明白点,一步,一步的说,好嘛...
我就不明白为什么得这么结果,想了好久也想不明白,他是怎样算的请大家教下我好嘛说明白点,一步,一步的说,好嘛
展开
展开全部
因为++a自加在前所以现自加a等于1
b同上
1>0 || ++b>0或运算只要一边成立就为真 所以b不自加 如果a<0 执行++b你可以试试
++c //c=3
所以结果为1 1 3
b同上
1>0 || ++b>0或运算只要一边成立就为真 所以b不自加 如果a<0 执行++b你可以试试
++c //c=3
所以结果为1 1 3
展开全部
首先从if的条件讲起
++a>0||++b>0
++a>0 --> 1>0 为真
||的运算规则是 前面为真 则跳过后面一个条件的运算 因为不管后面一个条件的真假
这整个条件的值都是 真
但是如果 || 符号前面的条件值为 假时 则运算后面一个值
所以++b>0就没有运算 b仍然等于1
我想你应该就这个没弄懂吧。
剩下的你应该明白了
你可以试试把条件改成
if(++b>0||++a>0)
你就明白了
++a>0||++b>0
++a>0 --> 1>0 为真
||的运算规则是 前面为真 则跳过后面一个条件的运算 因为不管后面一个条件的真假
这整个条件的值都是 真
但是如果 || 符号前面的条件值为 假时 则运算后面一个值
所以++b>0就没有运算 b仍然等于1
我想你应该就这个没弄懂吧。
剩下的你应该明白了
你可以试试把条件改成
if(++b>0||++a>0)
你就明白了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int a=0,b=1,c=2; // 不需要解释吧
++a>0 // a成了1,然后做了次1>0的比较,结果为真
++a>0||++b>0 // 由于||之前已经为真,||之后的表达式就不执行了,b的值不变
++c; // if成功,执行下面的语句
你应该是没理解||和&&的估值规则吧。他们的左边是必然会被执行的,但左边执行完之后,右边就不一定了。上面是||,如果&&的话,左边为假则&&右边不执行。
++a>0 // a成了1,然后做了次1>0的比较,结果为真
++a>0||++b>0 // 由于||之前已经为真,||之后的表达式就不执行了,b的值不变
++c; // if成功,执行下面的语句
你应该是没理解||和&&的估值规则吧。他们的左边是必然会被执行的,但左边执行完之后,右边就不一定了。上面是||,如果&&的话,左边为假则&&右边不执行。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
蓝桥的题目吧 这里要从C语言的符号优先级进行考虑 不会再问我吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询