我在大学学习 C,在下面的一些练习中,我不明白"if"语句中的递增和递减运算。为什么答案是0 2?
#include <stdio.h>
int main () {
int x = 1, y = 1;
if ((x-- || y --) && (--x || --y))
printf ("%d %dn",x+1,y +1);
else if ((x++ && y++) || (++ x && ++y))
printf ("%d %dn",x+2,y +2);
else
printf ("%d %dn",x+3,y +3);
return 0;
}
当两边都不为零时,&&
返回 1。如果第一个表达式的值为 0,则第二个表达式不会执行。
当至少一侧不为零时,||
返回 1。如果第一个表达式未值为 0,则不会执行第二个表达式。
前增量在使用值之前完成其工作。在找到序列点之前,后期增量不会执行任何操作。&&
和||
是序列点。
现在在第一个if
中有两个表达式除以&&
。这意味着仅当双方都升值为非零值时,才会输入if
。
if ((x-- || y --) && (--x || --y))
x--
为 1,因此第一个||
立即返回 1,而不会执行y--
。
找到一个序列点,x
变为 0。
现在--x
是 -1,它不是 0。因此,即使是第二个||
也会立即返回 1。
&&
的两边都是非零的,因此输入if
时x
为 -1,y
为 1。
&&
称为逻辑 AND 运算符。如果两个操作数都不为零,则条件变为 true。
||
称为逻辑 OR 运算符。如果两个操作数中的任何一个不为零,则条件变为 true。
!
称为逻辑 NOT 运算符。它用于反转其操作数的逻辑状态。如果条件为真,则逻辑 NOT 运算符将使其为假。
&& (逻辑 AND) 示例:(x>5) && (y<5) 当两个条件都为真时,它返回 true。
||(逻辑或)示例 : (x>=10) ||(y>=10) 当至少有一个条件为真时,它返回 true
printf("n%d , %dn",x--,y--); // x=1 , y=1
因此,此表达式返回 1(至少有一个条件为真)
printf("n%d , %dn",--x,--y); // x=0 , y=0
因此,此表达式返回 0(至少有一个条件为真)
所以,在条件如果
&&(--x || --y)) //y-- does not excuted
他只是执行 --x,这里 x=0,y=1(y=1,因为如果条件验证只是 x-- 因为 OR ||)
输出为 : 0 2
if和else if之间的区别:
例如:
第一种情况:
if(x == 0) ... //if x = 0 this will work and skip the following else-if statements
else if(x == 1) ...//if x not equal to 0 and if x = 1 this will work and skip the following else-if statement
else if(x == 2) ...// if x not equal to 0 or 1 and if x = 2 the statement will execute
第二种情况:
if(x == 0) ...//if x = 0 this will work and check the following conditions also
if(x == 1) ...//regardless of the x == 0 check, this if condition is checked
if(x == 2) ...//regardless of the x == 0 and x == 1 check, this if condition is checked
对于第一种情况:一旦 else if(或第一个 if)成功,则不会测试剩余的其他 ifs 或 else。然而,在第二种情况下,即使所有(或其中一个)都成功,每个if都将被测试。
在你的代码中,第一个if是正确的,所以else if &else不执行,如果你想执行这三个条件,你应该在所有条件中使用if