【C语言】循环语句

简介: 本文讲解:C语言的循环语句


image.gif编辑

或许不是今天,或许不是明天,或许不是下个月,但是,有一件事是确定的,有一天我肯定会成为冠军。—莫雷诺


目录

C语言循环结构的三种循环语句

1、for语句语句循环结构

1.1for语句的循环结构

1.2for语句的执行步骤

1.3for语句里的break和continue

1.4练习

1.4.1练习1

1.4.2练习2

2、while语句循环结构

2.1while语句的结构

2.2while语句的执行步骤

2.3while语句中的break和continue

2.4练习

2.4.1练习

3、do-while语句循环结构

3.1do-while语句执行步骤

3.2do-while语句中的break和continue

控制循环结构的两个语句

1、break语句

2、continue语句

3、嵌套循环

练习

1、计算n的阶乘

2、计算1!+2!+3!+...+10!

3、尝试用键盘读入一个字符,然后在屏幕上显示一个用这个字符填充的对角线长5个字符,倾斜放置的菱形


C语言循环结构的三种循环语句

在日常生活中我们许多事物离不开循环。像超市的收银系统,学校的学生管理系统等。都是重复一些类似的操作来录入信息,这时候就需要用到循环控制语句完成。下面我就来介绍这几种循环语句:


1、for语句语句循环结构

1.1for语句的循环结构

🤼‍♀️通过以下程序来看下它的结构:

//for语法结构
#include <stdio.h>
int main()
{
  for(表达式1;表达式2;表达式3)
  {
    循环体;
  }
}

