9. 【C语言】重复是力量:C语言循环结构 📅 2026/7/5 14:57:42 前几篇文章我们让程序有了记忆变量会说话输入输出还学会了判断分支。但程序还有一个让人类望尘莫及的本事不知疲倦地重复做一件事。想想看让你把“你好”写 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 仓库。