大学C语言书上的一个题 区分不清楚一个题 请教高手~!

大学C语言书上的一个题区分不清楚请教高手~!#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"",d,a,b,c);d2=(a>b)&&(++a==5)||(c>b--);printf("d2=%d,a=%d,b=%d,c=%d尀n"",d,a,b,c);d3=(a<b)||(++a==5)&&(c>b--);printf("d3=%d,a=%d,b=%d,c=%d尀n"",d,a,b,c);d4=(a>b)&&(++a==5)&&(c>b--);printf("d4=%d,a=%d,b=%d,c=%d尀n"",d,a,b,c);运行结果d1=1,a=4,b=8,c=5d2=0,a=4,b=7,c=5d3=1,a=4,b=7,c=5d4=0,a=4,b=7,c=5有两个问题第一个:d3输出的时候为什么b=7。是怎么算出来的?第二个:程序都运行过++a为什么a输出的结果仍为4呢?请教啦谢谢!~!
2026年09月24日 23:57
有4个网友回答
网友(1):

初始化 b=8
在d2=(a>b)&&(++a==5)||(c>b--);中,虽然所有条件都不成立,
但c>b-- 这一公式还是照样运行,b的值减少了1,所以b=7;

程序里并没有运行过++a;
在d1=(ab--)中,运行到a在d2=(a>b)&&(++a==5)||(c>b--),由于a>b不成立,而导致++a==5这一条件无需判断;
的d4同d2;)
所以a依然不变

网友(2):

程序都运行过++a为什么a输出的结果仍为4呢?
d1=(ab--);
||的优先级相同,执行到||就没有执行了,因为a第一个:d3输出的时候为什么b=7。是怎么算出来的?
d3=(ab--);
&&的优先级大于||所以先执行c>b--所以就会有b=7的结果。
希望对你有用吧!

网友(3):

第一个为什么b=7 因为在(c>b--)的时候,b做了自减运算所以b=7;
第二个为什么程序都运行过++a为什么a输出的结果仍为4 因为在计算机做判断的时候对于&&运算只要第一个不满足,就不会计算后面的式子,对于||运算只要前面的满足条件就不计算后面的式子,所以你的++a一次都没有被计算过,所以a仍为4

网友(4):

注意关系符号的运算,当为“&&”或“||”时,从左向右一旦遇到表达式值为0或1的,后面的就不再运行了。比如:d1=(ab--),因为ab--)的值就为1了,后面的就不算了。不知道我说清楚了没?