main() {int a=10,b=20,c=30,d; d=++a<=10||b-->=20||c++; printf("%d,%d,%d,%d\n",a,b,c,d); }

C++初学,各位大大帮忙求结果,求解释,谢谢了!... C++初学,各位大大帮忙求结果,求解释,谢谢了! 展开
 我来答
zzw820428
2013-03-14 · TA获得超过729个赞
知道小有建树答主
回答量:633
采纳率:0%
帮助的人:690万
展开全部
最后结果: 11,19,30,1
原因:
d=++a<=10||b-->=20||c++;
根据优先级加上括号就成了这样
d=(((++a) <= 10) || ((b--)>=20)) || (c++);
首先C的逻辑或运算时有个短路计算的规则,即||左边为真时不会进行右边的计算。
((++a) <= 10): ++a,+号在左边,先自增再比较,所以 a=11, 11<=10为假,进行b的运算。
((b--)>=20)) : b--,减号在右边,先比较再自减,所以比较时b=20,20>=20成立,比较完成后进行b的自减运算,完成时b=19,此时(((++a) <= 10) || ((b--)>=20)) 的值为真,不再进行c的运算。所以c的值不会变c=30,d为真即d=1
可爱皮夹
2013-03-14 · 和我一起,分享我的爱豆
可爱皮夹
采纳数:399 获赞数:1056

向TA提问 私信TA
展开全部
main()
{ int a=10,b=20,c=30,d;
d=++a<=10||b-->=20||c++; //先要搞清楚运算符的优先级问题,才好做,在这里优先级最高的是++和--,然后是<=,>=,再后是||,所以结果是11,19,30,1。这里的c之所以等1,是因为(((++a) <= 10) || ((b--)>=20)) 的结果已经为真了,而||的运算规则是一真为真,否则为假,显然这已经为真了,所以c++也就不用计算了。
printf("%d,%d,%d,%d\n",a,b,c,d);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友71e7848
2013-03-14 · 超过37用户采纳过TA的回答
知道答主
回答量:153
采纳率:0%
帮助的人:104万
展开全部
1、先给你说一下||的执行原理,就是++a<=10||b-->=20||c++这几句话,如果d=++a<=10为真,则后面的都不会执行,++a<=10为假,b-->=20为真,则c++不会执行,如果为假,则c++才执行。
2、a=11;因为++a,自增运算符,++在左边,所以先自增,即10+1=11;
3、b=19;因为++a<=10为假,所以执行第二个条件语句,b--,自减运算符,--在右边,所以先 判断是否b>=20,然后再自减,因为b初值为20,所以条件为真,然后b=20-1=19;
4、c=30;因为我说了第二个条件为真,就不执行第三个条件语句,所以c++不执行,及c仍然为 30;
4、d=1;因为条件语句最后为真,所以为true,则为1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
炜炜ing
2013-03-14 · TA获得超过114个赞
知道小有建树答主
回答量:178
采纳率:0%
帮助的人:62.8万
展开全部
首先你要知道运算符是有优先级的,参考下边的链接,“++”、“--”优于“<=、>=”优于“||”优于“=”,
因此
先算++a,a=11,大于10,第一个“||”运算之前的值为0;
b=20,满足条件,两个“||”之间的值为1,然后b--,b=19;
c++,c=31,最后“||“之后的部分返回的值为31>0,你要知道逻辑算符里只有”真“和”假“,”0“是假,非”0“是真,因此,返回的虽然是31,但是不是0,其实真正返回的就是1(真);
或的运算是都为0则结果为0,有一个1则结果为1,因此,d=1。
上边貌似没有说到前置++、--和后置++、--,其实很简单,前置就是先将值加1或者减1再将这个值拿到后边去运算,如a的运算过程;后置就是将值先赋给其他运算,如果有的话,算完后再自加1或者减1,如b的运算过程,先赋值20给”>=20“进行逻辑运算,再自减1。
希望你学得愉快!

刚没看楼上,忘记”短路计算“,确实如楼上所说,c值不变为30

参考资料: http://www.slyar.com/blog/c-operator-priority.html

来自:求助得到的回答
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式