控制流大法决
- 一、语句与程序块
- 二、if-else 语句
- 三、else-if 语句
- 四、switch 语句
- 五、while 循环与 for 循环
- 六、do-while 循环
- 七、跳转语句 break 与 continue
- 八、无限制跳转语句 goto 与标号
一、语句与程序块
一般以分号结尾的是语句、以一个或多个语句用花括号括起来的是复合语句,即程序块。
二、if-else 语句
if-else 语句用于条件判定,语法如下:
if (表达式)
语句1
else
语句2
else 部分是可选的。
语句行为:
先计算表达式的值,最终得到非零数值为真,执行语句1;表达式为零为假,执行语句2。
因为 else 部分可选的,if-else 语句嵌套时容易出现歧义,else 的匹配原则:
else 与最近的 if 没有匹配到的 esle if 部分进行匹配,花括号可以决定她是其他语句还是if控制语句部分。
三、else-if 语句
这是多路判定语句,语法如下:
if(表达式)
语句
else if (表达式)
语句
else if (表达式)
语句
else if (表达式)
语句
else
语句
else 部分是可选的,可默认情况或检测上述条件均不成立的情况。
语句行为:
表达式会依次求值,直到某个条件成立立即终止整个语句,或以上均不成立执行可选部分。
四、switch 语句
switch 语句用于多路判定,语法如下
switch (表达式)
case 常量表达式:语句序列
case 常量表达式:语句序列
default :语句序列
default 标号可选的——标号就是跳转目标地点。当 case 标号的常量表达式都与表达式不匹配,默认执行 default 的语句序列,如果没有 default 也没有匹配值什么也不做。
语句行为:
switch 中的表达式与其中某个 case 标号的常量表达式相匹配,就从当前位置依次执行,直到遇到 break 跳转语句跳出 switch ,常量表达式不能相同。
五、while 循环与 for 循环
while 和 for循环都是先测试终止条件,再执行循环体。while 循环语句:
while (表达式)
语句
语句行为:
首先求表达式值,非零为真,执行循环体语句,其值为零为假不执行循环语句退出 while 循环。
for 循环语句:
for (表达式1;表达式2;表达式3)
语句
语句行为:
首先,执行表达式1,只执行一次;之后执行表达式2,是否为真;再根据表达式2是否为真来判定循环语句和表达式3依次执行。之后的循环在表达式2、语句和表达式3中依次执行,直到表达式为假,跳出循环。
六、do-while 循环
先执行循环语句,再测试条件是否要继续执行下去。语法如下:do
语句
while (表达式);
语句行为:
先执行循环语句,再根据表达式条件是否为真决定是否继续循环。不管条件怎么样,至少执行一次循环。
七、跳转语句 break 与 continue
break 语句用在循环和 switch 语句中,使其不经条件立即跳出语句,如有嵌套,只能一层层的跳出。continue 语句只用在循环中,使其在循环体内跳过之后的语句,立即执行圆括号内的该执行的表达式。
八、无限制跳转语句 goto 与标号
goto 是一个跳转语句,搭配标记跳转位置的标号。标号是由标识符(名字一般命名规则,如变量)加冒号英文“:”构成的。语法如下:标号:
goto 标号名;
标号:
语句行为:
标号和 goto 语句作用域在函数内,标号不能同名,可以在函数内任意能出现的位置。 用她做循环:
#include <stdio.h>
/* 可以自行更改递增值 */
int main()
{
int i;
i = 0;
loop:
/* 递增步长 */
i = i + 1;
printf ("%d\n",i);
if (i < 100)
goto loop;
return 0;
}