C语言小题目~~

voidmain(){intk=0,m=0,n=0,x=3,y=2;k=(m=x&&y)||(n=x/y);printf("%d,%d,%d",k,m,n);}输出是1,... void main( )
{int k=0,m=0,n=0,x=3,y=2;
k=(m=x&&y)||(n=x/y);
printf("%d,%d,%d",k,m,n);
}

输出是1,1,0
为什么n是0啊,不是3/2为1吗
展开
 我来答
dwjchdu
2014-01-14 · TA获得超过5914个赞
知道大有可为答主
回答量:4576
采纳率:60%
帮助的人:1055万
展开全部
因为n=x/y这一句根本没有执行!
||运算的时候是从左向右运算的,这时m=x&&y这一句的结果已经为1了,也就是“真”,那么无论后面的n=x/y的值是真是假,对于||运算来说,结果都是真,所以为了节约系统资源,提高运算速度,编译系统默认不对后面的进行计算。所以n的值并没有变化,就是初始值0.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
songcitc
2014-01-14 · TA获得超过397个赞
知道小有建树答主
回答量:170
采纳率:0%
帮助的人:198万
展开全部
因为你的k=(m=x&&y)||(n=x/y)当前半部分为真时,后半部分就不需要再执行,因此n还是原始值为0。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
众里寻他0822
2014-01-14 · TA获得超过136个赞
知道小有建树答主
回答量:263
采纳率:100%
帮助的人:248万
展开全部
或运算:当前面为真,后面不计算。
你前面m=1 为真 ,后面没计算,所以为0
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友5433dcf
2014-01-14 · TA获得超过420个赞
知道小有建树答主
回答量:304
采纳率:0%
帮助的人:174万
展开全部
因为||和&&这两个运算符,只要它判断出正确的后就不向下进行运算了,这题中k=(m=x&&y)让m=1,k=1了,对于||来说不用判断后面的,所以会出先1,1,0,还望楼主多看看这两个符号的相关介绍
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fly1000fans
2014-01-14 · 超过27用户采纳过TA的回答
知道答主
回答量:67
采纳率:100%
帮助的人:35.7万
展开全部
第二个括号的表达式,根本没有执行,或运算,在第一个括号反回真的时候,就不计算右边的表达式了,因为结果肯定为真
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式