首页 > 代码库 > 三种基本控制流

三种基本控制流

最近重读K&R的《C程序设计语言》,读到了“控制流”章节,发现原来学的太不扎实,于是查资料并总结了一番与大家分享。

一:顺序结构

顺序执行,用的最多,没什么可说的。

二:选择结构

1.if-else
用于单个条件判断,注意事项:
  1. 若是多层嵌套且不加花括号,则else与最内层if配对,所以为了引起歧义,多层嵌套最好加花括号。千千万万不能用缩写的方式表示层次关系,不要与python等语言混了。
  2. 一般不用if(a == 0)的写法,而用if(!a),表示“如果a不等于1”,非常直观。
if-else简单变形:
  1. 嵌套,代码:
    1. if (n > 0)
    2. {
    3. if (a > b)
    4. {
    5. z = a;
    6. }
    7. else
    8. {
    9. z = b;
    10. }
    11. }
    (虽然第一个if的花括号不加也可以,但加上花括号更易阅读)
  2. 多个条件同时满足,代码:
    1. if (a>b && b>c)
    当多层If嵌套且无else,可以用这种形式化简,比如上面的代码等价于:
    1. if (a>b)
    2. {
    3. if (b>c)
    4. {
    5. /* code */
    6. }
    7. }
    是不是第一种写法更紧凑,更清晰?
  3. 多个条件中任意一个满足即可,代码:
    1. if (a>b || b>c)
  4. ? : 结构可以写出更紧凑的代码,但是可读性下降,不用也可以。
2.else if
不要写成if else,用于多路情况的判定。
多个平级的if且无else,可用此结构代替:
平级else代码:
  1. if (a > b)
  2. {
  3. /* code */
  4. }
  5. if (b > c)
  6. {
  7. /* code */
  8. }
  9. if (c > d)
  10. {
  11. /* code */
  12. }
替换为else if结构代码:
  1. if (a > b)
  2. {
  3. /* code */
  4. }
  5. else if (b > c)
  6. {
  7. /* code */
  8. }
  9. else if (c > d)
  10. {
  11. /* code */
  12. }
  13. else
  14. {
  15. ;
  16. }
是不是第二种可读性更强?
3.switch
注意事项:
  1. 每个case之后都加break,当不得已不加的时候应该注释说明。同样也是为了可读性,防止别人读你的代码的时候觉得你忘记加了。
  2. 加default分支是个好习惯,可以用来捕获异常。
  3. 这种方法要求switch和case必须都是常量,不允许变量。
switch和else if都可以多路判定,比较二者:
  1. switch代码更精简,同时很多情况下效率要比else if高,比如匹配状态常量的时候swich方法好很多,所以多路选择先用switch方法。
  2. 前者只能用于常量,后者常量和变量都可以。

三:循环结构

1.while循环
不多说。
2.for循环
理论上,可以用while的也可用for实现。但是循环次数已知的情况多用for循环,而循环次数未知的情况用while循环。
3.do while循环
用的少,但有时候用更方便。


来自为知笔记(Wiz)


三种基本控制流