语句 statement
是 C 程序的基本构建块,以分号 ;
结尾。一条语句相当于一条完整的计算机指令。C 语言的语句类型如下图所示。
空语句
C 中最简单的语句就是空语句,本身只包含一个分号。
; // 空语句
空语句本身并不执行任何任务,但有时还是有用。它所适用的场合就是语法要求出现一条完整的语句,但并不需要它执行任何任务。
表达式语句
表达式 expression
由运算符和运算对象组成,每个表达式都有一个值,一些表达式也可由子表达式组成。
2 + 3
a = 6+(c=3+8)
在表达式后面加上分号,就可以把表达式转变为语句。
2 + 3;
a = 6+(c=3+8);
2+3
是一条表达式语句,但什么也不做,不算有用的语句。语句可以改变值或调用函数。6+(c=3+8)
是合法的,但不建议使用,因为它是两个子表达式的和,每个子表达式都有一个值。
复合语句
复合语句 compound statement
是用花括号起来的可选的声明和语句列表,复合语句也称为块 block
。
{
declarations
statements
}
代码块可以用于要求出现语句的地方,它允许你在语法要求只出现一条语句的地方使用多条语句。代码块还允许你把数据的声明非常靠近它所使用的地方。
while 语句
C 语言提供了 while
语句的语法如下所示。
while (expression) {
statement
}
statement
可以是以分号结尾的简单语句,也可以是用花括号括起来的复合语句。expression
是关系表达式,是值之间的比较,当 expression
非零时,执行 statement
一次,再判断 expression
;当 expression
为零时,结束 while
循环。while
语句的执行过程如下图所示。
char a[6] = {'A', 'B', 'C', 'D', 'E', 'F'};
int i = 0;
while (i < 3) {
printf("Print %cn", a[i]);
i++;
}
循环的测试在循环体开始执行之前进行,所以如果测试的结果一开始就是假,循环体就根本不会执行。同样,当循环体需要多条语句来完成任务时,可以使用复合语句来实现。
当 while
循环要永久终止循环时,使用 break
语句。
while (i < 3) {
printf("Print %cn", a[i]);
i++;
if (i == 1) break;
}
当 while
循环要终止当前循环时,使用 continue
语句。
while (i < 3) {
printf("Print %cn", a[i]);
i++;
if (i == 1) continue;
}
执行完 continue
语句之后,执行流接下来就是重新测试表达式的值,决定是否继续执行循环。
这两条语句的任何一条如果出现于嵌套的循环内部,它只对最内层的循环起作用,你无法使用 break
或 continue
语句影响外层循环的执行。
do while 语句
C 语言提供了 do while
循环的语法如下所示。
do {
statement
} while (expression);
与 while
语句很像,只是它的 expression
是在循环体至少执行一次之后才执行。do while
语句的执行过程如下图所示。
char a[6] = {'A', 'B', 'C', 'D', 'E', 'F'};
int i = 0;
do {
printf("%s", a[i]);
i++;
} while (i < 3);
当需要循环体至少执行一次时,可以选择 do while
循环语句。
for 语句
C 语言提供了 for
循环的语法如下所示。
for (expression1; expression2; expression3) {
statement
}
其中的 statement
为循环体;expression1
为初始化部分,只在循环开始时执行一次。expression2
称为条件部分,它在循环体每次执行前都要执行一次。expression3
为调整部分,它在循环体每次执行完毕,在条件部分即将执行之前执行。所有三个表达式都是可选的,都可以省略。如果省略条件部分,表示测试的值始终为真。
for
语句中也可以使用 break
和 continue
,但其中 continue
语句与 while
语句中使用 continue
语句的区别是 for
语句中的 continue
跳过循环体剩余部分,回到 expression3
调整部分;while
语句中的调整部分是循环体的一部分,所以 continue
会跳过。
if 语句
C语言提供的 if
语句的语法如下所示。
if (expression) {
statement
}
在 expression
表达式非零时会执行 statement
语句,为零时就会跳过 statement
语句。if
语句的执行过程如下图所示。
if
语句还有 if else
形式,可以在两条语句之间做选择。
if (expression) {
statement
} else {
statement
}
当有多重选择时,可以使用 else if
扩展 if else
形式,在多条语句中做选择。
if (expression 1) {
statement
} else if (expression 2) {
statement
} ··· {
···
} else if (expression n) {
statement
} else {
statement
}
当 if
语句嵌套出现时,会出现 悬空的 else
问题,如下所示。
if (i > 1)
if (j > 2)
printf("i > 1 and j > 2n");
else
printf("no they're notn");
这里的 else
子句从属于最靠近它的不完整的 if
语句,如果想从属于第一个 if
语句,可以把第2个 if
语句加一条 else
子句,补充完整,或者用花括号把它包围在一个代码块之内。
switch 语句
C 语言在面对多重选择时,除了 if else if ... else
语句外,还提供了 switch
语句来完成,语法如下所示。
switch (expression) {
case constant-expression: { statement }
···
default: { statement }
}
expression
表达式的结果必须是整数型;case
标签要具有唯一的值,而常量表达式 constant-expression
是指在编译期间进行求值的表达式,不能是任何变量;default
子句是在 switch
表达式的值并不匹配 case
标签的值时调用的,因此每个 switch
语句中只出现一条 default
子句。switch
语句的执行过程如下图所示。
switch (ch) {
case 'A':
printf("The input character is A.");
break;
case 'B':
printf("We are the champions!");
break;
default:
printf("Chinese soul.");
break;
}
在每个 case
标签中的语句,都要加入 break
语句,使得执行流在执行完匹配的 case
后,立即跳出 switch
语句;如果不加 break
语句,就会从匹配标签开始执行到 switch
末尾。
goto 语句
C语言提供的 goto
语句的语法如下所示。
goto label:
···
label: statement;
goto
语句通过 label
跳转到希望的语句时,就可以在希望的语句前面加上语句标签如 label: statement
。包含这些标签的 goto
语句可以出现在同一个函数中的任何位置。
int main() {
int num = 15;
a: printf("This is where the goto jumpn");
if (num > 12) {
num--;
goto a;
}
return 0;
}
/*
This is where the goto jump
This is where the goto jump
This is where the goto jump
This is where the goto jump
*/
goto
语句把程序的执行流从一条语句转移到另一条语句。然而 goto
是一种危险的语句,过度使用会很容易形成依赖,并让程序错综复杂,使得程序难以维护,因此要合理的使用 goto
语句。
原文始发于微信公众号(海人为记):一文讲解C语言语句
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/27536.html