C if 语句


更改基于环境中某些信息的代码行为的能力称为条件代码流。有时您希望代码根据特定条件运行。在这种情况下,我们可以使用If语句。它也被称为决策声明,因为它根据给定的表达式(或在给定的条件下)做出决定。如果表达式求值为true,那么将执行'if'语句中的代码块。如果表达式的计算结果为false,那么将执行'if'语句结束后(结束大括号之后)的第一组代码。表达式是一个表达式,它具有对布尔变量进行操作的关系和/或逻辑运算符。表达式的计算结果为true或false。

if语句的_语法

if (testExpression) {
   // statements
 }

一个简单的例子

让我们看一下这个实例的一个例子:

#include <stdio.h>
#include <stdbool.h>

 int main(void) {
    if(true) {
        printf("Statement is True!\n");
    }

    return 0;
 }
output:
 Statement is True!

就像helloworld.c一样,stdio.h已被包含在内。这个程序的新功能是stdbool.h,它是标准的布尔库 - 它包含的代码可以让我们访问'true'和'false'。

上面例子中的新内容是'if'语句。如果括号内的语句为true,则将运行if语句括号内的代码。对于此示例,true为true,因此代码将运行printf函数。

如果别的

在'If-else'语句中,如果括号内的语句为true,则将执行'if'语句括号内的代码,如果括号内的语句为false,则括号内的代码为'否则'声明将被执行。

当然,这个例子并不是很有用,因为真的总是如此。这是另一个更实用的:

#include <stdio.h>

 int main(void) {
    int n = 2;

    if(n == 3) { // comparing n with 3
        printf("Statement is True!\n");
    }
    else { // if first condition is not true, then comes to this block of code.
        printf("Statement is False!\n");
    }

    return 0;
 }
output:
 Statement is False!

这里有一些不同的重要事情。首先, stdbool.h尚未包含在内。这没关系,因为truefalse都没有被使用。在C中,我们将语句视为true和false,即使操作中不涉及true或false。

在if语句的括号内也是新的东西: n == 3 。这是n和数字3之间的比较。 ==是比较运算符,是C中几个比较运算之一。

嵌套if-else

if-else语句允许在两个可能的替代方案之间进行选择。有时必须在两种以上的可能性之间做出选择。例如,如果参数小于零,则数学中的符号函数返回-1,如果参数大于零,则返回+1,如果参数为零,则返回零。以下C ++语句实现此功能:

if (x < 0)
   sign = -1;
 else
   if (x == 0)
      sign = 0;
   else
      sign = 1;

这是一个if-else语句,其中else后面的语句本身就是一个if-else语句。如果x小于零,则sign设置为-1,但如果不小于零,则执行else之后的语句。在这种情况下,如果x等于零,则将sign设置为零,否则将其设置为1。 新手程序员经常使用if语句序列而不是使用嵌套的if-else语句。那就是他们用逻辑等价的形式写上面的内容:

if (x < 0)
   sign = -1;
 if (x == 0)
   sign = 0;
 if (x > 0)
   sign = 1;

建议不要使用此版本,因为它不清楚只有一个赋值语句将针对给定的x值执行。此外,它是低效的,因为总是测试所有三个条件。

比较运算符

Operator Name Usage Operator Result
Equal To a == b True if a is equal to b, false otherwise
Not Equal To a != b True if a is not equal to b, false otherwise
Greater Than a > b True if a is greater than b, false otherwise
Greater Than or Equal To a >= b True if a is greater than or equal to b, false otherwise
Less Than a < b True if a is less than b, false otherwise
Less Than or Equal To a <= b True if a is less than or equal to b, false otherwise

那个例子也有一个新词: else 。在中的代码else块只运行,如果内部的代码if不运行。

我们可以为所有这些运营商做很多事情!考虑以下内容,我们将使用if-else语句:

#include <stdio.h>

 int main(void) {
    int n = 5;

    if(n == 5) {
        printf("n is equal to 5!\n");
    }
    else if (n > 5) {
        printf("n is greater than 5!\n");
    }

    return 0;
 }
output:
 n is equal to 5!

if-else语句附加了'else if'。如果前一个if中的条件为false,则会运行此代码,但会在其自己的括号内添加一个条件,该条件在运行代码之前必须为true。

逻辑运算符

