• 第二站:分支与循环(第二幕)


    目录

    三、循环

    1.while循环

    (1)基本原理与用法

    (2)break在while循环中的作用

    (3)continue在while循环中的作用

    (4)一图总结while循环

    2.for循环

    (1)基本语法

    (2)break在for循环中的作用

    (3)continue在for循环的作用

    (4)for循环几个建议

    (5)变种的for循环

    (6)一道经典的错误标准的零分

    3.do while循环

    (1)do while语句的语法

    (2)break在do while循环中的作用

    (3)continue在do while循环中的作用

    4.一些经典的题目

    5.猜数字游戏

    6.goto语句

    总结


    三、循环

    在c语言中,循环共有三种,while循环,for循环,do while循环。在之前我们粗略的了解了while循环,现在我们来详细了解这三种循环。

    1.while循环

    (1)基本原理与用法

    我们在上一篇文章中已经了解了if语句的使用,我们这里复习一个简单的if语句。

    1. #define _CRT_SECURE_NO_WARNINGS 1
    2. #include<stdio.h>
    3. int main()
    4. {
    5. int num = 0;
    6. if (num == 0)
    7. printf("hehe");
    8. return 0;
    9. }

    这段代码的意思很简单,只要if里面条件成立,则打印hehe。其实while循环和if语句是非常相似的。我们这里在上面的代码稍作修改,将if改为while会发生什么呢?

    1. #include
    2. int main()
    3. {
    4. int num = 0;
    5. while (num == 0)
    6. printf("hehe");
    7. return 0;
    8. }

    输出结果为一个无限打印hehe。对于while语句

    一般是这样的形式

    while(判断语句)

            循环体;

    只有当判断语句为真的时候,可以执行下面的语句。执行完以后重新判断,如果仍为真,继续判断,直到为假才能跳出循环。当然上面这种情况下,循环体只能是一条语句,如果想要是多条语句则需要加上大括号

    while(判断语句)

            {

                    循环体;

            }

    这样的话就是多条语句的循环,不难看出,和if语句是很相似的。

    我们来实现一个简单的题目,打印出1---10的数字

    1. #include<stdio.h>
    2. int main()
    3. {
    4. int i = 1;
    5. while (i <= 10)
    6. {
    7. printf("%d ",i);
    8. i++;
    9. }
    10. return 0;
    11. }

    (2)break在while循环中的作用

    我们看这样一段代码

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

    这段代码的运行结果是1 2 3 4

     也就是说,我们可以调试一下分析该代码,我们会发现当i等于5时,满足if的条件,执行了break,然后下一步我们的代码就跳出了while循环。程序就结束了。

    也就是说break的作用是打破循环

    结论:break在while循环中的作用:

    在while循环中遇到break,就会停止后期所有的循环,直接终止循环

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

    (3)continue在while循环中的作用

    我们先看一段代码,并思考一下运行结果是什么

    1. #include<stdio.h>
    2. int main()
    3. {
    4. int i = 1;
    5. while (i <= 10)
    6. {
    7. if (5 == i)
    8. {
    9. continue;
    10. }
    11. printf("%d ", i);
    12. i++;
    13. }
    14. return 0;
    15. }

    运行结果为,1234然后死循环但是不打印任何东西。

    我们在给出一段代码。看看这个运行结果是什么

    1. #include<stdio.h>
    2. int main()
    3. {
    4. int i = 1;
    5. while (i <= 10)
    6. {
    7. i++;
    8. if (5 == i)
    9. {
    10. continue;
    11. }
    12. printf("%d ", i);
    13. }
    14. return 0;
    15. }

    运行结果为

     现在已经不是死循环了,可以打印出来值,并且使得循环结束。

     那么continue的作用到底是什么呢?我们给出结论

    continue在while循环中的作用:

    continue是用于终止本次循环的,也就是本次循环中continue后面的代码都不会被再次执行

    而是直接跳转到while语句的判断部分,进行下一次的循环入口判断。

    (4)一图总结while循环

    2.for循环

    (1)基本语法

    1. #include<stdio.h>
    2. int main()
    3. {
    4. for (表达式1; 表达式2; 表达式3)
    5. {
    6. 表达式4;
    7. }
    8. return 0;
    9. }

    如图所示,for循环先执行表达式1,然后表达式2为判断,如果成立,则执行表达式4,然后执行表达式3,在进行表达式2判断,如此循环下去。

    其中

    表达式 1
    表达式 1 初始化部分 ,用于初始化循环变量的。
    表达式 2
    表达式 2 条件判断部分 ,用于判断循环时候终止。
    表达式 3
    表达式 3 调整部分 ,用于循环条件的调整。

    我们举一个简单的例子,打印1--10之间的数字

    1. #include<stdio.h>
    2. int main()
    3. {
    4. int i = 0;
    5. for (i = 0; i <= 10; i++)
    6. {
    7. printf("%d ", i);
    8. }
    9. return 0;
    10. }

    (2)break在for循环中的作用

    我们来看这样一段代码

    1. #include<stdio.h>
    2. int main()
    3. {
    4. int i = 0;
    5. for (i = 1; i <= 10; i++)
    6. {
    7. if (i == 5)
    8. {
    9. break;
    10. }
    11. printf("%d ", i);
    12. }
    13. return 0;
    14. }

     运行结果为1 2 3 4

     可见,break在for循环中的作用与while循环一样

    (3)continue在for循环的作用

    1. #include<stdio.h>
    2. int main()
    3. {
    4. int i = 0;
    5. for (i = 1; i <= 10; i++)
    6. {
    7. if (i == 5)
    8. {
    9. continue;
    10. }
    11. printf("%d ", i);
    12. }
    13. return 0;
    14. }

    运行结果为

     我们发现于while循环中有一定差异,因为while循环中不执行调整语句,而for循环执行调整语句,可见存在稍微的差异,导致结果不同,但是其实仍然具有一定的统一性,因为都是只跳过了本次循环的大括号里面的语句,while循环中,调整语句就在大括号里面,所以跳过,而for循环调整语句不在大括号里面,所以不跳过调整语句。

    (4)for循环几个建议

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

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

    (5)变种的for循环

    ①下面代码中,for循环可以省略初始化部分,判断部分,调整部分,如果省略了判断部分,则判断恒为真。为死循环。

    1. #include
    2. int main()
    3. {
    4. for (;;)
    5. {
    6. printf("hehe\n");
    7. }
    8. return 0;
    9. }

    ②这条语句总共打印9个hehe,因为是两个for循环的嵌套使用

    1. #include<stdio.h>
    2. int main()
    3. {
    4. int i = 0;
    5. int j = 0;
    6. //这里打印多少个hehe?
    7. for (i = 0; i < 3; i++)
    8. {
    9. for (j = 0; j < 3; j++)
    10. {
    11. printf("hehe\n");
    12. }
    13. }
    14. }

    ③这段代码省略了初始化部分,只打印3个hehe,因为j不会被再次初始化

    1. #include<stdio.h>
    2. int main()
    3. {
    4. int i = 0;
    5. int j = 0;
    6. //如果省略掉初始化部分,这里打印多少个hehe?
    7. for (; i < 3; i++)
    8. {
    9. for (; j < 3; j++)
    10. {
    11. printf("hehe\n");
    12. }
    13. }
    14. }

     ④使用了多余一个变量来控制循环,如下所示,结果为两个hehe

    1. #include<stdio.h>
    2. int main()
    3. {
    4. //使用多余一个变量控制循环
    5. int x, y;
    6. for (x = 0, y = 0; x < 2 && y < 5; ++x, y++)
    7. {
    8. printf("hehe\n");
    9. }
    10. return 0;
    11. }

    (6)一道经典的错误标准的零分

    1. #include <stdio.h>
    2. int main()
    3. {
    4. int i = 0;
    5. int k = 0;
    6. for (i = 0, k = 0; k = 0; i++, k++)
    7. k++;
    8. return 0;
    9. }

    这段代码中,判断语句是赋值的,k赋值后是0,为假,因为只有0为假,非零都为真。所以,这道题什么都不打印。

    3.do while循环

    (1)do while语句的语法

    #include
    int main()
    {
        do
        {
            //代码块
        } while();
        return 0;
    }

    在do while语句中,无论条件是否成立,代码是先执行一次,然后在进行判断的,如果为真,则进入循环。值得注意的是,do while的判断语句后面有一个分号,这点于while和for循环不太一样。

    我们仍然举一个简单的例子,打印1---10

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

    (2)break在do while循环中的作用

    我们看这样一段代码

    1. #include<stdio.h>
    2. int main()
    3. {
    4. int i = 1;
    5. do
    6. {
    7. printf("%d ", i);
    8. if (i == 5)
    9. {
    10. break;
    11. }
    12. i++;
    13. } while (i <= 10);
    14. return 0;
    15. }

    输出结果为

     可见,break的作用为打破循环。与在while和for循环中的作用一样

    (3)continue在do while循环中的作用

    我们看这样一段代码

    1. #include<stdio.h>
    2. int main()
    3. {
    4. int i = 1;
    5. do
    6. {
    7. printf("%d ", i);
    8. if (i == 5)
    9. {
    10. continue;
    11. }
    12. i++;
    13. } while (i <= 10);
    14. return 0;
    15. }

    输出结果为12345555555555555

     可见continue的作用仍为,结束本轮循环,也就是跳过本次循环的大括号内剩余的内容。重新进入判断。

    4.一些经典的题目

    为了使文章条理更加清晰一些,我们将这一部分放在了另外一篇博客中,读者可以通过该链接进行跳转经典题目详解

    5.猜数字游戏

    为了使得文章条理清晰,我们将该部分放在了另外一篇博客中,这是链接 猜数字游戏

    6.goto语句

    C 语言中提供了可以随意滥用的 goto 语句和标记跳转的标号。
    从理论上 goto 语句是没有必要的,实践中没有 goto 语句也可以很容易的写出代码。
    但是某些场合下 goto 语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过 程。
    例如:一次跳出两层或多层循环。
    多层循环这种情况使用 break 是达不到目的。它只能从最内层循环退出到上一层的循环。
    如下代码所示,是一个简单的goto使用
    1. #include
    2. int main()
    3. {
    4. flag:
    5. printf("haha");
    6. goto flag;
    7. return;
    8. }

    我们在举一个例子,是goto语句在关机程序中的使用

    一个关机程序
    程序执行起来就倒计时关机,60秒后关机
    如果输入:我是猪,就取消关机

    1. #include
    2. #include
    3. int main()
    4. {
    5. char input[20] = { 0 };
    6. system("shutdown -s -t 60");
    7. again:
    8. printf("你的电脑将在60s后关机,如果输入我是猪,就取消关机");
    9. scanf("%s", input);
    10. if (0 == strcmp(input, "我是猪"))
    11. {
    12. system("shutdown -a");
    13. }
    14. else
    15. {
    16. goto again;
    17. }
    18. }

    这就是我们的代码,当我们输入我是猪时候,就会停止关机

    其中有几个库函数和命令需要大家了解一下

    showdown -s -t 60的意思是60秒后关机

    showdown -a的意思是取消关机

    当然还有很多命令我们这里附上一个链接,希望大家可以去这里面都自己学习一下这个命令。

    showdown的命令拓展


    总结

    本节主要讲述了,三大循环,以及goto循环的一些应用。如果对你有帮助的话,不要忘记点赞加关注哦。

  • 相关阅读:
    Python编程读取csv文件数据分别计算RMSE、SD、R
    基于Docker和MongoDB部署NodeBB论坛系统
    深入理解强化学习——多臂赌博机:增量式实现
    CentOS创建用户并赋予管理员权限
    网站图片如何批量下载教程
    Python无废话-办公自动化Excel图表制作
    【无标题】
    如何在 C 语言中处理不同进制的数字表示?
    Python爬虫技术在SEO优化中的关键应用和最佳实践
    using的应用
  • 原文地址:https://blog.csdn.net/jhdhdhehej/article/details/127509376