9. 【C语言】重复是力量:C语言循环结构
📅 2026/7/5 14:57:48
👁️ 次浏览
前几篇文章我们让程序有了记忆变量会说话输入输出还学会了判断分支。但程序还有一个让人类望尘莫及的本事不知疲倦地重复做一件事。想想看让你把“你好”写 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 仓库。
1. 4-20mA电流环基础与行业应用工业现场最可靠的信号传输方式莫过于4-20mA电流环,这个看似简单的标准已经统治过程控制领域半个多世纪。电流信号相比电压信号具有显著优势:抗干扰能力强,可长距离传输(理论可达数公里)&…
📅 2026/7/5 14:57:48
前面五篇文章,我们熟悉了变量、常量、数据类型,但程序还像个闷葫芦——要么沉默不语,要么只喊一句固定的“Hello, World”。要让程序真正和人互动,就得学会两样本事:
输出:把数据展示给用户看(…
📅 2026/7/5 14:57:46
摘要
大语言模型、多模态深度伪造工具全面普及推动网络钓鱼攻击完成技术迭代,传统依靠语法错误、固定恶意关键词、静态域名黑名单的识别手段失效,2026 年全域钓鱼攻击呈现高度个性化、多渠道融合、自适应规避检测的全新特征。印度时报《How to spot phis…
📅 2026/7/5 14:55:45
为什么你的AI助手总是写出糟糕的代码?Karpathy四原则教你成为LLM编程高手 【免费下载链接】andrej-karpathy-skills A single CLAUDE.md file to improve Claude Code behavior, derived from Andrej Karpathys observations on LLM coding pitfalls. 项目地址: h…
📅 2026/7/5 16:03:58
测试驱动开发终极指南:如何用RED-GREEN-REFACTOR循环写出高质量代码 【免费下载链接】superpowers An agentic skills framework & software development methodology that works. 项目地址: https://gitcode.com/GitHub_Trending/su/superpowers
测试驱…
📅 2026/7/5 16:03:58
BlenderNeRF终极指南:如何在Blender中快速创建NeRF数据集 【免费下载链接】BlenderNeRF Easy NeRF synthetic dataset creation within Blender 项目地址: https://gitcode.com/gh_mirrors/bl/BlenderNeRF
BlenderNeRF是Blender中最简单、最快速的合成NeRF和…
📅 2026/7/5 16:03:58
Redis Vector Cache:缓存向量前,先问它会不会过期
一、深度引言与场景痛点
RAG 系统里,文本向量化是高频成本。把 query embedding 或文档 embedding 缓存在 Redis 里,可以减少模型调用。但向量不是普通字符串缓存。模型版本、切片…
📅 2026/7/5 16:03:58
5步掌握AI语音克隆:从零开始打造专属数字声音 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-based-Voice-Conversion-WebU…
📅 2026/7/5 16:03:58
大麦网自动抢票终极指南:三步告别手动抢票失败的烦恼 【免费下载链接】Automatic_ticket_purchase 大麦网抢票脚本 项目地址: https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase
你是否曾在热门演唱会门票开售瞬间,眼睁睁看着票…
📅 2026/7/5 16:01:58
1. 项目背景与核心需求 在嵌入式系统开发中,快速精确的数据检索是一个常见但极具挑战性的需求。特别是在工业控制、医疗设备和物联网终端等场景下,系统往往需要在毫秒级时间内完成关键参数的读取和写入操作。传统基于Flash存储的方案存在擦写次数有限、操…
📅 2026/7/5 0:01:51
1. 工业电流环信号传输的基础认知在工业自动化领域,4-20mA电流环传输技术已经持续服役超过半个世纪。这种看似简单的信号传输方式之所以能经久不衰,核心在于其独特的抗干扰能力——电流信号在长距离传输时几乎不受线路电阻和电压波动的影响。我曾在化工厂…
📅 2026/7/5 0:01:51
最近在项目里尝试用 YOLO 做目标检测,从环境搭建到模型训练,再到推理部署,整个过程踩了不少坑。网上的资料虽然多,但要么版本老旧,要么步骤零散不成体系,对于刚入门的新手来说,很容易卡在某个环…
📅 2026/7/5 0:01:51
1. 项目背景与核心需求 在嵌入式系统开发中,快速精确的数据检索是一个常见但极具挑战性的需求。特别是在工业控制、医疗设备和物联网终端等场景下,系统往往需要在毫秒级时间内完成关键参数的读取和写入操作。传统基于Flash存储的方案存在擦写次数有限、操…
📅 2026/7/5 0:01:51
1. 工业电流环信号传输的基础认知在工业自动化领域,4-20mA电流环传输技术已经持续服役超过半个世纪。这种看似简单的信号传输方式之所以能经久不衰,核心在于其独特的抗干扰能力——电流信号在长距离传输时几乎不受线路电阻和电压波动的影响。我曾在化工厂…
📅 2026/7/5 0:01:51
最近在项目里尝试用 YOLO 做目标检测,从环境搭建到模型训练,再到推理部署,整个过程踩了不少坑。网上的资料虽然多,但要么版本老旧,要么步骤零散不成体系,对于刚入门的新手来说,很容易卡在某个环…
📅 2026/7/5 0:01:51
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/5 6:01:04
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/5 6:01:04
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/4 17:36:47