forum.jpg
三种结构流程图
在文章嵌入式Linux开发《C语言专题(四:程序结构之顺序结构(1))》和嵌入式Linux开发《C语言专题(四:程序结构之选择结构(2))》中对分别对C语言中程序结构中的顺序结构和选择结构进行描述,这篇文章对另外一种程序结构-循环结构进行详细描述。
首先是循环结构的定义:内部有一段代码会连续执行n次(n>=0),这部分代码就是循环结构中的循环体。之后判断是否满足终止条件,满足就退出,否则继续循环,直到退出。对于循环结构来说,需要变量的初始化,变量的终止条件和循环增量(一起决定能够执行多少次循环体)以及循环体。常见的有for、while、do...while语句来实现。同时for while do 也是C语言中的关键字。 注意代码块{}在循环结构中的使用。
(1)for循环典型格式
for (循环变量初始化; 循环终止条件; 循环变量增量)
  • {
  • 循环体;
  • }
  • 复制代码

    执行流程:
    1)先进行循环变量初始化
    2)执行循环终止条件,如果判断结果为真,则进入第3步;如果为假则循环终止,退出
    3)执行循环体
    4)执行循环变量增量,转入第2步
    测试代码如下图所示:1)典型格式:
    forum.jpg
    for测试代码
    forum.jpg
    for测试代码
    可以将与for循环有关的变量的初始化都放到循环变量初始化的位置,这样可以更清晰的看懂所有变量的初始值。
    2)将循环变量的初始化放到for语句的外面(也能实现功能,不推荐这样写原因是如果代码比较长,不容易看到变量的初始值是多少)。代码如下图所示:
    forum.jpg
    for测试代码
    3)将循环变量的终止条件取值采用非"半开半闭区间"写法(也能实现功能,不推荐这样写原因是防止出现多次相加操作)。代码如下图所示:
    forum.jpg
    for测试代码
    4)将循环变量增量到放到for语句的循环体中(也能实现功能,不推荐这样写,原因是防止出现写多次)。代码如下图所示:
    forum.jpg
    for测试代码
    5)将循环变量初始化、 循环终止条件和 循环变量增量都去掉,就成一个死循环了。代码如下图所示:
    forum.jpg
    for测试代码
    注意:
    1)for语句的控制表达式不能包含任何浮点类型的对象
    2)for小括号中的是分号而不是冒号
    3)建议for语句的循环控制变量的取值采用"半开半闭区间"写法
    4)提倡写for循环时按照标准化典型格式书写
    (2)while循环典型格式
    循环变量初始化;
    while(循环终止条件)
  • {
  • 循环体(其中包含循环变量增量);
  • }
  • 复制代码

    while循环的执行步骤:
    1)首先是循环变量初始化
    2)判断循环终止条件是否满足。如果满足,则进入第3步;否则直接退出
    3)执行循环体,然后转入第2步
    测试代码如下图所示:
    forum.jpg
    while测试代码
    while死循环:这个while(1){}这种格式的死循环在单片机开发、stm32开发及多线程开发中都有很大用处。
    forum.jpg
    while死循环测试代码
    (3)do...while循环典型格式
    循环变量初始化;
    do
  • {
  • 循环体(其中包含循环变量增量);
  • }while(循环终止条件);
  • 复制代码

    while循环的执行步骤:
    1)首先是循环变量初始化
    2)执行循环体
    3) 判断循环终止条件是否满足。如果满足,则进入第2步;否则直接退出
    测试代码如下图所示:
    forum.jpg
    do...while测试代码
    (4)for、while、do...while之间的区别与联系
    1)循环结构必须有:循环变量初始化,循环终止条件,循环变量增量,循环体
    2)执行次数不同:while循环是先判断循环终止条件后执行,do...while循环是先执行后判断循环终止条件,当执行循环之后后续逻辑是一样的。如果第一次执行时就不满足循环终止条件,那么while循环直接退出,for循环一样,直接退出;而do...while循环执行一次循环体后再退出循环;
    3)书写格式不一样,但是本质是一样。
    for循环典型格式:
    for (循环变量初始化; 循环终止条件; 循环变量增量)
  • {
  • 循环体;
  • }
  • 复制代码

    while循环典型格式:
    循环变量初始化;
    while(循环终止条件)
  • {
  • 循环体(其中包含循环变量增量);
  • }
  • 复制代码

    do...while循环典型格式:
    循环变量初始化;
    do
  • {
  • 循环体(其中包含循环变量增量);
  • }while(循环终止条件);
  • 复制代码

    3)for循环常用于循环次数确定的情况下,而while用在满足某种条件时才循环的语句中,do...while与while类似。