C语言问题

C语言中
int x=1,y=1,z=1;
u=x++&& y++||z++

int x=10,y=7,z=5,u=0;
u=x<y==x/y!=z>y-3;
这两个程序应该怎么读,输出的结果是多少?
u=x++&& y++||z++
这个表达式是什么意思,为什么当想,x、y、z的值改变时结果还是1

u=x++&& y++||z++
首先这个表达式从左到右计算。&&的优先级是高于||故先运算x++&& y++运算结果是一 && 和|| 又称为简洁与和简洁或,简洁与的意思,如x++&&y++,如果x++被判断为假,则不再对y++进行判断,以为即使y++为真整个x++&&y++也是假。简洁或的意思是x++||y++,如果判断x++为真,则不再对y++进行真假判断,即使y++为假,x++||y++,也还是为真。故对于表达式u=x++&& y++||z++来说x++&&y++为真了,不再对z++进行判断,即z++没有被执行。最后结果是x=2,y=2,z=1,u=1。
printf("%d %d %d %d",x,y,z,x++&& y++||z++);对于这个的输出结果,楼主应该思考一下。
对于int x=10,y=7,z=5,u=0;
u=x<y==x/y!=z>y-3;
首先要搞清楚,运算符的优先级这里+,-,的优先级大于>,>=,<,<=的优先级大于==和!=的优先级的。所以u=x<y==x/y!=z>y-3;的运算次序是u=10<7==10/7!=5>7-3
u=0==1!=1
u=0!=1(相同优先级满足从左往右的计算次序)
u=1;
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-12-30
第一个:
所有的++都是运行完这一句才加,所以u=1&&1||1=1
第二个:
比较的都是从右到 顺序是 u=((10<7)==((10/7)!=(5>(7-3)))) u=1;
第2个回答  2010-12-30
逻辑表达式
第3个回答  2010-12-30
第一个
u赋值是整个表达式的 然后x++ 再y++ 不读入z++ 因为y++非零
所以 u=1 x=2 y=2 z=1

第二个
先是判断在z>y-3,然后这个表达式为1 x/y!=1 这个表达式为0 然后 x<y==0 这个表达式为1
所以u=1 其他值不变 在网上搜下 优先级 再看看结合性 就明白了
第4个回答  2010-12-30
这种题都是学校教育的某些“孔乙己”想出来的。主要就是考你优先级问题,在现实中你要是这样写会被骂死的。详情请见一些编程规范之类的。平时用电脑运行下得出答案就好了,没必要搞它。不会的话也没什么可耻的。
相似回答