9. 【C语言】重复是力量:C语言循环结构
前几篇文章我们让程序有了记忆变量会说话输入输出还学会了判断分支。但程序还有一个让人类望尘莫及的本事不知疲倦地重复做一件事。想想看让你把“你好”写 100 遍你可能会烦但程序用一个循环不到一毫秒就能完成。循环是计算机真正的效率利器它能把几行代码的执行次数放大成千上万倍。C 语言给了你三把循环的工具while、do-while、for外加两个控制循环走向的关键字break和continue。今天我们就来掌握它们。一、while循环先问再做while循环的逻辑最简单只要条件成立就重复执行循环体。每次执行前都会先检查条件如果一开始就不成立循环体一次都不会执行。while(条件){// 循环体}一个最经典的例子——从 1 数到 5#includestdio.hintmain(void){inti1;// 初始化while(i5){// 条件printf(%d ,i);i;// 更新循环变量}printf(\n);return0;}输出1 2 3 4 5如果把i忘掉i永远是 1条件永远成立程序就会陷入无限循环。写while循环时一定问自己三个问题循环变量初始化了没有条件最终会不会变成假每次循环有没有朝“假”的方向前进一步这三个问题是防止死循环的“三把锁”。二、do-while循环先做再问while的变体它把条件检查挪到了循环体之后。这意味着不管条件如何循环体至少执行一次。do{// 循环体}while(条件);注意while (条件);后面的分号不能少——这是初学者最容易掉的坑之一。一个典型的场景要求用户输入一个正数不合法就一直提示重新输入。#includestdio.hintmain(void){intnumber;do{printf(请输入一个正数);scanf(%d,number);}while(number0);printf(你输入了 %d谢谢\n,number);return0;}用户的输入在循环体里读然后再判断。因为“读”的动作必须先执行一次所以用do-while比while更自然。三、for循环最紧凑的循环体大多数循环都有三步曲初始化、条件检查、更新循环变量。for循环把它们一行搞定让代码紧凑易读。for(初始化;条件;更新){// 循环体}执行顺序是执行初始化只执行一次检查条件如果为假则退出循环执行循环体执行更新跳回第 2 步用for重写 1 到 5 的计数for(inti1;i5;i){printf(%d ,i);}括号里三个部分都可以省略分号必须保留但省略要有充足理由。比如for (; i 10; i)初始化放到外面for (;;)无限循环等价于while(1)for循环里声明的变量如int i在 C99 标准中是允许的作用域仅限于循环内。如果你的编译器比较老如某些 C89 模式可能需要把变量声明提到循环外。四、break与continue循环的半路控制有时候循环不必傻傻跑到条件变为假可以在中途就跳出或者跳过剩下的部分直接开始下一轮。这就需要break和continue。break直接跳出循环for(inti1;i10;i){if(i5){break;// 碰到 5 就终止整个循环}printf(%d ,i);}输出1 2 3 4i5 时直接跳出后面的 6-10 都不打continue跳过本轮剩余部分进入下一轮for(inti1;i5;i){if(i3){continue;// 跳过 i3 时的打印直接去 i}printf(%d ,i);}输出1 2 4 53 被跳过了注意在while和do-while里用continue要特别小心——它会跳转到条件检查处可能导致更新语句被跳过而形成死循环。比如inti0;while(i5){if(i2)continue;printf(%d ,i);i;// 当 i2 时 continuei 被跳过永远停在 2死循环}所以在while里用continue要确保变量的更新发生在continue之前。五、嵌套循环与经典案例九九乘法表循环里面可以再套循环形成嵌套循环。外循环每执行一次内循环就会完整地跑一遍。它常用来处理二维表格、矩阵、图形打印等问题。一个最典型的例子打印九九乘法表。#includestdio.hintmain(void){for(inti1;i9;i){// 外循环控制行for(intj1;ji;j){// 内循环控制列注意 j i 形成下三角printf(%d×%d%-2d ,j,i,i*j);}printf(\n);// 一行结束换行}return0;}输出1×11 1×22 2×24 1×33 2×36 3×39 1×44 2×48 3×412 4×416 ... 1×99 2×918 3×927 4×936 5×945 6×954 7×963 8×972 9×981%-2d表示左对齐占 2 个宽度让排版整齐。试试把j i改成j 9你就会看到完整的矩形表而不仅仅是下三角。嵌套循环时注意内循环变量和外循环变量不要用同一个名字除非你非常清楚作用域规则不然内层的修改会干扰外层。六、三大循环的选择指南场景推荐原因循环次数已知如遍历数组for初始、条件、更新集中清晰循环次数未知先判断再执行while条件在最前面符合直觉循环次数未知至少执行一次do-while体在条件前保证首次执行实际使用中for和while可以互相转换大多数场景用for就能胜任。但当你需要先读数据再判断是否继续时do-while就展现出它的优势。七、常见错误与陷阱while后多加分号inti0;while(i5);{// 分号让循环体变成空的死循环printf(%d,i);i;}do-while后忘分号do { ... } while (cond)末尾必须带分号。循环变量忘记更新while体内缺少i导致死循环。for括号里用逗号替代分号for (int i 0, i 10, i)错误分号必须保留。在while/do-while中用continue导致更新跳过如前例务必先更新再continue或者改用for循环。循环边界错误比如i 10写成i 10会少一次。初学者要仔细检查边界。八、小结循环让程序有了重复执行的能力结合之前学的变量和分支你已经可以写出有逻辑的、能处理批量数据的小程序了。while、do-while、for各有适用的场合break和continue给了你更精细的控制。嵌套循环则打开了处理二维问题的大门。但很快你会面临一个新问题如果我想存一个班所有学生的成绩难道要声明score1、score2……score50这样 50 个变量吗那显然太蠢了。下一篇文章我们就迎来一个重要的新工具——数组它能让你用一个名字管理一串数据让程序处理大量数据变得轻而易举。课后小练习用while循环计算 1 到 100 的累加和并输出。用for循环打印斐波那契数列的前 20 项1, 1, 2, 3, 5, 8…每行输出 5 个数。用嵌套循环打印如下图形* ** *** **** *****写一个猜数字游戏程序预设一个 1-100 的整数可以先固定写死一个值让用户猜每次猜完提示“大了”或“小了”直到猜中为止。统计猜了多少次。用do-while或while实现。题外话如果你正在学C语言或计划学C语言请订阅免费专栏《C语言从入门到精通》。这是一个循序渐进的 C 语言博客系列从最基础的环境搭建一路到高阶的系统编程技巧帮你构建一个完整的知识体系。不需要积分不需要VIP我们下期见获取本系列示例代码请访问 GitCode 仓库。

相关新闻

4-20mA电流环检测与PIC单片机信号处理方案

4-20mA电流环检测与PIC单片机信号处理方案

1. 4-20mA电流环基础与行业应用工业现场最可靠的信号传输方式莫过于4-20mA电流环,这个看似简单的标准已经统治过程控制领域半个多世纪。电流信号相比电压信号具有显著优势:抗干扰能力强,可长距离传输(理论可达数公里)&…

2026/7/5 14:57:36阅读更多 →
PyTorch 2.0+ 实战:Fashion MNIST 图像分类从 91% 到 95% 的 3 个调优技巧

PyTorch 2.0+ 实战:Fashion MNIST 图像分类从 91% 到 95% 的 3 个调优技巧

PyTorch 2.0 实战:Fashion MNIST 图像分类从 91% 到 95% 的 3 个调优技巧当你在Fashion MNIST数据集上训练一个基础CNN模型时,91%的准确率可能看起来已经不错了。但对于追求极致性能的开发者来说,这仅仅是起点。本文将分享三个经过实战验证的…

2026/7/5 14:52:35阅读更多 →
groupby + agg:数据分析 80% 的活就这两招

groupby + agg:数据分析 80% 的活就这两招

groupby agg:数据分析 80% 的活就这两招 “各品类销售额多少?” “每个月的 GMV 趋势?” “各部门绩效排名?” 这些问题的答案,都是 groupby 聚合。 Excel 里你要拉透视表、写 SUMIF,Pandas 里就两行。 g…

2026/7/5 14:52:35阅读更多 →
Valentina服装设计软件:5步打造个性化定制服装的完整指南

Valentina服装设计软件:5步打造个性化定制服装的完整指南

Valentina服装设计软件:5步打造个性化定制服装的完整指南 【免费下载链接】fashionmaker Fashion Robot 项目地址: https://gitcode.com/gh_mirrors/fa/fashionmaker Valentina是一款功能强大的开源服装设计软件,专为服装设计师、制版师和时尚爱好…

2026/7/5 16:07:47阅读更多 →
当你的数据分析师不懂SQL时:如何用自然语言直接与数据库对话?

当你的数据分析师不懂SQL时:如何用自然语言直接与数据库对话?

当你的数据分析师不懂SQL时:如何用自然语言直接与数据库对话? 【免费下载链接】vanna 🤖 Chat with your SQL database 📊. Accurate Text-to-SQL Generation via LLMs using Agentic Retrieval 🔄. 项目地址: https…

2026/7/5 16:07:47阅读更多 →
突破性多对象分割技术:SAM 3.1模型深度解析与实战指南

突破性多对象分割技术:SAM 3.1模型深度解析与实战指南

突破性多对象分割技术:SAM 3.1模型深度解析与实战指南 【免费下载链接】sam3.1 项目地址: https://ai.gitcode.com/hf_mirrors/facebook/sam3.1 SAM 3.1(Segment Anything with Concepts)是Meta推出的革命性图像与视频分割基础模型&a…

2026/7/5 16:07:47阅读更多 →
Arsenal-Image-Mounter技术深度解析:虚拟SCSI磁盘挂载架构揭秘

Arsenal-Image-Mounter技术深度解析:虚拟SCSI磁盘挂载架构揭秘

Arsenal-Image-Mounter技术深度解析:虚拟SCSI磁盘挂载架构揭秘 【免费下载链接】Arsenal-Image-Mounter Arsenal Image Mounter mounts the contents of disk images as complete disks in Microsoft Windows. 项目地址: https://gitcode.com/gh_mirrors/ar/Arsen…

2026/7/5 16:07:47阅读更多 →
三大压缩算法性能终极指南:Apache Doris如何实现存储成本降低40%+

三大压缩算法性能终极指南:Apache Doris如何实现存储成本降低40%+

三大压缩算法性能终极指南:Apache Doris如何实现存储成本降低40% 【免费下载链接】doris Apache Doris is an easy-to-use, high performance and unified analytics database. 项目地址: https://gitcode.com/GitHub_Trending/doris/doris 在当今数据爆炸的…

2026/7/5 16:07:47阅读更多 →
5个关键设计揭秘:Vanguard内核驱动如何构建游戏反作弊的底层防线

5个关键设计揭秘:Vanguard内核驱动如何构建游戏反作弊的底层防线

5个关键设计揭秘:Vanguard内核驱动如何构建游戏反作弊的底层防线 【免费下载链接】Vanguard Official Vanguard Anti-Cheat source code. 项目地址: https://gitcode.com/gh_mirrors/va/Vanguard Vanguard内核驱动作为Riot Games官方开源的游戏反作弊系统&am…

2026/7/5 16:02:47阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/5 0:01:08阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/5 0:01:08阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/5 0:01:08阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/5 0:01:08阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/5 0:01:08阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/5 0:01:08阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/5 1:30:27阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/5 3:48:10阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/5 3:48:09阅读更多 →