更改基于环境中某些信息的代码行为的能力称为条件代码流。有时您希望代码根据特定条件运行。在这种情况下,我们可以使用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
尚未包含在内。这没关系,因为true
和false
都没有被使用。在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 == 10
则n == 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语言教程