C 语言的程序是顺序执行,即先执行前面的语句,再执行后面的语句。开发者如果想要控制程序执行的流程,就必须使用流程控制的语法结构,主要是条件执行和循环执行。
if 语句
if
语句用于条件判断,满足条件时,就执行指定的语句。
if (expression) statement
面式子中,表达式expression
为真(值不为0
)时,就执行statement
语句。
具体例子
if (x == 10)
printf("x is 10\n");
如果有多条语句,就需要把它们放在大括号里面,组成一个复合语句。
if (line_num == MAX_LINES) {
line_num = 0;
page_num++;
}
if
语句可以带有else
分支,指定条件不成立时(表达式expression
的值为0
,也就是假的时候),所要执行的代码。
if (i > j)
max = i;
else
max = j;
else
可以与另一个if
语句连用,构成多重判断。(嵌套)
if (expression)
statement
else if (expression)
statement
...
else if (expression)
statement
else
statement
如果有多个if
和else
,可以记住这样一条规则,else
总是跟最接近的if
匹配。
if (number > 6)
if (number < 12)
printf("The number is more than 6, less than 12.\n");
else
printf("It is wrong number.\n");
三元运算符 ?:
C 语言有一个三元表达式?:
,可以用作if...else
的简写形式。(我很少用这个,代码长了可读性太差)
<expression1> ? <expression2> : <expression3>
这个操作符的含义是,表达式expression1
如果为true
(非0值),就执行expression2
,否则执行expression3
。
switch 语句
switch 语句是一种特殊形式的 if…else 结构,用于判断条件有多个结果的情况。(把else if这种嵌套优化了一下)
switch (expression) {
case value1: statement
case value2: statement
default: statement
}
switch (grade) {
case 0:
printf("False");
break;
case 1:
printf("True");
break;
default:
printf("Illegal");
}
上面示例中,根据变量grade
不同的值,会执行不同的case
分支。如果等于0
,执行case 0
的部分;如果等于1
,执行case 1
的部分;否则,执行default
的部分。default
表示处理以上所有case
都不匹配的情况。
每个case语句体的结尾,都应该有一个break语句,作用是跳出整个switch结构,不再往下执行。如果缺少break,就会导致继续执行下一个case或default分支。
default
分支用来处理前面的 case 都不匹配的情况,最好放在所有 case 的后面,这样就不用写break
语句。这个分支是可选的,如果没有该分支,遇到所有的 case 都不匹配的情况,就会直接跳出整个 switch 代码块。
while 语句
while
语句用于循环结构,满足条件时,不断执行循环体。
while (expression)
statement
while (i < n)
i = i + 2;
上面代码中,如果表达式expression
为非零值(表示真),就会执行statement
语句,然后再次判断expression
是否为零;如果expression
为零(表示伪)就跳出循环,不再执行循环体。
同样,如果循环体有多个语句,就需要使用大括号将这些语句组合在一起。
while (expression) {
statement;
statement;
}
只要条件为真,while
会产生无限循环。下面是一种常见的无限循环的写法。(嵌入式中常用于持续监测)
while (1) {
// ...
}
do…while 结构
do...while
结构是while
的变体,它会先执行一次循环体,然后再判断是否满足条件。如果满足的话,就继续执行循环体,否则跳出循环。
do statement
while (expression);
i = 10;
do --i;
while (i > 0);
上面示例中,变量i
先减去1,再判断是否大于0。如果大于0,就继续减去1,直到i
等于0
为止。
for 语句
for
语句是最常用的循环结构,通常用于精确控制循环次数。
for (initialization; continuation; action)
statement;
for (int i = 10; i > 0; i--)
printf("i is %d\n", i);
上面代码中,for
语句的条件部分(即圆括号里面的部分)有三个表达式。
initialization
:初始化表达式,用于初始化循环变量,只执行一次。continuation
:判断表达式,只要为true
,就会不断执行循环体。action
:循环变量处理表达式,每轮循环结束后执行,使得循环变量发生变化。
循环体部分的statement
可以是一条语句,也可以是放在大括号里面的复合语句。
上面示例中,循环变量i在for的第一个表达式里面声明,该变量只用于本次循环。离开循环体之后,就会失效。(块作用域)
注意三个表达式间隔用的分号;