1
if ((a % 5) && (a % 11))
  printf("The number %d is divisible by 5 and 11\n", a);
else
  printf("%d number is not divisible by 5 and 11\n", a);

&&如果我不添加表达式,逻辑运算符将如何工作== 0,如果没有余数,它会寻找商吗?并且商将始终是非零项,因此程序将始终返回 true。

4

3 回答 3

3

在您的代码中

 if ((a % 5) && (a % 11))

是相同的

 if ( ((a % 5) != 0)  && ((a % 11) != 0 ) )

任何非零值都被视为TRUTHY

于 2020-09-01T15:38:29.573 回答
2

根据 C 标准(6.5.13 逻辑与运算符)

3 如果 && 运算符的两个操作数比较不等于 0,则 && 运算符将产生 1;否则,它产生 0。结果具有 int 类型。

在 if 语句中使用的表达式中

if ((a % 5) && (a % 11))

如果每个操作数a % 5a % 11不等于 0,则表达式的计算结果为逻辑真。也就是说,当a不能被整除5且不能被整除时,11表达式的计算结果为真,因此在该语句中输出错误消息

printf("The number %d is divisible by 5 and 11\n", a);

要使输出正确,您应该按以下方式更改 if 语句中的表达式。请注意,您还需要在 printf 的第二次调用中更改消息。

if ((a % 5 == 0) && (a % 11 == 0 ))
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    printf("The number %d is divisible by 5 and 11\n", a);
else
    printf("%d number is either not divisible by 5 or by 11\n", a);
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
于 2020-09-01T16:18:19.157 回答
0

@Saurav的回答最能描述您的问题。除此之外,如果您想要一个解决方案以防万一您不想添加== 0,那么您可以简单地使用!(NOT) 运算符:

if (!(a % 5) && !(a % 11))

现在它divisible只会在两个表达式都有零值时显示(即没有余数 - 就像数字一样55)。

于 2020-09-01T15:42:40.613 回答