main() {int x=2,y=-1,z=2; if(x<y) if(y<0)z=0; else z+=1; printf("%d\n",z); } 为什么呢结果是2呢?谢

 我来答
49413445480dc
2012-10-31 · 超过25用户采纳过TA的回答
知道答主
回答量:82
采纳率:0%
帮助的人:33.2万
展开全部
嗯,这个结果就是2,给你举个例子!
if(x<y)
if(y<0)
z=0;
else
z+=1;

这是C里面的典型的摇摆问题,else和距离它最近的if进行匹配,它相当于:
if(x<y)
{if(y<0)
z=0;
else
z+=1;}
而且若像for和while循环,还有一些逻辑判断语句,若下面不带括号,它的作用于只是它紧跟着的唯一一条语句:
比如:
for(i=0;i<5;i++)
printf("%d ",i+1);
printf("$ ");
它的运行结果是:
1 2 3 4 5 $
而不是:
1 $ 2 $ 3 $ 4 $ 5 $
现在你明白了吧!

还有关于逻辑表达式的短路特性,你要是想了解的话,我可以介绍给你!
追问
这个更厉害,呵呵,好羡慕你们,一开始我学这c就像看天书给,谢谢
追答
嗯,愿你早日进步!
578221769
2012-10-31 · TA获得超过121个赞
知道答主
回答量:41
采纳率:0%
帮助的人:20.5万
展开全部
应该是if(x<y){ if(y<0)z=0; else z+=1; }的;应该是根本就没有运行这么一段;一般不会这样写的;学程序一定要让人看的懂;这个有一些歧义了;
追问
我们的教材上面的题就是这样的,然后程序运行也是这个结果,看了很久都不太理解,现在理解了哟,谢谢你,嘿嘿
追答
教材上这样写是因为要让你们认识到这个问题;
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
1553449225
2012-10-31
知道答主
回答量:10
采纳率:0%
帮助的人:4.3万
展开全部
不能确定是否加打括号时候尽量加上 确定自己的顺序对 加上括号不影响
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2018-01-01
展开全部
因为if(x<y)不符合条件,所以直接执行printf语句
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
传七入蜜飘1p
2012-10-31 · TA获得超过458个赞
知道小有建树答主
回答量:595
采纳率:66%
帮助的人:321万
展开全部
if(x<y) if(y<0)z=0; else z+=1; == if(x<y)( if(y<0)z=0; else z+=1; )

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

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式