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.。。
求解。。 展开
#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.。。
求解。。 展开
展开全部
!(非)→&&(与)→||(或),他们的大小关系是从左往右的,就是说计算的优先级也是从左往右的。就是的‘!’是老大,要把他的问题想解决掉,再干老二,最后是小喽喽。
你的问题“第二行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语言,如果说不清还请海涵~
你的问题“第二行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语言,如果说不清还请海涵~
展开全部
你也说了,&&优先级要高于||,所以表达式整体实际是个||
(a>b)&&(++a==5)||(c>b--)就是( (a>b)&&(++a==5) ) || (c>b--)
(a<b)||(++a==5)&&(c>b--)就是(a<b) || ( (++a==5)&&(c>b--) )
然后这样再看看呢
优先级不应理解为先算后算的问题,而应该理解为先和操作数结合还是后和操作数结合的问题
(a>b)&&(++a==5)||(c>b--)就是( (a>b)&&(++a==5) ) || (c>b--)
(a<b)||(++a==5)&&(c>b--)就是(a<b) || ( (++a==5)&&(c>b--) )
然后这样再看看呢
优先级不应理解为先算后算的问题,而应该理解为先和操作数结合还是后和操作数结合的问题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
(a>b)&&(++a==5)||(c>b--)中,前面(a>b)&&(++a==5)中a>b为假,则(a>b)&&(++a==5)为0
然后继续0||(c>b--),则当然得计算后面的b--了
然后继续0||(c>b--),则当然得计算后面的b--了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼主 这道题的确是好题 相信你理解如下一个概念后 就可以理解这个题目了
若 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
剩下的问题留给楼主当练习吧~~~~求分分哟 亲~~
若 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
剩下的问题留给楼主当练习吧~~~~求分分哟 亲~~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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,我会尽我所能回答。互助互学。
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,我会尽我所能回答。互助互学。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询