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

[复制链接]
查看11 | 回复4 | 2010-12-26 16:28:26 | 显示全部楼层 |阅读模式
大学C语言书上的一个题
区分不清楚
请教高手~!
#include
main()
{
int a=4,b=8,c=5;
int d1,d2,d3,d4;
d1=(ab--);
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=(ab--);
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=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
有两个问题
第一个:d3输出的时候为什么b=7。是怎么算出来的?
第二个:程序都运行过++a为什么a输出的结果仍为4呢?
请教啦
谢谢!~!

回复

使用道具 举报

千问 | 2010-12-26 16:28:26 | 显示全部楼层
初始化 b=8在d2=(a>b)&&(++a==5)||(c>b--);中,虽然所有条件都不成立,但c>b-- 这一公式还是照样运行,b的值减少了1,所以b=7;程序里并没有运行过++a;在d1=(ab--)中,运行到ab)&&(++a==5)||(c>b--),由于a>b不成立,而导致++a==5这一条件无需判断;的d4同d2;)所以a依然不变
回复

使用道具 举报

千问 | 2010-12-26 16:28:26 | 显示全部楼层
注意关系符号的运算,当为“&&”或“||”时,从左向右一旦遇到表达式值为0或1的,后面的就不再运行了。比如:d1=(ab--),因为ab--)的值就为1了,后面的就不算了。不知道我说清楚了没?
回复

使用道具 举报

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

使用道具 举报

千问 | 2010-12-26 16:28:26 | 显示全部楼层
程序都运行过++a为什么a输出的结果仍为4呢?d1=(ab--);||的优先级相同,执行到||就没有执行了,因为a<b的结果为1,所以整个一条语句都是1,而系统执行时执行到a<b就没有执行了,这在C中叫短路算法。第一个:d3输出的时候为什么b=7。是怎么算出来的?d3=(a<b)||(++a==5)&&(c
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行