C语言菜鸟求助。

(昨天提了这个问题。今天被度娘吞了。害的我再发一次)#include<stdio.h>main(){inta=4,b=8,c=5;intd1,d2,d3,d4;d1=(a... (昨天提了这个问题。今天被度娘吞了。害的我再发一次)
#include<stdio.h>
main()
{
int a=4,b=8,c=5;
int d1,d2,d3,d4;
d1=(a<b)||(++a==5)||(c>b--);
printf("d1=%d,a=%d,b=%d,c=%d\n",d1,a,b,c);
d2=(a>b)&&(++a==5)||(c>b--);
printf("d2=%d,a=%d,b=%d,c=%d\n",d2,a,b,c);
d3=(a<b)||(++a==5)&&(c>b--);
printf("d3=%d,a=%d,b=%d,c=%d\n",d3,a,b,c);
d4=(a>b)&&(++a==5)&&(c>b--);
printf("d4=%d,a=%d,b=%d,c=%d\n",d4,a,b,c);
}
运行结果
d1=1,a=4,b=8,c=5
d2=0,a=4,b=7,c=5
d3=1,a=4,b=7,c=5
d4=0,a=4,b=7.c=5
第二行d2。。b=7是为什么呢。不是a>b是假。后面全部都不算了吗?
第三行d3。。++a怎么没有计算呢。不是按优先级&&的优先级为中。||为低吗。是不是应该先算(++a==5)&&(c>b--)这个部分呢。哪些地方算为整体呢。求达人解答。越详细越好。分不多。。只有10分。。谢谢了。
非常感谢各位。第三行出了问题。
如果先算&&的话。第三行++a。怎么没有计算呢。。毕竟第三行是最先开始算的++a。

再次感谢大家帮我解决第二行的问题。第二行我已经完全理解了。

另外第三行。按照优先级的话。如果我这样写
d3=(++a==5)&&(c>b--)||(a<b);
是不是和原式
d3=(a<b)||(++a==5)&&(c>b--);
没有任何区别呢?

实质上貌似是有的。这样输出结果。a=5 b=7 c=5.。。

求解。。
展开
 我来答
qf876030788
2012-02-02
知道答主
回答量:39
采纳率:0%
帮助的人:27.7万
展开全部
!(非)→&&(与)→||(或),他们的大小关系是从左往右的,就是说计算的优先级也是从左往右的。就是的‘!’是老大,要把他的问题想解决掉,再干老二,最后是小喽喽。
你的问题“第二行d2。。b=7是为什么呢。不是a>b是假。后面全部都不算了吗?”
回答是否定的,计算机会全部都执行的。
你的问题“第三行d3。。++a怎么没有计算呢”
我回答你:怎么可能没有计算。
回答你那些地方是整体:
(a<b)||(++a==5)||(c>b--)里每一个括号就是一个整体,因为||与||间是同等级的所以从左往右就ok了。
(a>b)&&(++a==5)||(c>b--)里,(a>b)&&(++a==5)是一个整体,做完之后在做“||(c>b--)”
以此类推。。。。本人去年现半学期才学的c语言,如果说不清还请海涵~
shine1991
科技发烧友

2012-02-02 · 智能家居/数码/手机/智能家电产品都懂点
知道顶级答主
回答量:4.7万
采纳率:82%
帮助的人:2.3亿
展开全部
你也说了,&&优先级要高于||,所以表达式整体实际是个||
(a>b)&&(++a==5)||(c>b--)就是( (a>b)&&(++a==5) ) || (c>b--)
(a<b)||(++a==5)&&(c>b--)就是(a<b) || ( (++a==5)&&(c>b--) )

然后这样再看看呢

优先级不应理解为先算后算的问题,而应该理解为先和操作数结合还是后和操作数结合的问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
李苗苗00000
2012-02-05
知道答主
回答量:21
采纳率:0%
帮助的人:18.9万
展开全部
(a>b)&&(++a==5)||(c>b--)中,前面(a>b)&&(++a==5)中a>b为假,则(a>b)&&(++a==5)为0
然后继续0||(c>b--),则当然得计算后面的b--了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
oo2033578
2012-02-02 · 超过41用户采纳过TA的回答
知道小有建树答主
回答量:118
采纳率:0%
帮助的人:91.8万
展开全部
楼主 这道题的确是好题 相信你理解如下一个概念后 就可以理解这个题目了
若 a || b 此时 如果a为 真(1) 即 || 左边为1 则a||b必为真(1)!!(楼主能明白吧~)
注意!!:c语言此刻将不再运行b 直接判定 a || b 返回 真(1)
类似!!:a &&b 如果a 为 假(0) 则 b 不再运行 a&&b 返回假(0) ----这里都是从左往右

d1=(a<b)||(++a==5)||(c>b--); 其中 a<b 为 真(1) 则 后面的 (++a==5)||(c>b--); 不再执行
所以 d1=1,a=4,b=8,c=5
同理d2=(a>b)&&(++a==5)||(c>b--); a>b 为 假(0) 则(++a==5) 不再运行 (a>b)&&(++a==5)
直接判断为假(0) 然后 0 || (c>b--); 为 0 || 0; (c>b--); 执行了~
所以 d2=0,a=4,b=7,c=5
剩下的问题留给楼主当练习吧~~~~求分分哟 亲~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
201007031324
推荐于2016-01-04 · TA获得超过1239个赞
知道小有建树答主
回答量:505
采纳率:0%
帮助的人:234万
展开全部
#include<stdio.h>
main()
{
int a=4,b=8,c=5;//定义整型变量a,b,c,并赋初值a=4,b=8,c=5
int d1,d2,d3,d4;//定义四个整型变量d1,d2,d3,d4
d1=(a<b)||(++a==5)||(c>b--);//a<b为真,d1=1,后面的++a和b--不再执行,所以a,b的值不变
printf("d1=%d,a=%d,b=%d,c=%d\n",d1,a,b,c);//输出1,4,8,5
d2=(a>b)&&(++a==5)||(c>b--);//a>b为假,++a不执行,b--执行,c>b--相当于c>b,b=b-1,c>b为假,所以d2=0,b=7,a不变,c不变
printf("d2=%d,a=%d,b=%d,c=%d\n",d2,a,b,c);//输出0,4,7,5
d3=(a<b)||(++a==5)&&(c>b--);//a<b为真,++a不执行,b--不执行,c>b为假,所以d3=1,b不变,a不变,c不变
printf("d3=%d,a=%d,b=%d,c=%d\n",d3,a,b,c);//输出1,4,7,5
d4=(a>b)&&(++a==5)&&(c>b--);//a>b为假,后面不执行,即a,b,c的值不变还是4,7,5 ,d4=0
printf("d4=%d,a=%d,b=%d,c=%d\n",d4,a,b,c);//输出0,4,7,5
}

//说明:&&的优先级大于||的优先级。如果在一个式子中,只出现||,程序从左往右执行,一旦出现真值,程序不再执行后面的式子
//如果在一个式子中,只出现&&,程序从左往右执行,一旦出现假值,程序不再执行后面的式子
//如果在一个式子中同时出现&&和||,则先执行&&,再执行||
希望能够帮到你,如还有疑问,可发到我的邮箱1246747572@qq.com,我会尽我所能回答。互助互学。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式