• C语言-循环语句


    一.循环语句 

    while 

    for

    do while

    1.while循环

    while的语法结构:

    while(表达式)

    {

    循环语句

    };

    while语句执行的流程:

    首先进入循环时先在while后边的()内进行一次判断,若符合括号内的表达式,则进入{ }内的循环。{ }内的循环语句结束时,则会再次进行()内的判断,若符合则继续进行,直到不符合表达式为止。不符合时,程序就会跳过while语句继续向下走。提示:每个循环语句后边要用分号结尾。

     示例:实现在屏幕上打印1-10的数字:
    1. #include
    2. int main() {
    3. int i = 1;
    4. while(i<=10)
    5. {
    6. printf("%d ", i);
    7.  i = i+1;
    8. }
    9. return 0;
    10. }

    while语句中的break和continue 

    break在while循环中的作用:

    其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。

    所以:while中的break是用于永久终止循环的。

    1. //break 代码实例
    2. #include
    3. int main()
    4. {
    5. int i = 1;
    6. while(i<=10)
    7. {
    8. if(i == 5)
    9. break;
    10. printf("%d ", i);
    11. i = i+1;
    12. }
    13. return 0;
    14. }

    此代码的运行结果是什么呢?

    正确答案是 1 2 3 4

    可为什么不是 1 2 3 4 5 或者 1 2 3 4 5 6 7 8 9 10呢?

    原因就在于 break。

    i 从1开始打印并自增,当 i 的值是5时,就会符合if语句的条件,然后进行break,此时就会直接终止循环不再进行后边的打印printf和后边的自增i=i+1,并不在进行循环。

    continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行, 而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。 

    1. //代码什么意思?
    2. //代码1
    3. #include
    4. int main()
    5. {
    6. int ch = 0;
    7. while ((ch = getchar()) != EOF)
    8. putchar(ch);
    9. return 0;
    10. }
    11. 这里的代码适当的修改是可以用来清理缓冲区的.
    12. //代码2
    13. #include
    14. int main()
    15. {
    16. char ch = '\0';
    17. while ((ch = getchar()) != EOF)
    18. {
    19. if (ch < ‘0’ || ch > ‘9’)
    20. continue;
    21. putchar(ch);
    22. }
    23. return 0;
    24. }
    25. //这个代码的作用是:只打印数字字符,跳过其他字符的、

    2.for循环 

     语法

    for(表达式1; 表达式2; 表达式3)

    {

    循环语句;

    }

    表达式1

      表达式1为初始化部分,用于初始化循环变量的。

    表达式2

      表达式2为条件判断部分,用于判断循环时候终止。

    表达式3

      表达式3为调整部分,用于循环条件的调整。

    使用for循环 在屏幕上打印1-10的数字。

     

    1. #include
    2. int main()
    3. {
    4. int i = 0;
    5. //for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/)
    6. for(i=1; i<=10; i++)
    7. {
    8. printf("%d ", i);
    9. }
    10. return 0;
    11. }

    现在我们对比一下for循环和while循环。

    1. int i = 0;
    2. //实现相同的功能,使用while
    3. i=1;//初始化部分
    4. while(i<=10)//判断部分
    5. {
    6. printf("hehe\n");
    7. i = i+1;//调整部分
    8. }
    9. //实现相同的功能,使用while
    10. for(i=1; i<=10; i++)
    11. {
    12. printf("hehe\n");
    13. }

    可以发现在while循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离较 远,这样 查找修改就不够集中和方便。所以,for循环的风格更胜一筹;for循环使用的频率也最高。

    for语句的循环控制变量 

    小建议:

    1. 不可在for 循环体内修改循环变量,防止 for 循环失去控制。

    2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。

    1. int i = 0;
    2. //前闭后开的写法
    3. for(i=0; i<10; i++)
    4. {}
    5. //两边都是闭区间
    6. for(i=0; i<=9; i++)
    7. {}

     一些for循环的变种

    1. #include
    2. int main()
    3. {
    4. //代码1
    5. for(;;)
    6. {
    7. printf("hehe\n");
    8. }
    9. //for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议初学时省略,容易导致问
    10. 题。
    11. //代码2
    12. int i = 0;
    13. int j = 0;
    14. //这里打印多少个hehe?
    15. for(i=0; i<10; i++)
    16. {
    17. for(j=0; j<10; j++)
    18. {
    19. printf("hehe\n");
    20. }
    21. }
    22. //代码3
    23. int i = 0;
    24. int j = 0;
    25. //如果省略掉初始化部分,这里打印多少个hehe?
    26. for(; i<10; i++)
    27. {
    28. for(; j<10; j++)
    29. {
    30. printf("hehe\n");
    31. }
    32. }
    33. //代码4-使用多余一个变量控制循环
    34. int x, y;
    35. for (x = 0, y = 0; x<2 && y<5; ++x, y++)
    36. {
    37. printf("hehe\n");
    38. }
    39. return 0;
    40. }

    3.do...while()循环 

    语法:

    do 循环语句;

    while(表达式);

    此代码的执行特点为循环至少执行一次。使用的场景有限,所以不是经常使用。

    循环示例 

    1. #include
    2. int main()
    3. {
    4. int i = 10;
    5. do
    6. {
    7. printf("%d\n", i);
    8. }while(i<10);
    9. return 0;
    10. }

    4.结尾

    好啦,今天的分享就到这里,欢迎大家的点赞和关注。

  • 相关阅读:
    Spring Boot:自定义注解--annotation
    SAP MM模块业务流程
    RTSP/Onvif安防视频平台EasyNVR级联至EasyNVS系统不显示通道,是什么原因?
    Spirngboot中文乱码解决方案
    使用GoFrame+Vue+ElementUI框架搭建的管理系统
    Leetcode 2458. 移除子树后的二叉树高度
    618洗地机全网热门推荐,跟着买错不了
    Go语言学习教程(十三)
    本质安全设备标准(IEC60079-11)的理解(一)
    4.9 nodejs操作多种数据库
  • 原文地址:https://blog.csdn.net/weixin_72703349/article/details/132629857