if-else 语句

语法如下:

1
2
3
4
5
6
if(表达式) {
语句1
}
else {
语句2
}

可以很明显的使用if(表达式)来替换if(表达式!=0),

if-else if 语句

语法如下

1
2
3
4
5
6
7
if (表达式) {
语句
} else if (表达式) {
语句
} else if (表达式) {
语句
} else { 语句 }

这种 if 语句序列是编写多路判定最常用的方法。其中的各表达式将被依次求值,一旦某个表达式结果为真,则执行与之相关的语句,并终止整个语句序列的执行。

switch 语句

switch 语句的语法如下:

1
2
switch (表达式) {
case 常量表达式: 语句序列 
case 常量表达式: 语句序列 
default: 语句序列

每一个分支都由一个或多个整数值常量或常量表达式标记。如果某个分支与表达式的值匹配, 则从该分支开始执行。各分支表达式必须互不相同。如果没有哪一分支能匹配表达式,则执行标记为 default 的分支。default 分支是可选的。如果没有 default 分支也没有其它分 支与表达式的值匹配,则该 switch 语句不执行任何动作。各分支及 default 分支的排列次序是任意的。

看下面的例子:

1
2
3
#include <stdio.h>
main() /* count digits, white space, others */ {
int c, i, nwhite, nother, ndigit[10];
nwhite = nother = 0;
for (i = 0; i < 10; i++)
	ndigit[i] = 0;
while ((c = getchar()) != EOF) {
	switch (c) {
		 case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': 	case '8': case '9':
			 ndigit[c-'0']++;
			 break;
         case ' ':
         case '\n':
         case '\t':
			 nwhite++;
			 break;
         default:
			 nother++;
			 break; 
} } printf("digits ="); for (i = 0; i < 10; i++) printf(" %d", ndigit[i]); printf(", white space = %d, other = %d\n",nwhite, nother);
return 0; }

while 循环与 for 循环

while 循环的语法结构如下:

```c
while (表达式) {
语句
}

1
2
3
4
5
6
7

在 while 循环中,首先求表达式的值。如果其值非 0,则执行语句,并再次求该表达式的值。这一循环过程一直进行下去,直到该表达式的值为 0 为止,随后继续执行语句后面的部分。

for 循环的语法结构如下:

```c
for (表达式 1; 表达式 2; 表达式 3) { 语句 }

从语法角度看,for 循环语句的 3 个组成部分都是表达式。

最常见的情况是,表达式 1 与表达式 3 是赋值表达式或函数调用,表达式 2 是关系表达式。

这 3 个组成部分中的任何部分都可以省略,但分号必须保留。

如果在 for 语句中省略表达式 1 与表达式 3,它就退化成了 while 循环语句。如果省略测试条件,即表达式 2,则认为其值永远是真值,因此,下列 for 循环语句:

```c
for (;;) { …
}

1
2
3
4
5
6

是一个“无限”循环语句,这种语句需要借助其它手段(如 break 语句或 return 语句)才能终止执行。

#### do-while 循环

do-while 循环的语法形式如下: ```c
do 语句 while (表达式);

break 语句与 continue 语句

不通过循环头部或尾部的条件测试而跳出循环,有时是很方便的。break 语句可用于从 for、while 与 do-while 等循环中提前退出,就如同从 switch 语句中提前退出一样。break 语句能使程序从 switch 语句或最内层循环中立即跳出。

continue 语句用于使 for、while 或 do-while 语句开始下一次循环的执行。在 while 与 do-while 语句中,continue 语句的执行意味着立即执行测试部分;在 for 循环中,则意味着使控制转移到递增循环变量部分。continue 语句只用于循环语句,不用于 switch 语句。某个循环包含的 switch 语句中的 continue 语句,将导致进入下一次循环。

goto 语句与标号

C 语言提供了可随意滥用的 goto 语句以及标记跳转位置的标号。但是不建议使用 goto 语句。

但是,在某些场合下 goto 语句还是用得着的。最常见的用法是终止程序在某些深度嵌套的结构中的处理过程,例如一次跳出两层或多层循环。这种情况下使用 break 语句是不能达到目的的,它只能从最内层循环退出到上一级的循环。下面是使用 goto 语句的一个例子:

1
for ( ... )
	for ( ... ) {
    	...
        if (disaster)
			goto error;
	} ...
error:

—EOF—