一文讲解C语言语句

语句 statement 是 C 程序的基本构建块,以分号 ; 结尾。一条语句相当于一条完整的计算机指令。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 语句的执行过程如下图所示。

一文讲解C语言语句

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 == 1break;
}

while 循环要终止当前循环时,使用 continue 语句。

while (i < 3) {
    printf("Print %cn", a[i]);
    i++;
    if (i == 1continue;
}

执行完 continue 语句之后,执行流接下来就是重新测试表达式的值,决定是否继续执行循环。

这两条语句的任何一条如果出现于嵌套的循环内部,它只对最内层的循环起作用,你无法使用 breakcontinue 语句影响外层循环的执行。

do while 语句

C 语言提供了 do while 循环的语法如下所示。

do {
    statement
while (expression);

while 语句很像,只是它的 expression 是在循环体至少执行一次之后才执行。do while 语句的执行过程如下图所示。

一文讲解C语言语句

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 为调整部分,它在循环体每次执行完毕,在条件部分即将执行之前执行。所有三个表达式都是可选的,都可以省略。如果省略条件部分,表示测试的值始终为真。

一文讲解C语言语句

for 语句中也可以使用 breakcontinue,但其中 continue 语句与 while 语句中使用 continue 语句的区别是 for 语句中的 continue 跳过循环体剩余部分,回到 expression3 调整部分;while 语句中的调整部分是循环体的一部分,所以 continue 会跳过。

if 语句

C语言提供的 if 语句的语法如下所示。

if (expression) {
    statement

expression 表达式非零时会执行 statement 语句,为零时就会跳过 statement 语句。if 语句的执行过程如下图所示。

一文讲解C语言语句

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 语句的执行过程如下图所示。

一文讲解C语言语句

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语言语句


原文始发于微信公众号(海人为记):一文讲解C语言语句

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/27536.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!