5   学习循环控制

1  goto语句以及用goto语句构成循环

1.1  goto 语句的基本形式

 goto 语句的基本形式如下:

/* 标签定义 */
label:
    /* 代码块 */
    
/* 跳转到标签 */
goto label;

1.2  用 goto 语句构建循环

 /* 用goto语句求1到100的和 */
int i;
int sum = 0;
i = 1;         /* 循环变量的初始化语句 */
loop:
if(i <= 100)   /* 循环条件 */
{
    sum += i;
    ++i;        /* 使循环趋于结束的语句 */
    goto loop;
}      

(不建议使用 goto语句构建循环)

2  用 while 语句实现循环

2.1  基本语法

while (condition) 
{
    // 循环体
    statement1;
    statement2;
    // ...
}
  • condition:循环条件表达式,必须是一个整型表达式(结果为 0 或非 0)。
  • 循环体:当条件为真(非 0)时重复执行的代码块。

2.2  用 while 语句实现循环

1.  计算 1 到 100 的整数和

#include <stdio.h>
int main(void) 
{
    int sum = 0;
    int i = 1;
    while (i <= 100) 
    {
        sum += i;  /* 累加i的值到sum */
        i++;       /* 更新循环变量 */
    }
    printf("Sum = %d\n", sum);  /* 输出结果:5050 */
    return 0;
}

注意: 

  • 一般情况下不能再 " while (condition) " 后加分号,会引发死循环或逻辑错误。
  • 循环变量初始化语句、循环条件、使循环趋于结束的语句 三者不可或缺。三者共同作用确保循环按预期次数执行,并能正常结束。
  • 循环体可能一次都不被执行

3  用 do ······ while 语句实现循环

3.1  基本语法

do {
    // 循环体(至少执行一次)
    statement1;
    statement2;
    // ...
} while (condition);  // 注意结尾的分号!
  •  执行流程
  1. 执行循环体。
  2. 检查 condition 的值:
  • 若为真(非 0),继续下一次循环;若为假(0),终止循环。

注意:

  • 结尾的分号:do-while 语句必须以分号 ; 结尾,否则会导致语法错误。
  • 确保循环体至少执行一次,适合需要先操作再验证条件的场景。

4  用 for 语句实现循环

4.1  基本语法

for (循环变量初始化表达式; 条件表达式; 使循环趋于结束的表达式) 
{
    // 循环体
    statement1;
    statement2;
    // ...
}
  • 执行流程
    1. 执行初始化表达式(仅一次)。
    2. 检查条件表达式的值:
  • 若为真(非 0),执行循环体,然后执行使循环趋于结束的表达式,回到步骤 2;
  • 若为假(0),终止循环。

4.2  用 while 语句实现循环

1.  打印九九乘法表

#include <stdio.h>
int main() 
{
    for (int i = 1; i <= 9; i++) 
    {
        for (int j = 1; j <= i; ++j) 
        {
            printf("%d×%d=%-3d", j, i, i*j);  /* %-3d 左对齐,占3个字符宽度 */
        }
        printf("\n");  // 换行
    }
    return 0;
}

4.3  灵活使用 for 循环

1.  省略初始化表达式

int i = 0;  /* 在for循环外初始化 */
for (; i < 5; i++) 
{
    printf("%d ", i);
}

2.  省略使循环趋于结束的表达式

for (int i = 0; i < 5;) {
    printf("%d ", i);
    i++;  /* 在循环体内部更新 */
}

3.  省略条件表达式(需配合 break)

for (int i = 0; ; i++) 
{  /* 无限循环,需手动终止 */
    if (i >= 5) break;
    printf("%d ", i);
}

4.  多个循环变量

/* 同时控制两个变量 */
for (int i = 0, j = 10; i < j; i++, j--) 
{
    printf("i=%d, j=%d\n", i, j);
}

4.4  与其他循环的对比

循环类型 适用场景 特点
while 不确定循环次数,先判断条件 循环体可能一次都不执行
do-while 需要至少执行一次循环体 先执行后判断,循环体至少执行一次
for 已知循环次数或遍历序列 结构紧凑,适合计数循环

5  break 语句和 continue 语句

5.1  break 语句

1.  作用——循环断路语句

        立即终止整个循环:无论循环条件是否满足,一旦执行 break,程序将跳出当前循环体,继续执行循环后的代码。

5.2  continue 语句

1.  作用——循环短路语句

        跳过本次循环的剩余部分:执行 continue 后,程序会立即回到循环条件判断处,开始下一次迭代。

        注意:在 while 和 do-while 循环中使用 continue 时,需确保循环变量的更新在 continue 之前,否则可能导致死循环。

        在 for 循环中,continue 会直接跳到更新表达式;

语句 作用 对循环的影响 使用场景
break 终止整个循环 跳出循环体,执行循环后的代码 提前满足条件,无需继续执行循环
continue 跳过本次循环的剩余部分 回到循环开头,继续下一次迭代 过滤无效数据,简化循环逻辑

6  学习总结

遇到死循环按 " Ctrl + C " 退出。

按 " Ctrl + Shift + T  "可以打开两个并列的终端,再按 " Alt + 1 / 2 " 进行切换。

while 后无分号,do-while 后必须有分号。

for 内定义的变量仅在循环内有效,适合已知次数的循环,结构清晰。

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