程序流程结构 (顺序、选择和循环)

程序流程结构

顺序结构

程序按顺序执行,不发生跳转。

选择结构

依据是否满足条件,有选择的执行相应的功能。

if 语句

  • 流程图
    • if … else …
      程序流程结构
    • if … else if … else if …
      程序流程结构
  • 语法
    if ()
    {}
    else if ()
    {}
    else if ()
    {}
    else
    {}
    
    • 匹配一个范围,属于模糊匹配
  • 示例
    • 判断成绩
      #define _CRT_SECURE_NO_WARNINGS
      #include 
      #include 
      
      int main(void)
      {
          // 100 - 90 优 90 -70 良好 70 - 60 及格 = 90 && score = 70 && score = 60 && score < 70)
          {
              printf("分数:%.2f, 及格\n", score);
          }
          else
          {
              printf("分数:%.2f, 不及格\n", score);
          }
      
          system("pause");
          return 0;
      }
      
    • 3 只小猪比较体重
      #define _CRT_SECURE_NO_WARNINGS
      #include 
      #include 
      
      int main(void)
      {
          // 3只小猪比较体重
          int pig1 = 130;
          int pig2 = 50;
          int pig3 = 80;
      
          if (pig1 > pig2)
          {
              if (pig1 > pig3)
              {
                  printf("pig1 is the weightest.\n");
              }
          }
          else
          {
              if (pig2 > pig3)
              {
                  printf("pig2 is the weightest.\n");
              }
              else
              {
                  printf("pig3 is the weightest.\n");
              }
          }
      
          system("pause");
          return 0;
      }
      

switch 语句

  • 语法
    switch (判别表达式)
    {
    case 1:
        执行语句;
        break;
    case 2:
        执行语句;
        break;
    case 3:
        执行语句;
        break;
    default:
        break;
    }
    
    • 匹配一个值,属于精确匹配

    • break 可以防止 case 穿透

      #define _CRT_SECURE_NO_WARNINGS
      #include 
      #include 
      
      int main(void)
      {
          int score;
          scanf("%d", &score);
      
          switch (score/10)
          {
          case 10:
              //printf("%d 是优秀\n", score);
              //break;
          case 9:
              printf("%d 是优秀\n", score);
              break;
          case 8:
              //printf("%d 是优\n", score);
              //break;
          case 7:
              printf("%d 是优\n", score);
              break;
          case 6:
              printf("%d 是良好\n", score);
              break;
          default:
              printf("%d 是不及格\n", score);
              break;
          }
      
          system("pause");
          return 0;
      }
      
  • 示例:判断成绩
    #define _CRT_SECURE_NO_WARNINGS
    #include 
    #include 
    
    int main(void)
    {
        int score;
    
        scanf("%d", &score);
    
        switch (score/10)
        {
        case 10:
            printf("%d 是优秀\n", score);
            break;
        case 9:
            printf("%d 是优秀\n", score);
            break;
        case 8:
            printf("%d 是优\n", score);
            break;
        case 7:
            printf("%d 是优\n", score);
            break;
        case 6:
            printf("%d 是良好\n", score);
            break;
        default:
            printf("%d 是不及格\n", score);
            break;
        }
    
        system("pause");
        return 0;
    }
    

循环结构

依据条件是否满足,循环多次执行某段代码。

while

  • 流程图
    程序流程结构

  • 语法

    while (条件判别表达式)
    {
        循环体;
    }
    
  • 示例
    • 简单循环
      #define _CRT_SECURE_NO_WARNINGS
      #include 
      #include 
      
      int main(void)
      {
          int a = 0;
          while (a < 10)
          {
              printf("%d\n", a);
              a++;
          }
      
          system("pause");
          return 0;
      }
      
    • 逢 7 敲桌子

      “`c++

      <h1>define _CRT_SECURE_NO_WARNINGS</h1>

      <h1>include</h1>

      <h1>include</h1>

      int main(void)
      {
      // 0-100 的整数,递增,只要遇到7就敲桌子
      // 包括3种情况:1.是7的倍数;2.个位为7;3.十位为7
      int a = 1;

      <pre><code>while (a < 100)
      {
      if (a%7 == 0 || a%10 == 7 || a/10 == 7)
      {
      printf("%d, 敲桌子\n", a);
      }
      a++;
      }

      system("pause");
      return 0;
      </code></pre>

      }

      “`

