回 帖 发 新 帖 刷新版面

主题:两道习题

1)若w=1,x=2,y=3,z=4,则条件表达式我w<x?w:y<z?y:z的值是_____???
2)int w=3,z=7,x=10;
pritf("%d\n",x>10?x+100;x-10)
printf("%d\n",w++||z++);
printf("%d\n",!w>z);
printf("%d\n",w&&z);
}
其实我想问大家的是第一题得多少,我有答案就是有点想不明白而已
第2题:尤其是第3个输出语句,我运行了,是跟答案一样的,但是,不知道为什么!
另外,我想问大家的是---?:是属于关系运算符还是逻辑运算符!!!
望大家帮忙看看!!! 呵呵[em1][em2][em1][em2]

回复列表 (共3个回复)

沙发

条件运算符是右结合性的,所以第一道题第一步先:y<z?y:z 结果为y,再w<x?w:y(第一步的结果),结果为w 所以最终结果是 1 。

第二题: 第一个printf 为 0 换行。(条件语句)
         第二个printf 为 1 换行。(逻辑或运算,结果为1)
         第三个printf 为 0 换行。(根据优先级,单目运算符!优先级高于比较运算符>,所以!w为0,0>7为假,所以输出为0)
         第四个printf 为 1 换行。 (w=4,z=8,相与结果为真,输出1)

板凳

条件运算符是右结合性的,所以第一道题第一步先:y<z?y:z 结果为y,再w<x?w:y(第一步的结果),结果为w 所以最终结果是 1 。

第二题: 第一个printf 为 0 换行。(条件语句)
         第二个printf 为 1 换行。(逻辑或运算,结果为1)
         第三个printf 为 0 换行。(根据优先级,单目运算符!优先级高于比较运算符>,所以!w为0,0>7为假,所以输出为0)
         第四个printf 为 1 换行。 (w=4,z=8,相与结果为真,输出1)

3 楼


1>  值为1,从右往左计算

2>  答案是0  1   0  1
    关系运算和逻辑运算的结果都是逻辑值,即真1假0
    对x>10?x+100;x-10,x>10为假,所以结果应该是x-10,即0
    对w++||z++,因为w++不为0,可提前计算表达式结果为真,即为1,不用处理z++
    对!w>z,运算符!优先级大于>,!w为0,0>z=7为假,输出为0
    对w&&z,两者与为真,结果输出为1

   ?:是条件运算符,我认为是关系运算和条件选择的复合...

我来回复

您尚未登录,请登录后再回复。点此登录或注册