嵌入式学习日志——C语言(五)
遇到死循环按 " Ctrl + C " 退出。按 " Ctrl + Shift + T"可以打开两个并列的终端,再按 " Alt + 1 / 2 " 进行切换。while后无分号,do-while后必须有分号。for内定义的变量仅在循环内有效,适合已知次数的循环,结构清晰。
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); // 注意结尾的分号!
- 执行流程:
- 执行循环体。
- 检查
condition的值:
- 若为真(非 0),继续下一次循环;若为假(0),终止循环。
注意:
- 结尾的分号:
do-while语句必须以分号;结尾,否则会导致语法错误。 - 确保循环体至少执行一次,适合需要先操作再验证条件的场景。
4 用 for 语句实现循环
4.1 基本语法
for (循环变量初始化表达式; 条件表达式; 使循环趋于结束的表达式)
{
// 循环体
statement1;
statement2;
// ...
}
- 执行流程:
- 执行初始化表达式(仅一次)。
- 检查条件表达式的值:
- 若为真(非 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 内定义的变量仅在循环内有效,适合已知次数的循环,结构清晰。
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐


所有评论(0)