do … while …

  • 流程图
    程序流程结构

  • 语法

    do
    {
        循环体;
    } while (条件判别表达式);
    
    • do … while … 中可以使用 break
  • 示例
    • 简单循环

      “`c++

      <h1>define _CRT_SECURE_NO_WARNINGS</h1>

      <h1>include</h1>

      <h1>include</h1>

      int main(void)
      {
      int a = 0;

      <pre><code>do
      {
      printf("%d\n", a);
      a++;
      } while (a < 10);

      system("pause");
      return 0;
      </code></pre>

      }

      “`

    • 求水仙花数 (一个三位数,各个位上的数字的立方和等于数字本身)

      “`c

      define _CRT_SECURE_NO_WARNINGS

      include

      include

      int main(void)
      {
      // 水仙花数,各个位上的数字的立方和等于数字本身
      int a = 100;
      do
      {
      int num_gewei = a % 10; // 个位数
      int num_shiwei = (a / 10) % 10; // 十位数
      int num_baiwei = a / 100; // 百位

          int sum = num_gewei * num_gewei * num_gewei + num_shiwei * num_shiwei * num_shiwei + num_baiwei * num_baiwei * num_baiwei;
      
          if (a == sum)
          {
              printf("%d\n", a);
          }
      
          a++;
      } while (a  表达式 2 (判别表达式) -> 为真 -> 循环体 -> 表达式 3 -> 表达式 2 (判别表达式) -> 为真 -> 循环体 ...
      
    • 循环因子
      • 定义在 for 之外,for 循环结束,也能使用
      • 定义在 for 之内,for 循环结束,不能使用
    • for 循环的 3 个表达式都可以变换、省略,但是分号不能省略

  • 示例

    • 求 1-100 之间整数的和
      #define _CRT_SECURE_NO_WARNINGS
      #include 
      #include 
      
      int main(void)
      {
          int i = 0;
          int sum = 0;
      
          for (i = 1; i<=100; i++)
          {
              sum = sum + i;
              //sum += i
          }
      
          printf("1-100 之间的整数和是:%d\n", sum);
      
          system("pause");
          return 0;
      }
      
    • 省略表达式 1、表达式 3 的写法
      #define _CRT_SECURE_NO_WARNINGS
      #include 
      #include 
      
      int main(void)
      {
          int i = 1;
          int sum = 0;
      
          for (; i <= 100;)
          {
              sum = sum + i;
              //sum += i
              i++;
          }
      
          printf("1-100 之间的整数和是:%d\n", sum);
      
          system("pause");
          return 0;
      }
      
    • 猜数字游戏 (用到随机数)
      #define _CRT_SECURE_NO_WARNINGS
      #include 
      #include 
      #include     // time 使用
      #include   // srand 使用
      
      int main(void)
      {
          // 生成一个随机数
          srand(time(NULL));
      
          int n = rand() % 100;  // 通过取模控制随机数长度 0-99
      
          printf("%d\n", n);
      
          // 开始猜数字
          int i = 0;
          int a;
      
          for (;; i++)
          {
              scanf("%d", &a);
              // scanf("请输入一个数字 %d", &a);  // 这种写法是错误的,应该避免
      
              if (n == a)
              {
                  printf("尝试了 %d 次成功.\n", i);
                  break;
              }
              else if(n > a)
              {
                  printf("输入的数字小了,请重新输入\n");
              }
              else
              {
                  printf("输入的数字大了,请重新输入\n");
              }
          }
      
          system("pause");
          return 0;
      }
      
      • 死循环 (没有出口)
        for(;;) == while(1)
        
      • scanf 的错误写法
        scanf("请输入一个数字 %d", &a); 
        

嵌套循环

  • 外层循环执行一次,内层循环执行一周

  • 示例

    • 模拟电子表打印
      #define _CRT_SECURE_NO_WARNINGS
      #include 
      #include 
      #include   // Sleep 所需
      
      int main(void)
      {
          // 模拟电子表打印时间
          int i = 0;
          int j = 0;
          int k = 0;
      
          for (i = 0; i<24; i++)  // 时
          {
              for (j = 0; j<60; j++)  // 分
              {
                  for (k = 0; k<60; k++) // 秒
                  {
                      Sleep(1000);
                      system("cls");
                      printf("%02d:%02d:%02d\n", i, j, k);
                      //system("cls");
                  }
              }
          }
      
          system("pause");
          return 0;
      }
      
    • 打印 99 乘法表
      #define _CRT_SECURE_NO_WARNINGS
      #include 
      #include 
      
      int main(void)
      {
          int i = 0;
          int j = 0;
      
          for (i = 1; i<=9; i++)  // 行
          {
              for (j = 1; j <= i; j++)  // 列
              {
                  printf("%d x %d = %d\t", j, i, i*j);
              }
      
              putchar('\n');
          }
      
          system("pause");
          return 0;
      }
      
    • 打印 99 乘法表,倒序显示
      #define _CRT_SECURE_NO_WARNINGS
      #include 
      #include 
      
      int main(void)
      {
          int i = 0;
          int j = 0;
      
          for (i = 9; i > 0; i--)  // 行
          {
              for (j = 1; j <= i; j++)  // 列
              {
                  printf("%d x %d = %d\t", j, i, i*j);
              }
      
              putchar('\n');
          }
      
          system("pause");
          return 0;
      }
      

结束循环

  • break
    • 跳出一重循环,如 for、while、do while
    • 防止 case 穿透,如 swtich
  • continue
    • 结束本次循环

goto 关键字

设定一个标签,”goto 标签名” 直接跳到标签位置执行。

  • 注意事项
    • 只在函数内部生效
    • goto 语句通常不用,主要因为它将使程序层次不清,且不易读,但在多层嵌套中,跳出时,用 goto 语句则比较合理。
  • 以下情况下,可以考虑用 goto 语句
    • 从多重循环中直接跳出
    • 出错时清除资源
    • 可增加程序的清晰度的情况
  • 示例
    #define _CRT_SECURE_NO_WARNINGS
    #include 
    #include 
    #include 
    
    int main(void)
    {
        printf("------------1\n");
        Sleep(1000);
        printf("------------2\n");
    LEBAL:
        printf("------------3\n");
        Sleep(1000);
        printf("------------4\n");
        Sleep(1000);
        printf("------------5\n");
        Sleep(1000);
        printf("------------6\n");
        goto LEBAL;
        printf("------------7\n");
        Sleep(1000);
        printf("------------8\n");
    
        system("pause");
        return 0;
    }
    
英仔
版权声明:本站原创文章,由 英仔 2022-08-07发表,共计4774字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)