C 语言流程控制
顺序执行
C 语言的程序是顺序执行,即先执行前面的语句,再执行后面的语句。
条件执行
- if
if
语句用于条件判断,满足条件时,就执行指定的语句。
if (expression) {
statement // 表达式expression为真(非 0 值)时,就执行 statement 语句。
}
if (line_num == MAX_LINES) {
line_num = 0;
page_num++;
}
对于只有一条语句的语句体,可以省略大括号。
if (x == 10)
printf("x is 10
");
- if else
if (expression) {
statement
} else { // else 分支,指定条件不成立时(表达式 expression 的值为 0),所要执行的代码。
statement
}
- if else if
if (expression) {
statement
} else if (expression) {
statement
} ...
else {
statement
}
- switch
switch (expression) {
case value1:
statement
case value2:
statement
default:
statement
}
根据表达式expression
不同的值,执行相应的case
分支。如果找不到对应的值,就执行default
分支。
switch (grade) {
case 0:
printf("False");
break; // 如果缺少 break,就会导致继续执行下一个 case 或 default 分支。
case 1:
printf("True");
break;
default:
printf("Illegal");
}
- 三元运算
<expression1> ? <expression2> : <expression3>
表达式expression1
如果为true
(非 0 值),就执行expression2
,否则执行expression3
。
循环执行
- while
while
语句用于循环结构,满足条件时,执行循环体。此外,循环体内部可以用break
语句跳出循环。
while (expression) {
statement // expression 为非零值(表示真),就会执行statement语句,然后再次判断 expression 是否为零;
}
- do while
不管条件expression
是否成立,循环体statement
至少会执行一次。每次statement
执行完毕,就会判断一次expression
,决定是否结束循环。
do {
statement
} while (expression);
- for
for (循环变量初始化; 条件判断; 修改循环变量){
statement;
}
每个部分可以有多条语句。
int i, j;
for (i = 0, j = 999; i < 10; i++, j--) {
printf("%d, %d
", i, j);
}
break 语句
break
语句有两种用法。
-
一种是与
switch
语句配套使用,用来中断某个分支的执行。 -
另一种用法是在循环体内部跳出循环,不再进行后面的循环了。
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("%d, %d
", i, j);
break; // break 语句使得循环跳到下一个 i。
}
}
注意,break
命令只能跳出循环体和switch
结构,不能跳出if
结构。
continue 语句
continue
语句用于在循环体内部终止本轮循环,进入下一轮循环。
while ((ch = getchar()) != "
") {
if (ch == " ") continue; // 只要读到的字符是制表符( ),就跳过该字符,读取下一个。
putchar(ch);
}
goto 语句
goto 语句用于跳到指定的标签名处。
char ch;
top: ch = getchar();
if (ch == "q")
goto top;
goto 的一个主要用法是跳出多层循环。
while (...) {
do {
if (some_error_condition)
goto bail;
} while(...);
}
bail:
参考: C 语言教程