什么是流程控制

  • 程序代码执行的顺序控制。

    流程控制的分类

  • 顺序、选择、循环

  • 任意的程序的功能,无论简单或复杂,都可以通过顺序、选择和循环的流程控制来实现

    顺序

  • 程序的正常运行,即执行完这一条指令,再执行下一条指令,为顺序执行;

    选择

    定义

  • 某些代码可能执行,也可能不执行,有选择的执行某些代码;

    分类

    if语句

    if 最简单的用法

    格式
    1. if(判断表达式) //如果判断表达式为真,执行语句A,否则不执行语句A
    2. {
    3. 语句A;
    4. }

    if的作用域
  • if 默认只能控制一个语句的执行或不执行,如果想控制多个语句的执行或不执行,就必须把这些语句用“{}”括起来;

    if..else..的用法
  • 略;

    if..else if..else..的用法
  • 功能

    • 任意一条满足条件后,执行对应语句,其余语句不执行
      C语言对真假的处理
  • 非零为真;

  • 零为假;

    • 真用1表示;
    • 假用0表示;
      if 的常见问题解析
  • 空语句问题

    1. if(a > b); //执行了“;”语句,即空语句,导致代码功能异常
    2. a = b;

    switch语句

    格式

    ```c switch(表达式) { case 常量表达式1:

    1. 语句1
    2. break

    case 常亮表达式2:

    1. 语句2
    2. break

    case 常亮表达式3:

    1. 语句3
    2. break

    default:

    1. 语句4
    2. break

    }

其中, a. 所有case后面的常量表达式的类型只能是: 1.枚举常量(枚举变量不可用); 2.数值常量; 3.字符常量; 4.常变量(如const int i); 5.宏定义; b. switch后面括号的表达式允许是任何类型,但在Vc++中只允许为int或char类型。

  1. <a name="IAvWb"></a>
  2. ##### 执行逻辑
  3. - 执行switch语句时,计算机根据switch(表达式)中表达式的值,找到与之匹配的case语句,然后从该case语句开始执行下去(**若该case语句没有break,则会继续执行下面的case语句**);
  4. - 当执行完一个case语句后,流程控制就转移到下一个case语句继续执行(**若无break**);
  5. - **case常量表达式只是起语句标号的作用,并不是在该处进行条件判断**;
  6. <a name="Z2Fdc"></a>
  7. ##### 功能区分
  8. - switch是选择不是循环,switch中出现的break语句是为了跳出switch语句,避免继续往下执行其它语句;
  9. - 在switch中出现continue是错误的,除非switch本身属于for或while循环的一部分。
  10. <a name="ALrj4"></a>
  11. ## 循环
  12. <a name="qPNds"></a>
  13. ### 定义
  14. - 某些代码会被重复执行。
  15. <a name="moIih"></a>
  16. ### 分类
  17. <a name="DiIUS"></a>
  18. #### for循环
  19. <a name="hFzRa"></a>
  20. ##### 格式
  21. ```c
  22. 语法表达式:
  23. for(表达式1;判断表达式;表达式2)
  24. {
  25. 语句A;
  26. }
  27. 单个for循环语句:
  28. for(1;2;3)
  29. {
  30. 语句A;
  31. }
  32. 嵌套for循环语句:
  33. for(1,2,3)
  34. {
  35. for(4,5,6)
  36. {
  37. 语句A;
  38. }
  39. 语句B;
  40. }
  41. 其中,嵌套中的执行顺序为:1-->2-->[4-->5-->6]-->3

while循环

格式
  1. while(判断表达式)
  2. {
  3. 语句A;
  4. }

与for的相互比较
  • for和while可以相互转换

    1. for(1,2,3)
    2. {
    3. A;
    4. }
    5. 等价于:
    6. 1
    7. while(2)
    8. {
    9. A;
    10. 3;
    11. }

    do…while循环

    格式
    1. do
    2. {
    3. 语句A;
    4. }while(判断表达式); //判断表达式为真,程序继续循环执行,否则退出循环

    功能
  • 主要用于人机交互。即程序执行一次特定的程序后,请求用户是否继续执行;

    1. char ch;
    2. do
    3. {
    4. 语句A;
    5. 语句B
    6. ...;
    7. printf("是否继续执行(Y/N):");
    8. scanf(" %c",&ch);
    9. }while(('y'==ch)||('Y'==ch));

    break和continue

    break的用法

  • break如果用于循环语句,则是用来终止循环;

  • break如果用于switch语句,则是用于终止switch;
  • break不能直接用于if语句,除非if语句属于循环内的一个子句(终止对象仍是循环);

    break的作用域

  • 在循环嵌套中,break只能终止(退出)距离它最近的循环

  • 在switch嵌套中,break也只能终止(退出)距离它最近的switch语句

    continue的用法

  • 用于跳过本次循环余下的语句,转去判断是否需要继续执行下次循环;

  • 语法规则:

    1. //for语句中的执行
    2. for(1,2,3)
    3. {
    4. 语句A;
    5. 语句B;
    6. continue; //如果执行该语句,程序会跳过语句C和D,返回执行语句3
    7. 语句C;
    8. 语句D;
    9. }
    10. //while语句中的执行
    11. while(判断表达式)
    12. {
    13. 语句A;
    14. 语句B;
    15. continue; //如果执行该语句,程序会跳过语句C和D,返回执行判断表达式
    16. 语句C;
    17. 语句D;
    18. }
  • 使用技巧

    1. char ch;
    2. while((ch = getchar()) != '\n') //将有效输入后的非法输入清除
    3. {
    4. continue;
    5. }