C 语言(考纲总结):四、循环语句和 goto 语句

2.712k 字  |  10 分钟

4.1 while 语句、for 语句和 do while 语句

4.1.1 while 语句

  • 格式:while (表达式) 语句
  • 执行过程:当表达式为非 0 值时,执行 while 语句中的内嵌语句。
  • 特点:先判断表达式,后执行语句。

注意:

  1. 循环体如果包含一个以上的语句,应该用花括弧括起来,以复合语句形式出现。
  2. 在循环体中应有使循环趋向于结束的语句。如果无此语句,则i的值始终不改变,循环永不结束。

4.1.2 do-while 语句

  • 格式:do 循环体语句 while (表达式);

  • 执行过程:先执行一次指定的循环体语句,然后判别表达式,当表达式的值为非零(真) 时,返回重新执行循环体语句,如此反复,直到表达式的值等于 0 为止,此时循环结束。

  • 特点:先执行循环体,然后判断循环条件是否成立。

![](http://qcdn.itcharge.cn/images/20210317154422.png]

4.1.3 for 语句

  • 格式:for (表达式 1; 表达式 2; 表达式 3) 语句

  • 执行过程:

    1. 先求解表达式 1。

    2. 求解表达式 2,若其值为真(值为非 0),则执 行for语句中指定的内嵌语句,然后执行下面第 3 步。若为假(值为 0),则结束循环,转到第(5)步。

    3. 求解表达式 3。

    4. 转回上面第 2 步骤继续执行。

    5. 循环结束,执行 for 语句下面的一个语句。

注意:

  1. for 语句的一般形式中的 "表达式 1" 可以省略,此时应在 for 语句之前给循环变量赋初值。注意省略表达式 1 时,其后的分号不能省略。如 for( ; i <= 100; i++) sum = sum + i; 执行时,跳过"求解表达式 1" 这一步,其他不变。
  2. 如果表达式 2 省略,即不判断循环条件,循环无终止地进行下去。也就是认为表达式 2 始终为真。例如:for( i = 1; ; i++) sum = sum + i; 表达式 1 是一个赋值表达式,表达式 2 空缺。它相当于: i = 1; while(1) { sum = sum + 1; i++; }
  3. 表达式 3 也可以省略,但此时程序设计者应另外设法保证循环能正常结束。如:for( i = 1; i <= 100; ) {sum = sum + i; i++; } 在上面的 for 语句中只有表达式 1 和表达式 2,而没有表达式 3。i++ 的操作不放在 for 语句的表达式 3 的位置处,而作为循环体的一部分,效果是一样的,都能使循环正常结束。
  4. 可以省略表达式 1 和表达式 3,只有表达式 2,即只给循环条件。如:for( ; i <= 100; ) { sum = sum + i; i++; } 相当于 while( i <= 100) { sum = sum + i; i++; } 在这种情况下,完全等同于 while 语句。可见 for 语句比 while 语句功能强,除了可以给出循环条件外,还可以赋初值,使循环变量自动增值等。
  5. 3 个表达式都可省略,如:for( ; ; ) 语句 相当于 while(1) 语句。即不设初值,不判断条件(认为表达式 2 为真值),循环变量不增值。无终止地执行循环体。
  6. 表达式 1 可以是设置循环变量初值的赋值表达式,也可以是与循环变量无关的其他表达式。如:for ( sum = 0; i <= 100; i++) sum = sum + i; 表达式 3 也可以是与循环控制无关的任意表达式。
    表达式 1 和表达式 3 可以是一个简单的表达式,也可以是逗号表达式,即包含一个以上的简单表达式,中间用逗号间隔。如:for( sum = 0, i = 1; i <= 100; i++) sum = sum+i;for( i = 0, j = 100; i <= j; i++, j--) k = i+j; 表达式 1 和表达式 3 都是逗号表达式,各包含两个赋值表达式,即同时设两个初值,使两个变量增值。
    在逗号表达式内按自左至右顺序求解,整个逗号表达式的值为其中最右边的表达式的值。如:for( i = 1; i <= 100; i++, i++) sum = sum + i; 相当于 for( i = 1; i <= 100; i = i+2) sum=sum+i;
  7. 表达式一般是关系表达式(如 i <= 100)或逻辑表达式(如 a < b && x < y),但也可以是数值表达式或字符表达式,只要其值为非零,就执行循环体。

4.2 循环语句的选择和使用

  1. 四种循环(包括 goto型循环)都可以用来处理同一问题,一般情况下它们可以互相代替。但一般不提倡用 goto 型循环。
  2. 在 while 循环和 do...while 循环中,只在 while 后面的括号内指定循环条件,因此为了使循环能正常结束,应在循环体中包含使循环趋于结束的语句(如 i++,或 i = i+1 等)。
  3. for 循环可以在表达式 3 中包含使循环趋于结束的操作,甚至可以将循环体中的操作全部放到表达式 3 中。因此 for 语句的功能更强,凡用 while 循环能完成的,用 for 循环都能实现。
  4. 用 while 和 do…while 循环时,循环变量初始化的操作应在 while 和 do...while 语句之前完成。而 for 语句可以在表达式 1 中实现循环变量的初始化。
  5. while 循环、do..while 循环和 for 循环,都可以用 break 语句跳出循环,用 continue 语句结束本次循环。
  • while 语句和用 do-while 语句的比较:
    • 在一般情况下,用 while 语句和用 do-while 语句处理同一问题时,若二者的循环体部分是一样的,它们的结果也一样。但是如果 while 后面的表达式一开始就为假(0 值)时,两种循环的结果是不同的。

4.3 逗号表达式

4.4 循环语句的嵌套

  • 一个循环体内又包含另一个完整的循环结构称为循环的嵌套。内嵌的循环中还可以嵌套
    循环,这就是多层循环。
  • 三种循环(while 循环、do-while 循环和 for 循环)可以互相嵌套。

4.5 循环中的非常规控制(break 和 contiunue)、goto 语句

4.5.1 break 语句

  • 格式:break;
  • 用处:break 语句可以用来从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句。

注意:
break 语句不能用于循环语句和 switch 语句之外的任何其他语句中。

4.5.2 continue 语句

  • 格式:continue;
  • 用处:作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。

continue 语句和 break 语句的区别:

  1. continue 语句只结束本次循环,而不是终止整个循环的执行。
  2. break 语句则是结束整个循环过程,不再判断执行循环的条件是否成立。

4.5.3 goto 语句

  • 格式:goto 语句标号;。语句标号用标识符表示,它的定名规则与变量名相同,即由字母、数字和下划线组成,其第一个字符必须为字母或下划线。

结构化程序设计方法主张限制使用 goto 语句,因为滥用 goto 语句将使程序流程无规律、可读性差。

一般来说,可以有两种用途:

  1. 与 if 语句一起构成循环结构;
  2. 从循环体中跳转到循环体外。

但是这种用法不符合结构化原则,一般不宜采用,只有在不得已时(例如能大大提高效率)才使用。

评论(没有评论)

谢谢你请我喝咖啡~

扫码支持
扫码打赏,支持一下
微信 微信支付
支付宝 支付宝

打开微信扫一扫,即可进行扫码打赏哦