我很难理解这个程序

时间:2016-02-02 05:32:51

标签: c

#include <stdio.h>
int main(void)
{
    int i=10;
    if(i==20 || 30)
    printf("True");
    else
    printf("False");
    return 0;
}

//提供输出:True //请告诉我如何评估这个if循环

5 个答案:

答案 0 :(得分:4)

这里没有循环..

只需一次条件检查,具有以下条件。

if(i==20 || 30)

首先,您应该知道,在条件检查中,任何非零值都将被视为True

因此,首先使用值i检查20,如果为真,则打印True,否则会检查下一个条件,因为中间有OR 。 SInce下一个条件是非零,这总是正确的,因此它进入并打印True

注意:此程序将始终打印True,因为下一个条件始终为true,并且其间只有一个OR,只需要其中一个条件是的。

答案 1 :(得分:2)

我有一种感觉,你想检查&#34;如果我是20或30&#34;。其语法是&#34; if(i是20)或(i是30)&#34;。将该逻辑转换为代码是:

if ( i == 20 || i == 30 )

使用时

if ( i == 20 || 30 )

翻译为:

if ( (i == 20) || 30 )

无论(i == 20)的评估结果如何,条件表达式总是会计算为&#34; true&#34;因为30是一个非零值。

答案 2 :(得分:1)

你的if语句是两个条件 首先是(i == 20),第二个是30 第二个条件是30,这总是正确的。 对于&#34; OR&#34;操作任何一个true都足以执行if语句 所以if下的语句是executecd

答案 3 :(得分:0)

在您的代码中

i==20提供结果false,因为i=10

i==20 || 30等于false || 30给出结果true,因为条件检查中30(或非零值)等于true

应该是:

if((i==20) || (i==30))

答案 4 :(得分:0)

表达式if(i==20 || 30)结果为真(非零)因此您将输出视为真。将根据运算符的计算优先级来计算表达式。 ==的优先级高于||,因此i==20将首先进行评估,结果如下所示

if( true || 30 )

现在运算符为||,首先检查左操作数是否为真,如果是块则控制进入并打印为真。这称为短路评估。如果我们有逻辑||运算符,首先将评估Left操作数。如果左操作数为true,则编译器不会评估右操作数。