if 语句
if 语句
能够控制程序流程,让程序根据条件决定执行哪段代码,这对程序员来说非常有价值。If 语句允许你根据给定条件是否为真或假来控制程序是否进入某段代码。If 语句的一个重要功能是它允许程序根据用户的输入选择一个动作。例如,通过使用 If 语句检查用户输入的密码,你的程序可以决定是否允许用户访问程序。
如果没有条件语句(如 if 语句),程序几乎每次都以完全相同的方式运行,始终遵循相同的函数调用序列。if 语句允许改变程序的流程,从而产生更有趣的代码。
在讨论 if 语句的实际结构之前,让我们先考察计算机术语中 TRUE 和 FALSE 的含义。一个TRUE语句是指计算结果为非零的语句。一个FALSE语句计算结果为零。当你使用关系运算符进行比较时,如果比较结果为真,运算符将返回 1;如果比较结果为假,则返回 0。例如,检查 0 == 2 的结果为 0。检查 2 == 2 的结果为 1。如果你感到困惑,可以尝试使用 printf 语句输出这些各种比较的结果(例如 printf("%d", 2 == 1);)。
在编程时,程序的目标通常需要检查一个变量存储的值与另一个值,以确定一个是否大于、小于或等于另一个。
有一些运算符可以执行这些检查。
这里就是所谓的比较运算符,以及示例:
> 大于 5 > 4 is TRUE
< 小于 4 < 5 is TRUE
>= 大于或等于 4 >= 4 is TRUE
<= 小于或等于 3 <= 4 is TRUE
== 等于 5 == 5 is TRUE
!= 不等于 5 != 4 is TRUE你很可能以前见过这些,只是符号可能略有不同。它们不应给理解带来任何障碍。既然你已经很好地理解了 TRUE 和 FALSE 以及比较运算符,那么让我们来看看 if 语句的实际结构。
基本 If 语法
if 语句的结构如下:
if ( 语句为TRUE )
运行这行代码这里有一个简单的示例,展示了语法:
if ( 5 < 10 )
printf( "5现在小于10,这是一个大惊喜" );这里,我们只是在评估这个语句"五小于十"是否为真;希望它是真的!如果你愿意,你可以编写一个包含 stdio.h 的完整程序,并将这段代码放入 main 函数中运行来测试。
如果你想在 if 语句评估为真后执行多个语句,可以使用花括号,就像我们使用 main 函数一样。花括号内的任何内容都称为复合语句,或代码块。
例如:
if ( TRUE ) {
/* 大括号之间是if语句体 */
执行语句体内的所有语句
}我建议始终在 if 语句后添加花括号。如果你这样做,你就不必记住在想要执行多个语句时添加它们,并且使 if 语句的体在视觉上更清晰。
else
有时当 if 语句中的条件评估为假时,我们希望执行一些代码,而不是当语句评估为真时执行的代码。"else"语句有效地表示,如果 if 语句为 FALSE,则执行它之后的任何代码(无论是单行还是花括号之间的代码)。
它可以像这样:
if ( TRUE ) {
/* 如果为TRUE,执行这些语句 */
}
else {
/* 如果不为TRUE,执行这些语句 */
}Else if
else 的另一个用法是当有多个条件语句可能都评估为真,但你只想执行一个 if 语句的体时。你可以在一个 if 语句后面使用一个"else if"语句及其体;这样,如果第一个语句为真,else if 将被忽略,但如果 if 语句为假,它将检查 else if 语句的条件。如果 if 语句为真,else 语句将不会被检查。可以使用多个 else if 语句来确保只执行一个代码块。
让我们来看一个简单的程序,你可以自己尝试一下。
#include <stdio.h>
int main() /* 这个程序最重要的部分 */
{
int age; /* 需要一个变量… */
printf( "Please enter your age: " ); /* 询问年龄*/
scanf( "%d", &age ); /* 输入是年龄 */
if ( age < 100 ) { /* 如果年龄小于100岁 */
printf ("You are pretty young!\n" ); /* 只是为了让你看看它是有效的…… */
}
else if ( age == 100 ) { /* 我用else只是为了展示一个例子 */
printf( "You are old\n" );
}
else {
printf( "You are really old\n" ); /* 如果没有其他语句,则执行 */
}
return 0;
}使用布尔运算符的更有趣的条件
布尔运算符允许你创建更复杂的条件语句。例如,如果你希望检查一个变量是否既大于五又小于十,你可以使用布尔 AND 来确保 var > 5 和 var < 10 都为真。在接下来的布尔运算符讨论中,我将大写布尔运算符,以便与普通英语区分开来。功能等效的实际 C 运算符将在教程的后续部分进行描述——C 符号不是:OR、AND、NOT,尽管它们的功能是等效的。
在使用 if 语句时,你通常希望检查多个不同的条件。你必须理解布尔运算符 OR、NOT 和 AND。布尔运算符的功能与比较运算符类似:每个运算符如果评估为 FALSE 则返回 0,如果评估为 TRUE 则返回 1。
NOT:NOT 运算符接受一个输入。如果该输入为 TRUE,它返回 FALSE,如果该输入为 FALSE,它返回 TRUE。例如,NOT (1)评估为 0,NOT (0)评估为 1。NOT(任何非零数字)评估为 0。在 C 中 NOT 写作!。NOT 在 AND 和 OR 之前被评估。
AND:这是一个非常重要的命令。AND 如果两个输入都为 TRUE(如果'这个'和'那个'都为真),则返回 TRUE。(1)AND(0)会计算为 0,因为其中一个输入为假(必须两个都为 TRUE 才能计算为 TRUE)。(1)AND(1)计算结果为 1。(任何非 0 数字)AND(0)计算结果为 0。AND 运算符在 C 语言中写作&&。不要被它检查数字是否相等的想法所迷惑:它并不做这个。记住 AND 运算符在 OR 运算符之前被计算。
OR:OR 语句非常实用!如果它检查的两个值中任意一个(或两个)为 TRUE,则返回 TRUE。例如,(1)OR(0)计算结果为 1。(0)OR(0)计算结果为 0。OR 在 C 语言中写作||。那是管道字符。在你的键盘上,它们可能看起来像一个拉长的冒号。在我的电脑上,管道字符与\共享一个键。记住 OR 会在 AND 之后被计算。
可以在一个语句中组合多个布尔运算符;当你为 if 语句创建复杂表达式时,你会发现这样做非常有价值。!(1 && 0)会是什么?当然,它会为 TRUE。这是真的,因为 1 && 0 计算结果为 0,而!0 计算结果为 TRUE(即 1)。
试试这些——它们并不太难。
A. !( 1 || 0 ) 答案: 0
B. !( 1 || 1 && 0 ) 答案: 0 (AND在OR之前求值)
C. !( ( 1 || 0 ) && 0 ) 答案: 1 (括号很有用)