C 编程练习

  • 本文关键字:练习 编程 c
  • 更新时间 :
  • 英文 :


我在大学学习 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。

&&的两边都是非零的,因此输入ifx为 -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

最新更新