当然,如果不是真的,或者如果它和其他东西都是真的,我们可能会想要发生一些事情。为此,我们有逻辑运算符:! for not,&& for and,and ||为或。让我们来看看这个行动:

#include <stfio.h>

 int main(void) {
    int n = 5;
    int m = 10;

    if(n > m || n == 15) {
        printf("Either n is greater than m, or n is equal to 15\n");
    }
    else if( n == 5 && m == 10 ) {
        printf("n is equal to 5 and m is equal to 10!\n");
    }
    else if ( !(n == 6)) {
        printf("It is not true that n is equal to 6!\n");
    }
    else if (n > 5) {
        printf("n is greater than 5!\n");
    }

    return 0;
 }
output:
 n is equal to 5 and m is equal to 10!

这是第一组括号: n > m || n == 5 。如果n大于m,或者n等于5,则为真.n不大于m,但n等于5.因为其中一个是真的,并且它们由or连接,声明将为真,并且将打印其中的代码。

因为之前的代码已经执行,所以它不会检查其他语句 - 如果之前的语句没有被检查,那么只会检查它们。但是,仅仅为了练习,请考虑其余代码将要检查的内容。如果n等于5且m等于n == 5 && m == 10n == 5 && m == 10将为真。这是正确的,但如果n为6则不再为真,并且其他内的代码将不会运行。

!(n == 6)使用括号使操作更加明显。就像在数学中一样,括号可用于操作顺序:括号内的事物将在不在括号内的事物之前执行。所以在这种情况下,将评估n == 6 ,并且为false。的! ,'not',将其从false转换为true,因此此操作返回true。然而,和之前一样,它不会仅仅因为之前的一个陈述是真的而已经运行了。

最后, n > 5评估为真吗?答案是否定的,因为n 5,因此它不大于5.因此,此代码不会评估为true。为了使此求值为true,应使用>=运算符。

关于C比较的细节

之前你读到比较是在检查某些事情是真还是假,但那真的只有一半是真的。请记住,C关于轻巧且靠近硬件硬件,很容易检查是否为0,其他任何事情都需要更多工作。因此,比较实际上做的是检查某些内容是否为假,是否为0,或者检查它是否为false(任何其他值)。

因此,此if语句为真且有效:

if(12452) {
    printf("This is true!\n")
 }

按照设计,0为假,按照惯例,1为真。实际上,这里是一个前面描述的stdbool.h库:

#define false   0
 #define true    1

实际上还有更多,但这是完成所有工作的部分。

这两行代码告诉编译器,'false'一词应替换为'0',而'true'一词应替换为'1'。 stdbool.h也有一些文档和编译器指令,将在后面讨论,但这两行都是真的。

技巧和窍门

考虑以下代码:

#include <stdio.h>

 int main() {
    int i=3;

    if(i=4) {
      printf("This block is executed");
    }
    else {
      printf("NO! I am boss");
    }
 }

什么是输出? “不!我是老板”?如果你猜测这个输出那么你错了。 为什么会这样?因为在if语句中你使用“=”而不是“==”运算符。 “==”是比较器。

它将在两个变量之间进行比较,但“=”是赋值运算符 当我们说i = 4时,我们只是将值4赋给整数i,并且因为在“C”中每个NON-ZERO值都为真,所以 如果(i = 4)是真实的陈述,则执行此下的指令

在你继续之前......

回顾

  • 'if'语句检查表达式是否为true,然后它在大括号内运行代码。
  • 'else'可以添加到'if'的末尾,并且只有在前一个if(s)语句为false时才会运行。
  • 'else if'也可以添加到'if'的末尾,并且只有在前一个if(s)语句为false时才会运行。
  • 计算机中的所有内容都由数字表示,因此C中的每个比较都可以通过处理数字 - 甚至是真,假和字符等值来完成。
  • 有一堆比较运算符:
  • \==等于
  • !=不等于
  • >大于
  • <小于
  • > =小于或等于
  • <=小于或等于
  • 我们还有一些逻辑运算符,它们允许我们将逻辑运算链接在一起:
  • !被称为NOT运算符 - 它反转操作数的状态
  • &&称为AND运算符 - 当两个条件都为真时返回true
  • ||被称为OR运算符 - 当至少一个条件为真时返回true

更多C语言教程

这里有更多完整C语言教程