第五章第二节:循环结构(while/do-while/for)
第二节循环结构 ——while、do-while 和 for上一节我们学习了分支结构 —— 程序会 思考 了能根据条件做选择。但如果我想让程序重复做一件事呢比如打印 100 遍 我爱编程计算 1 加到 100 的和输出九九乘法表如果没有循环你就得写 100 遍、甚至更多遍相同的代码 —— 这也太蠢了。这时候就需要循环结构了。循环就是让程序重复执行一段代码直到满足某个条件才停止。C 语言提供了三种循环语句while循环先判断后执行适合不知道循环次数的场景do-while循环先执行后判断至少执行一次for循环最灵活、最常用适合知道循环次数的场景本节我们就把这三种循环一网打尽再加上break、continue和循环嵌套让你彻底掌握循环准备好了吗Lets go一、什么是循环结构循环结构就是根据条件重复执行一段代码叫循环体。就像跑步条件还没跑够 3 圈循环体继续跑每跑一圈检查一次直到跑够了就停下来┌───────────────┐ ↓ │ 判断条件 │ │ │ 为真 → 执行循环体 ─┘ 为假 → 结束循环循环有三个关键要素初始值循环从哪里开始条件判断什么时候结束更新每次循环后改变什么让条件最终能变成假少了任何一个都可能出问题比如死循环。二、while 循环while是最简单的循环也是最基础的。2.1 基本语法while (条件) { // 循环体条件为真时重复执行这里的代码 }执行流程先判断括号里的条件如果条件为真就执行循环体执行完循环体回到第 1 步再判断条件如果条件为假就结束循环继续往下执行特点先判断后执行。如果一开始条件就是假的循环体一次都不执行。2.2 第一个例子打印 1 到 5#include stdio.h int main() { int i 1; // ① 初始值从1开始 while (i 5) // ② 条件小于等于5就继续 { printf(%d , i); i; // ③ 更新每次加1否则永远是1死循环 } printf(\n循环结束\n); return 0; }运行结果1 2 3 4 5 循环结束我们来一步步看第 1 次i115 为真 → 打印 1i 变成 2第 2 次i225 为真 → 打印 2i 变成 3第 3 次i335 为真 → 打印 3i 变成 4第 4 次i445 为真 → 打印 4i 变成 5第 5 次i555 为真 → 打印 5i 变成 6第 6 次i665 为假 → 结束循环完美正好执行 5 次。2.3 再看一个例子计算 1 加到 100 的和#include stdio.h int main() { int i 1; // 循环变量从1开始 int sum 0; // 累加器初始为0 while (i 100) { sum sum i; // 把i加到sum里 i; // i加1 } printf(12...100 %d\n, sum); return 0; }运行结果12...100 5050经典的高斯求和问题用循环几行代码就搞定了。2.4 死循环⚠️新手必踩坑死循环如果循环条件永远为真循环就永远停不下来这叫死循环。while (1) { printf(停不下来啦\n); }或者更隐蔽的int i 1; while (i 5) { printf(%d\n, i); // 忘了写 ii永远是1条件永远为真 }死循环会让程序一直跑直到你强制关掉它。写循环的时候一定要检查循环变量有没有更新条件会不会最终变成假小技巧写 while 循环的时候建议按 初始值→条件→更新 三步走先把这三个要素都想清楚再写代码能有效避免死循环。三、do-while 循环do-while是while的变体区别是先执行后判断。3.1 基本语法do { // 循环体先执行一次 } while (条件); // 注意这里有个分号执行流程先执行一次循环体再判断条件如果条件为真继续循环如果条件为假结束循环特点先执行后判断。循环体至少执行一次。3.2 和 while 的对比来看一个直观的对比while 循环先判断int i 10; while (i 5) // 一开始就是假 { printf(%d\n, i); i; } // 一次都不执行什么也不输出do-while 循环先执行int i 10; do { printf(%d\n, i); // 先执行一次 i; } while (i 5); // 再判断是假的结束 // 输出10看到区别了吗即使条件一开始就是假的do-while也会执行一次循环体。3.3 do-while 的适用场景do-while用得比while少但在某些场景下特别合适比如菜单程序#include stdio.h int main() { int choice; do { // 先显示菜单 printf( 菜单 \n); printf(1. 开始游戏\n); printf(2. 设置\n); printf(3. 退出\n); printf(请选择); scanf(%d, choice); // 根据选择做不同的事 switch (choice) { case 1: printf(游戏开始\n); break; case 2: printf(进入设置\n); break; case 3: printf(再见\n); break; default: printf(输入错误请重新选择\n); break; } } while (choice ! 3); // 选3就退出 return 0; }菜单程序的特点是至少要显示一次菜单让用户选所以用do-while就很合适。⚠️注意do-while最后的while后面有个分号很多新手会忘写或者写成和 while 一样的格式导致编译错误。四、for 循环for是 C 语言里最常用、最灵活的循环没有之一。4.1 基本语法for (表达式1; 表达式2; 表达式3) { // 循环体 }三个表达式分别是表达式 1初始化循环开始前执行一次表达式 2条件判断每次循环前都判断表达式 3更新每次循环体执行完后执行对应的就是循环三要素表达式 1 → 初始值表达式 2 → 条件表达式 3 → 更新4.2 执行流程① 执行表达式1只执行一次 ↓ ② 判断表达式2 ↓ ┌─ 为真 → ③ 执行循环体 │ ↓ │ ④ 执行表达式3 │ ↓ └── 回到第②步 ↓ 为假 → 结束循环文字描述有点绕来看个例子就懂了。4.3 第一个例子打印 1 到 5#include stdio.h int main() { int i; for (i 1; i 5; i) // ①初始 ②条件 ③更新 { printf(%d , i); } printf(\n循环结束\n); return 0; }运行结果1 2 3 4 5 循环结束和之前 while 的例子结果一样但代码更紧凑了 —— 把循环三要素都写在了一行里一目了然。我们来一步步走先执行i 1只执行一次判断i 5→ 15 为真 → 执行循环体打印 1执行i→ i 变成 2判断i 5→ 25 为真 → 执行循环体打印 2执行i→ i 变成 3…… 以此类推直到 i6 时条件为假结束是不是很清晰4.4 再看一个例子计算 1 加到 100#include stdio.h int main() { int i; int sum 0; for (i 1; i 100; i) { sum i; } printf(12...100 %d\n, sum); return 0; }运行结果12...100 5050和 while 版本功能一样但代码更简洁循环变量的初始化、条件、更新都集中在一起看着就舒服。4.5 for 循环的各种变体for循环非常灵活三个表达式都可以省略但分号不能省变体 1省略表达式 1如果循环变量已经初始化过了可以省略表达式 1int i 1; for (; i 5; i) // 第一个表达式空着但分号不能省 { printf(%d , i); }变体 2省略表达式 3如果更新操作写在循环体里了可以省略表达式 3for (i 1; i 5; ) { printf(%d , i); i; // 更新写在这里 }变体 3三个都省略三个都省略的话就变成死循环了for (;;) // 相当于 while(1) { printf(死循环\n); }变体 4C99 可以在 for 里定义变量C99 标准允许在for的表达式 1 里直接定义变量for (int i 1; i 5; i) // 直接在for里定义i { printf(%d , i); }这样写更方便而且变量i的作用域只在for循环里面外面用不了 —— 更安全。建议如果编译器支持 C99现在基本都支持推荐在for里面直接定义循环变量代码更简洁作用域也更清晰。五、三种循环怎么选三种循环都能实现循环功能什么时候用哪个循环特点适用场景while先判断后执行不知道循环次数靠条件控制do-while先执行后判断至少一次菜单、输入验证等需要先执行一次的for最灵活三要素集中知道循环次数或者有明确的循环变量简单记知道循环多少次 → 优先用for不知道多少次靠条件判断 → 用while至少要执行一次 → 用do-while其实用多了你会发现for能搞定绝大多数场景是当之无愧的 循环一哥。六、break 和 continue循环里还有两个重要的关键字break和continue用来 打乱 正常的循环流程。6.1 break跳出整个循环break的作用是立即跳出当前循环循环就结束了。#include stdio.h int main() { int i; for (i 1; i 10; i) { if (i 5) { break; // 遇到5就跳出循环 } printf(%d , i); } printf(\n循环结束i %d\n, i); return 0; }运行结果1 2 3 4 循环结束i 5本来要循环到 10 的但是 i 等于 5 的时候遇到了break直接跳出了循环后面的 5、6、7... 都不执行了。注意break只能跳出一层循环。如果是嵌套循环内层的 break 只能跳出内层跳不到外层。6.2 continue跳过本次循环continue的作用是跳过本次循环的剩余部分直接进入下一次循环。#include stdio.h int main() { int i; for (i 1; i 10; i) { if (i % 2 0) { continue; // 偶数就跳过不打印 } printf(%d , i); } printf(\n循环结束\n); return 0; }运行结果1 3 5 7 9 循环结束遇到偶数的时候continue跳过了后面的printf直接进入下一次循环。所以只打印了奇数。6.3 break 和 continue 的区别关键字作用影响范围break跳出整个循环循环直接结束continue跳过本次继续下一次只影响当前这一次简单记break 不干了下班 → 整个循环结束continue 这次跳过下次继续 → 只跳过这一轮七、循环嵌套循环里面还可以再写循环这叫循环嵌套。最经典的例子就是九九乘法表#include stdio.h int main() { int i, j; for (i 1; i 9; i) // 外层循环控制行 { for (j 1; j i; j) // 内层循环控制列 { printf(%d×%d%-2d , j, i, i * j); } printf(\n); // 一行打完了换行 } return 0; }运行结果1×11 1×22 2×24 1×33 2×36 3×39 1×44 2×48 3×412 4×416 ...嵌套循环的执行逻辑外层循环走一次内层循环要走完整的一轮。就像时钟外层 分针内层 秒针分针走一格秒针要走一圈九九乘法表中i1 时j 从 1 到 1 → 打 1 个式子i2 时j 从 1 到 2 → 打 2 个式子i3 时j 从 1 到 3 → 打 3 个式子...i9 时j 从 1 到 9 → 打 9 个式子总共执行了 123...9 45 次内层循环体。注意嵌套循环的效率是 相乘 的关系。外层 100 次内层 100 次总共就是 10000 次。所以嵌套层数不要太多一般 2-3 层就够了再多程序就会变慢。八、综合示例学了这么多让我们来看几个经典的循环练习。示例 1判断素数#include stdio.h int main() { int n; int i; int is_prime 1; // 假设是素数1表示是0表示不是 printf(请输入一个正整数); scanf(%d, n); if (n 2) { printf(%d不是素数\n, n); return 0; } // 从2试到n-1看有没有能整除的 for (i 2; i n; i) { if (n % i 0) { is_prime 0; // 找到了能整除的不是素数 break; // 找到了就不用再试了直接跳出 } } if (is_prime) { printf(%d是素数\n, n); } else { printf(%d不是素数\n, n); } return 0; }示例 2打印三角形#include stdio.h int main() { int n 5; // 打印5行 int i, j; for (i 1; i n; i) // 外层行 { // 先打空格 for (j 1; j n - i; j) { printf( ); } // 再打星号 for (j 1; j 2 * i - 1; j) { printf(*); } printf(\n); } return 0; }运行结果* *** ***** ******* *********九、本节小结本节我们学习了 C 语言的三种循环结构以及两个循环控制关键字1. 三种循环表格循环语法特点whilewhile(条件) { ... }先判断后执行可能一次都不执行do-whiledo { ... } while(条件);先执行后判断至少执行一次forfor(初始; 条件; 更新) { ... }最灵活三要素集中最常用2. 循环三要素初始值从哪里开始条件判断什么时候结束更新每次改变什么⚠️ 三者缺一不可否则容易死循环3. break 和 continuebreak跳出整个循环不干了continue跳过本次继续下一次4. 循环嵌套循环里面套循环外层走一次内层走一轮注意嵌套不要太深影响效率学习建议循环是编程的基本功中的基本功一定要多练。建议你把经典的循环题都做一遍打印各种图形、求和、求阶乘、判断素数、斐波那契数列…… 练到随手就能写出来才算真正掌握了。⚠️ 关于本文由于笔者水平有限文中难免存在疏漏、错误或表述不够准确的地方。如果你在阅读过程中发现了任何问题 —— 无论是概念错误、代码 bug、还是表述不清 —— 都欢迎在评论区留言指正我会及时修正。技术之路道阻且长行则将至。我们互相学习共同进步

相关新闻

同样是跑Facebook广告,凭什么有人稳如老狗,有人天天提心吊胆?[特殊字符]

同样是跑Facebook广告,凭什么有人稳如老狗,有人天天提心吊胆?[特殊字符]

你有没有想过一个问题:同样是投Facebook广告,为什么有人账户稳得一批,素材一测出来就敢放量;有人却天天在封户、申诉、开新户之间反复横跳?差别不在素材,不在出价,而在——你用的是普通户&#…

2026/7/8 2:23:27 阅读更多 →
WorkBuddy + Claude Code 本地环境九步校准指南

WorkBuddy + Claude Code 本地环境九步校准指南

1. 这不是“又一个AI插件”:WorkBuddy Claude Code 的真实工作流价值锚点 你点开这个标题,大概率刚被“WorkBuddy登录失败”“CC Switch local proxy failed”“fatal: not a git repository”这类报错刷屏——不是在查文档,就是在重装Node…

2026/7/8 2:23:27 阅读更多 →
【共创季稿事节】HarmonyOS 6.1 分布式数据对象实战:跨设备购物车实时同步

【共创季稿事节】HarmonyOS 6.1 分布式数据对象实战:跨设备购物车实时同步

承接上篇《分布式流转实战》,本文解决流转后的核心痛点:手机上加了购物车,平板上的购物车还是空的。上篇实现了页面跨设备接续,但数据是"静态传递"的,修改后不会同步。本文将基于电商场景,拆解分…

2026/7/8 2:21:26 阅读更多 →

最新新闻

量化派:构建物理AI通用技术底座,开启“卖能力”产业拐点

量化派:构建物理AI通用技术底座,开启“卖能力”产业拐点

量化派探索物理世界生产力,引领物理AI新趋势大语言模型探索了数字世界的生产力,而物理AI正在重新探索物理世界的生产力。量化派不卖机器人本体,也不卖单一解决方案,而是售卖让机器人理解物理世界的通用能力层——物理世界基础模型…

2026/7/8 3:19:46 阅读更多 →
房地产顾问如何突破单一业务模式转型为家族资产配置顾问?

房地产顾问如何突破单一业务模式转型为家族资产配置顾问?

房产中介的传统业务模式高度依赖单套物业的成交。交易一完成,客户关系往往随之结束。当客户手里积累到第二套、第三套房产,开始考虑跨境持有、子女教育与婚姻资产保护时,单一经纪人的知识储备常常触及天花板。客户的问题从"买哪套房子&q…

2026/7/8 3:19:46 阅读更多 →
计网-如何理解冲突域和广播域

计网-如何理解冲突域和广播域

如何理解冲突域和广播域 1. 冲突域 (Collision Domain) 核心定义: 在一个网络中,如果两台设备同时发送数据会导致信号在物理介质上发生碰撞(冲突),那么这些设备就处于同一个冲突域。 通俗理解: 想象一条单车…

2026/7/8 3:17:45 阅读更多 →
不是接口调不通,而是链路没拆清:Dify RAG、向量引擎与 timeout 排查实战

不是接口调不通,而是链路没拆清:Dify RAG、向量引擎与 timeout 排查实战

很多人第一次把 Dify 接进业务系统时,问题通常会被问得很直接:Dify 用什么 API 接口? 如果只是跑通一个简单 Demo,这个问题并不复杂。聊天应用调用聊天消息接口,工作流应用调用工作流运行接口,知识库管理调…

2026/7/8 3:15:45 阅读更多 →
2026无线充赛道洗牌!Qi认证才是品牌合规底气与终端成交利器

2026无线充赛道洗牌!Qi认证才是品牌合规底气与终端成交利器

01 Qi认证,是无线充行业的硬性准入壁垒很多从业者误以为无线充入行门槛低、随便贴牌就能卖,实则不然。WPC无线充电联盟对Qi认证有着极其严苛的审核标准,绝非普通质检证书可比:✅ 品牌资质、工厂品控、生产线合规全方位审核&#x…

2026/7/8 3:11:44 阅读更多 →
三款热门随身WiFi用了三个月:格行、波导、华为,谁的信号先垮、流量先虚?

三款热门随身WiFi用了三个月:格行、波导、华为,谁的信号先垮、流量先虚?

随身WiFi新机到手,测速数据往往都很漂亮,但真正拉开产品差距的,是长期使用后的真实表现。使用一两个月后,信号是否持续稳定、流量是否偷偷虚标提速、机身发热是否加剧、会不会频繁断流,才是决定日常体验的核心关键。本…

2026/7/8 3:09:44 阅读更多 →

日新闻

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: …

2026/7/8 0:00:48 阅读更多 →
MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N1 到批处理的全路径 一、从"功能正确"到"性能可接受"——MyBatis 批量操作的三段式进化 MyBatis 在日常增删改查场景中几乎是无感的——实体映射直观、SQL 控制灵活。但当数据量从千级上升到十万级、百万级,许…

2026/7/8 0:00:48 阅读更多 →
工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

1. 工业负载控制方案概述在工业自动化、电机驱动和照明控制等高需求场景中,可靠地控制电感和电阻负载是核心挑战之一。TPD2015FN作为东芝的8通道高端智能功率开关IC,配合PIC18F45K22微控制器,能够构建一套稳定、高效的负载控制系统。这套组合…

2026/7/8 0:02:48 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/7 14:24:45 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/7 12:34:47 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/7 15:59:06 阅读更多 →

月新闻