image.gif

    • 表达式1是程序始初我们定义的值,它经过循环过后会改变我们称之循环变量
    • 表达式2根据条件来判断true或false(继续或结束程序)我们称之为循环判断
    • 表达式3它也会随着程序的运行不断自增,我们也称它为循环变量
    • 循环体内容一般就是我们要求的内容也就是程序的目的

    for语句流程图:

    image.gif编辑


    1.2for语句的执行步骤

    //for语法结构
    #include <stdio.h>
    int main()
    {
      for(表达式1;表达式2;表达式3)
      {
        循环体;
      }
    }

    image.gif

    执行步骤

    第一,给表达式1进行循环变量初始化,表达式2设置循环终止条件,表达式3设置循环变量增量或减量;

    第二,执行表达式2,判断结果为true(真),则进入表达式3循环变量增量或减量,否则为false(假)退出循环;

    第三,执行循环体内容;

    第四,转入第二步;


    注意🥊🥊🥊

    for语句里面的每个表达式都用英文分号;隔开


    例子:求0的9的和

    //求0到9的和
    #include<stdio.h>
    int main()
    {
      int s = 0;
      for (int i = 0; i < 10; i++)
      {
        s += i;
      }
      printf("%d\n", s);
      return 0;
    }

    image.gif

    输出:45


    第一次:i=0;i<10;i++,执行循环体内容,此时s=0;

    第二次:i=1;i<10;i++,执行循环体内容,此时s=1;

    此处省略多次

    最后一次:i=10;i!<9,退出循环,此时s=45;


    我们可以理解为每一次判断过后,i都要自增。自增后的i作为下一次判断条件,直到判断终止。


    1.3for语句里的break和continue

    首先我们要了解到break和continue的用法。在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。而continue则是退出本次循环,不终止循环,继续下一次循环。

    🤼我们来看break在for语句中的用法:

    #include <stdio.h>
    int main()
    {
      int i = 0;
      for (i = 1; i <= 10; i++)
      {
        if (i == 5)
          break;
        printf("%d ", i);
      }
      return 0;
    }

    image.gif

    输出:1 2 3 4


    这个程序比较容易理解,循环体内输出4次i后,i自增到5。if语句判断i==5为正则运行break语句,退出了整个循环。


    🤼‍♀️continue在for语句中的用法:

    #include <stdio.h>
    int main()
    {
      int i = 0;
      for (i = 1; i <= 10; i++)
      {
        if (i == 5)
          continue;
        printf("%d ", i);
      }
      return 0;
    }

    image.gif

    输出:1 2 3 4 6 7 8 9 10


    可以看到,与break不同之处是。当i自增到5时候,continue语句执行退出了当次的循环后,for语句还并未结束。所以输出的结果也是截然不同的。


    相信大家都已经懂得了for循环的结构、运行流程和for中break和continue的用法,我们来练习一下吧。


    1.4练习

    1.4.1练习1

    🤼有以下程序输出的结果是什么

    #include <stdio.h>
    int main()
    {
      int a = 0, b = 0;
      for (a = 1, b = 1; a <= 100; a++)
      {
        if (b >= 20) break;
        if (b % 3 == 1)
        {
          b = b + 3;
          continue;
        }
        b = b-5;
      }
      printf("%d\n", a);
      return 0;
    }

    image.gif

    输出: 8


    第一次循环:a = 1,b=1->b<20,if不成立,b%3==1%3==1成立,b=b+3, 此时b的值为4

    第二次循环:a = 2,b=4->b<20,if不成立,4%3==1成立,b=b+3, 此时b的值为7

    第三次循环:a = 3,b=7->b<20,if不成立,7%3==1成立,b=b+3, 此时b的值为10

    第四次循环:a = 4,b=10->b<20,if不成立,10%3==1成立,b=b+3, 此时b的值为13

    第五次循环:a = 5,b=13->b<20,if不成立,13%3==1成立,b=b+3, 此时b的值为16

    第六次循环:a = 6,b=16->b<20,if不成立,16%3==1成立,b=b+3, 此时b的值为19

    第七次循环:a = 7,b=19->b<20,if不成立,19%3==1成立,b=b+3, 此时b的值为22

    第八次循环:a = 8,b=22->b>20,if成立,循环break提出


    最后打印a:8


    1.4.2练习2

    🤼‍♀️找到10个数里面最大的值使用for循环

    #include<stdio.h>
    int main()
    {
      int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
      int rat = sizeof(arr) /sizeof(arr[0]);
      int max = 0;
      for (int i = 0; i < rat; i++)
      {
        if (arr[i] > max)
          max = arr[i];
      }
      printf("%d\n", max);
      return 0;
    }

    image.gif

    输出:10


    sizeof是求字节数,sizeof(arr)求出arr数组总字节数,sizeof(arr[0])求出arr单个元素字节数。那么sizeof(arr) /sizeof(arr[0])就是arr数组的长度了。

    上述程序 ,输出的结果是正确的。但这个程序是由漏洞的,这个程序固定设计了十个整数。那么自行输入呢。输入的数可以是整数、负数。那时候,最大的值该怎么求呢?


    🥊我们可以这样改:

    #include<stdio.h>
    int main()
    {
      int n = 0;
      int arr[10] = {0};
      int rat = sizeof(arr) / sizeof(arr[0])-1;
      for (int i = 0; i < rat; i++)
      {
        scanf("%d ", &arr[i]);
      }
      int max = arr[0];
      for (int j = 0; j < rat; j++)
      {
        if (arr[j] > max)
          max = arr[j];
      }
      printf("%d\n", max);
    }

    image.gif

    输入:-1 -2 -3 -4 -5 -1 -6 -10 -9 -10

    输出:-1


    我们可以看到上述程序中的max=arr[0]了,防止我输入的全都是负数,因此我干脆将第一个元素先最为最大值。


    2、while语句循环结构

    2.1while语句的结构

    //while语法结构
    #include <stdio.h>                      
    int main()                              
    {                                       
      表达式1;
        while (表达式2)                                                      
      {
        语句;
        表达式3;
      }
    }

    image.gif

    注意🥊🥊🥊不知道各位发现没有for语句与while语句有着同工异曲之处。那么如果我们会了for语句或者while语句其中一个是不是就掌握了两种语句呢?


    while流程图 :

    image.gif编辑

    2.2while语句的执行步骤

    //while语法结构
    #include <stdio.h>                      
    int main()                              
    {                                       
      表达式1;
        while (表达式2)                                                      
      {
        语句;
        表达式3;
      }
    }

    image.gif

    执行步骤

    第一,给表达式1进行循环变量初始化,表达式2设置循环终止条件,表达式3设置循环变量增量或减量;

    第二,执行表达式2,判断结果为true(真)执行语句,否则为false(假)退出循环;

    第三,表达式3循环变量增量或减量

    第四,转入第二步;


    while语句我们理解为先判断再执行


    例子:求0到9的和

    //求0到9的和
    #include <stdio.h>
    int main()
    {
      int i = 0;
      int s = 0;
      while (i < 10)
      {
        s = s + i;
        i++;
      }
      printf("%d\n", s);
      return 0;
    }

    image.gif

    输出:45


    和for语句执行的结果一样都是45,我们可以认为掌握for语句后就掌握了while语句,所以for语句与while语句有着同工异曲之处。


    2.3while语句中的break和continue

    上面已经讲到了break和continue的区别

    🤼那么break在while中的用法:

    #include<stdio.h>
    int main()
    {
      int i = 1;
      while(i <= 10)
      {
        if (i == 5)
          break;
        printf("%d ", i);
        i = i + 1;
      }
      return 0;
    }

    image.gif

    输出:1 2 3 4


    和刚刚讲解for的语句一样,输出4次i的值,当i自增到5时,满足了if判断为真执行break语句退出整个循环。


    🤼‍♀️continue在while中的用法:

    #include <stdio.h>
    int main()
    {
      int i = 1;
      while (i <= 10)
      {
        if (i == 5)
          continue;
        printf("%d ", i);
        i = i + 1;
      }
      return 0;
    }

    image.gif

    输出:1 2 3 4 光标一直闪烁


    与for语句中不同的是,i自增的位置发生了改变。导致每次退出的时候i始终是=5,所以if判断一直是真就一直执行continue语句。最终导致程序不能终止。


    2.4练习

    2.4.1练习

    🤼打印数字字符个数跳过其余字符

    #include <stdio.h>
    int main()
    {
      char ch = '\0';
      while ((ch = getchar()) != EOF)
      {
        if (ch < '0' || ch > '9')
          continue;
        putchar(ch);
      }
      return 0;
    }

    image.gif

    输入:abcd1234fafa567

    输出:1234567


    EOF文件结束标志,我们理解EOF=-1

    ||是或的意思


    3、do-while语句循环结构

    这里我们可以引用一句话:“东厂不敢杀的人我杀,东厂不敢管的事我管。一句话,东厂管得了的我要管,东厂管不了的我更要管,先斩后奏,皇权特许!”开个玩笑,其实这句话没什么用。主要是显现出do它不管后面的while满不满意先做了再说。


    3.1do-while语句执行步骤

    #include <stdio.h>
    int main()
    {
      表达式1;
      do
      {
            语句;   
        表达式2;
      }while(表达式3);
      return 0;
    }

    image.gif

    先执行循环里面语句和表达式2,在判断表达式3。因此我们理解 do-while为先执行再判断

    do-while流程图 :

    image.gif编辑

    🥊我们直接来看代码:

    //简单的while循环
    #include <stdio.h>
    int main()
    {
      int a = 0;
      int b = 1;
      do
      {
        a = a + b;
        b++;
        printf("%d ", a);
      } while (a<100);
      printf("\n");
      return 0;
    }

    image.gif

    输出:1 3 6 10 15 21 28 36 45 55 66 78 91 105


    我们可以看到,最后一次结果为105,超出了a<100。可见do-while确实是先执行循环体后判断。


    3.2do-while语句中的break和continue

    🤼break语句在do-while中的用法:

    #include <stdio.h>
    int main()
    {
      int i = 1;
      do
      {
        if (5 == i)
          break;
        printf("%d ", i);
        i = i + 1;
      } while (i <= 10);
      return 0;
    }

    image.gif

    输出:1 2 3 4


    与上面for循环,while循环都有一样,输出4次i,i自增到5满足if判断语句退出循环。可见判断语句在程序中的重要性。


    🤼‍♀️continue语句在do-while中的用法:

    #include <stdio.h>
    int main()
    {
      int i = 1;
      do
      {
        if (5 == i)
          continue;
        printf("%d ", i);
        i = i + 1;
      } while (i <= 10);
      return 0;
    }

    image.gif

    输出:1 2 3 4 光标闪烁不停


    do-while语句中的continue语句跟上面while程序中continue语句功能是一样的。都是每次退出的时候i始终是=5,所以if判断一直是真就一直执行continue语句。最终导致程序不能终止。


    控制循环结构的两个语句

    1、break语句

      • beeak语句我们理解为退出循环,结束程序。

      🤼我们直接看代码:

      image.gif编辑

      执行break操作,跳出所在的当前整个循环,到外层代码继续执行。

      image.gif编辑

      执行break操作,跳出所在的当前整个循环,到外层代码继续执行。可以跟上述continue语句对比。


      2、continue语句

        • continue语句咱们理解为退出本次循环,继续执行程序。

        🤼‍♀️咱们直接看代码:

        image.gif编辑

        执行continue操作,跳出本次循环,从下一个迭代继续运行循环,内层循环执行完毕,外层代码继续运行。

        image.gif编辑

        上面可以看两个不同的语句实现同一种功能,都跳过了3然后继续打印下个一个数字直到程序结束。


        3、嵌套循环

        嵌套循环:将一个循环结构A声明在另一个循环结构B的循环体中,就构成了嵌套循环

        🤼最经典之一的嵌套循环有9*9乘法口诀,来吧展示:

        #include <stdio.h>
        int main()
        {
          int i = 1;
          int j = 1;
          while (j < 10)
          {
            for (i = 1; i <=j; i++)
            {
              printf("%d*%d=%d ", i, j,i*j);
            }
            printf("\n");
            j++;
          }
        }

        image.gif

        可以看到结果非常的漂亮:

        image.gif编辑


        C语言循环结构语句,控制循环语句你会了吗?

           总结

          • 1、while语句先判断后执行
          • 2、do-while语句先执行后判断(先斩后奏)
          • 3、for语句跟while语句有着同工异曲之处
          • 4、break语句退出本次循环结束程序
          • 5、continue语句退出本次循环继续执行程序

          练习

          1、计算n的阶乘

          #include<stdio.h>
          int main()
          {
            int n = 0;
            int s = 1;
            scanf("%d", &n);
            for (int i = 1; i <=n; i++)
            {
              s = s * i;
            }
            printf("%d\n", s);
            return 0;
          }

          image.gif

          输入:5

          输出:120


          2、计算1!+2!+3!+...+10!

          #include<stdio.h>
          int main()
          {
            int n = 0;
            int s = 0;
            int m = 0;
            scanf("%d", &n);
            for (int i = 1; i <=n; i++)
            {
              m = 1;
              for (int j = 1; j <= i; j++)
              {
                m = m * j;
              }
              s = s + m;
            }
            printf("%d\n", s);
            return 0;
          }

          image.gif

          输入:6

          输出:873


          3、尝试用键盘读入一个字符,然后在屏幕上显示一个用这个字符填充的对角线长5个字符,倾斜放置的菱形

          #include<stdio.h>
          int main()
          {
              int i,j,k,n;
              n=3;
              char a;
              scanf("%c",&a);
              for(i=1;i<=n;i++)
              {
                  for(j=0;j<n-i;j++)
                      printf(" ");
                  for(k=0;k<2*i-1;k++) 
                      printf("%c",a);
                  printf("\n");
              }
              for(i=1;i<n;i++)
              {
                  for(j=0;j<i;j++)
                      printf(" ");
                  for(k=0;k<2*(n-i)-1;k++)
                      printf("%c",a);
                  printf("\n");
              }
              return 0;
          }

          image.gif

          输入:*

          输出:

          image.gif编辑


          本期博客到这就结束,如有帮助还请给博主点个小小的关注

          image.gif编辑

          “我真的恨死训练了。但我告诉自己,‘别放弃,忍受当下的苦,然后这辈子都像一个冠军一样活着。’”——阿里

          相关文章
          |
          1月前
          |
          C语言
          初识C语言2——分支语句和循环语句
          初识C语言2——分支语句和循环语句
          69 5
          |
          4月前
          |
          C语言
          【C语言】循环语句
          C语言中循环语句的相关知识点
          54 2
          【C语言】循环语句
          |
          2月前
          |
          安全 C语言
          C语言循环的使用注意点
          在C语言中,合理使用循环对于编写高效、安全的代码至关重要。以下是几点建议:确保循环条件正确以避免无限循环;每次迭代时正确更新循环变量;恰当使用`break`和`continue`控制执行流程;注意嵌套循环中的变量作用域;简化循环体内逻辑;根据需求选择合适的循环类型;注意数据类型以避免溢出;保持良好的缩进和注释习惯;减少重复计算以提升性能;确保循环终止条件明确。遵循这些建议,可以提高代码质量和可维护性。
          214 88
          |
          30天前
          |
          C语言
          【c语言】循环语句
          循环结构是C语言中用于简化重复操作的重要工具,主要包括while循环、do-while循环和for循环。while循环是最基本的形式,通过不断检查条件来决定是否继续执行循环体。do-while循环则先执行循环体,再检查条件,至少执行一次。for循环逻辑更复杂,但使用频率最高,适合初始化、条件判断和更新变量的集中管理。此外,循环中还可以使用break和continue语句来控制循环的提前终止或跳过当前迭代。最后,循环可以嵌套使用,解决更复杂的问题,如查找特定范围内的素数。
          37 6
          |
          1月前
          |
          Serverless C语言
          C语言控制语句:分支、循环和转向
          C语言控制语句:分支、循环和转向
          |
          1月前
          |
          算法 编译器 C语言
          【C语言】实现猜数字游戏(分支语句与循环语句的运用)
          【C语言】实现猜数字游戏(分支语句与循环语句的运用)
          |
          1月前
          |
          C语言
          教你快速理解学习C语言的循环与分支
          教你快速理解学习C语言的循环与分支
          16 0
          |
          1月前
          |
          小程序 C语言
          初识C语言:走近循环
          初识C语言:走近循环
          |
          2月前
          |
          C语言
          【C语言基础考研向】08判断语句与循环语句
          本文介绍了C语言中的关键编程概念:首先解析了关系表达式与逻辑表达式的优先级及计算过程;接着详细说明了`if-else`语句的使用方法及其多分支和嵌套应用;然后讲解了`while`循环与`for`循环的语法和注意事项;最后介绍了`continue`和`break`语句在控制循环中的作用和示例代码。
          |
          1月前
          |
          编译器 C语言 C++
          【C语言】循环语句(语句使用建议)
          【C语言】循环语句(语句使用建议)