搜索
首页 电脑/网络 程序设计 C/C++

为什么前后结果的算法不同?

  为什么在s为1和-1的时候,算法是不一样的?#include #define s x=y=z#define P3(x,y,z) printf("x=%d\t y=%d\t z=%d\n",x,y,z)void main(void){ int x,y,z; s=1;++x||++y||++z;P3(x,y,z); s=1;++x&&++y||++z;P3(x,y,z); s=1;++x&&++y&&++z;P3(x,y,z); s=-1;++x||++y&&++z;P3(x,y,z); s=-1;++x||++y||++z;P3(x,y,z); s=-1;++x&&++y&&++z;P3(x,y,z);}。
  

全部回答

2006-10-31

0 0

    算法是没问题的。 逻辑运算符的顺序从左到右。C里一旦能确定结果了就不继续往右判断了。 s=1; ++x||++y||++z; 因为是两个和运算符,当出现“真”时可以中途停止,表达式值为真(1)。
  先是看++x的值,值是2,非0,则后面的判别式不用做就可知这个式子的值为1 这时x=2,y=1,z=1 s=1; ++x&&++y||++z; 先是看++x的值,值是2,非0,但后面是“与”,就要看++y。
    ++y的值是2,非0,则++x&&++y的值是真,后面是“和”,不用判断就可以知道整个表达式的值是1 这时x=2,y=2,z=1 s=1; ++x&&++y&&++z; 因为是两个与运算符,当出现“假”时可以中途停止,表达式值为假(0)。
  ++x、++y、++z依次计算都是非0,没出现中途停止的条件。   这时x=2,y=2,z=2 s=-1; ++x||++y&&++z; ++x的值是0,后面是“和”的话,要看||后面的值。
  ++y也是0,那++x||++y的值为假,后面跟着的是“与”,不用接着判断也知道整个式子的值是假。 这时x=0,y=0,z=-1 s=-1; ++x||++y||++z; 同第一个,遇到“真”(非0)可停止。
    但三个式子都是0,则整个表达式的值为0。 这时x,y,z都为0 s=-1; ++x&&++y&&++z; 同第三个,只要一个是0就可停止。++x是0,后面的都不用做了。
   这时x=0,y=-1,z=-1。

类似问题换一批

热点推荐

热度TOP

相关推荐
加载中...

热点搜索 换一换

电脑/网络
C/C++
程序设计
电脑装机
操作系统/系统故障
硬件
笔记本电脑
百度
互联网
反病毒
软件
程序设计
C/C++
数据库
VB
JAVA相关
C#/.NET
VC++
汇编语言
其他编程语言
C/C++
C/C++
举报
举报原因(必选):
取消确定举报