C语言循环语句完全指南:for、while、do-while

张开发
2026/4/16 13:42:39 15 分钟阅读

分享文章

C语言循环语句完全指南:for、while、do-while
引言在编程中我们经常需要重复执行某段代码。比如计算1到100的和、输出100次“Hello World”、遍历数组元素。这些都需要用到循环语句。C语言提供了三种循环语句for 循环适合已知循环次数的场景while 循环适合条件控制的场景do-while 循环适合至少执行一次的场景今天我将通过丰富的示例系统地讲解C语言中的循环语句包括break和continue的使用。第一部分三种循环语句概述一、循环语句对比循环类型语法结构适用场景执行次数forfor(初始化;条件;更新){ }已知循环次数0~N次whilewhile(条件){ }条件控制0~N次do-whiledo{ }while(条件);至少执行一次1~N次二、选择建议// 优先选择 for 循环最清晰可以有效使用 continue for (int i 0; i 100; i) { // 循环体 } // while 循环其次选择尽量不要和 continue 一起使用 int i 0; while (i 100) { // 循环体 i; } // do-while 循环特殊场景使用至少执行一次 int i 0; do { // 循环体至少执行一次 i; } while (i 100);第二部分for 循环详解一、for 循环的基本语法for (初始化表达式; 条件表达式; 更新表达式) { // 循环体语句 }执行流程执行初始化表达式只执行一次判断条件表达式如果为真执行循环体执行更新表达式重复步骤2-4直到条件为假二、基本示例示例1输出1-10#include stdio.h int main() { // C99 之后可以在循环内定义变量 for (int i 1; i 10; i) { printf(%d , i); } return 0; }示例2计算1-100的和int main() { int sum 0; for (int i 1; i 100; i) { sum i; } printf(12...100 %d\n, sum); // 5050 return 0; }示例3输出1-100的奇数int main() { for (int i 1; i 100; i) { if (i % 2 1) { printf(%d , i); } }return 0; }三、for 循环的变体// 1. 省略初始化变量已在外部定义 int i 0; for (; i 10; i) { printf(%d , i); } // 2. 省略更新在循环体内更新 for (int i 0; i 10; ) { printf(%d , i); i; } // 3. 死循环 for (;;) { printf(无限循环\n); // 需要使用 break 跳出 } // 4. 多个变量使用逗号运算符 for (int i 0, j 10; i j; i, j--) { printf(i%d, j%d\n, i, j); }四、嵌套 for 循环// 示例打印乘法口诀表 int main() { for (int i 1; i 9; i) { for (int j 1; j i; j) { printf(%d×%d%-3d , j, i, i * j); } printf(\n); } return 0; } // 示例输出100次循环变量作用域问题 int main() { // 错误写法内层循环的 j 只初始化一次 int i 0, j 0; for (; i 10; i) { for (; j 10; j) { printf(d\n); // 只会执行10次 } } // 正确写法内层循环每次都初始化 int i, j; for (i 0; i 10; i) { for (j 0; j 10; j) { printf(d\n); // 执行100次 } } return 0; }第三部分while 循环详解一、while 循环的基本语法while (条件表达式) { // 循环体语句 }特点先判断后执行可能一次都不执行。二、基本示例示例1输出1-10#include stdio.h int main() { int i 1; while (i 10) { printf(%d , i); i; } return 0; }示例2计算1-100的奇数和int main() { int i 1; int sum 0; while (i 100) { if (i % 2 1) { sum i; } i; } printf(奇数和 %d\n, sum); // 2500 return 0; }三、while 循环的注意事项// 1. 避免死循环 int i 1; while (i 10) { printf(%d , i); // 忘记 i → 死循环 } // 2. while 与 continue 配合需谨慎 int i 1; while (i 10) { if (i 5) { continue; // i 永远是5死循环 } printf(%d , i); i; }第四部分do-while 循环详解一、do-while 循环的基本语法do { // 循环体语句 } while (条件表达式);特点先执行后判断至少执行一次。二、基本示例示例1输出1-10#include stdio.h int main() { int i 1; do { printf(%d , i); i; } while (i 10); return 0; }示例2至少执行一次的场景如输入验证int main() { int num; do { printf(请输入一个正数: ); scanf(%d, num); if (num 0) { printf(输入错误请重新输入\n); } } while (num 0); printf(您输入的是: %d\n, num); return 0; }三、do-while 的注意事项// do-while 与 continue 配合需谨慎 int i 1; do { if (i 5) { continue; // 跳过 i导致死循环 } printf(%d , i); i; } while (i 10); // 正确做法continue 前先更新变量 int i 0; do { i; if (i 5) { continue; } printf(%d , i); } while (i 10);第五部分break 和 continue一、break 语句break用于立即终止当前循环跳出循环体。#include stdio.h // 示例找到第一个能被7整除的数 int main() { for (int i 1; i 100; i) { if (i % 7 0) { printf(第一个能被7整除的数是: %d\n, i); break; // 找到后立即退出循环 } } return 0; } // break 在 while 中的使用 int main() { int i 1; while (i 10) { if (i 5) { break; // i5 时退出循环 } printf(%d , i); i; } // 输出1 2 3 4 return 0; }二、continue 语句continue用于跳过本次循环剩余的代码进入下一次循环。#include stdio.h // 示例输出1-10跳过5 int main() { for (int i 1; i 10; i) { if (i 5) { continue; // 跳过5不输出 } printf(%d , i); } // 输出1 2 3 4 6 7 8 9 10 return 0; } // for 循环中使用 continue推荐 int main() { for (int i 1; i 10; i) { if (i 5) { continue; // 安全因为更新表达式 i 会正常执行 } printf(%d , i); } return 0; }三、break 和 continue 对比关键字作用对循环的影响break终止整个循环跳出循环不再执行continue跳过本次循环继续下一次循环使用建议for循环可以安全使用continuewhile循环使用continue需谨慎容易忘记更新变量导致死循环do-while循环使用continue需谨慎第六部分综合示例一、计算阶乘// 示例计算 n 的阶乘 int main() { int n; printf(输入一个数字: ); scanf(%d, n); int factorial 1; for (int i 1; i n; i) { factorial * i; } printf(%d! %d\n, n, factorial); return 0; }二、计算阶乘和// 示例计算 1! 2! 3! ... n! int main() { int n; printf(输入一个数字: ); scanf(%d, n); int sum 0; // 保存和 int factorial 1; // 保存当前阶乘 for (int i 1; i n; i) { factorial * i; // 计算 i! sum factorial; // 累加到总和 } printf(1! 2! ... %d! %d\n, n, sum); return 0; }三、计算奇数和// 示例计算 1~n 的奇数和 int main() { int n; printf(输入一个数字: ); scanf(%d, n); int sum 0; for (int i 1; i n; i) { if (i % 2 1) { sum i; } } printf(1~%d的奇数和 %d\n, n, sum); return 0; }四、循环嵌套示例// 示例输出所有水仙花数三位数各位立方和等于本身 #include math.h int main() { for (int i 100; i 999; i) { int a i / 100; // 百位 int b (i / 10) % 10; // 十位 int c i % 10; // 个位 if (pow(a, 3) pow(b, 3) pow(c, 3) i) { printf(%d , i); } } // 输出153 370 371 407 return 0; }五、死循环示例// for 死循环 for (;;) { // 需要 break 跳出 } // while 死循环 while (1) { // 需要 break 跳出 } // do-while 死循环 do { // 需要 break 跳出 } while (1);第七部分常见错误与注意事项一、循环变量作用域// C99 之前循环变量需要在外部定义 int i; for (i 0; i 10; i) { // ... } // C99 之后可以在循环内定义 for (int i 0; i 10; i) { // ... } // i 在这里不可见二、分号误用// 错误分号导致循环体为空 for (int i 0; i 10; i); { printf(这条语句只执行一次\n); } // 正确 for (int i 0; i 10; i) { printf(执行10次\n); }三、循环变量更新遗漏// 错误忘记更新变量导致死循环 int i 1; while (i 10) { printf(%d , i); // 缺少 i } // 正确 int i 1; while (i 10) { printf(%d , i); i; }四、continue 位置不当// 错误continue 导致循环变量不更新 int i 0; while (i 10) { if (i 5) { continue; // 死循环i 永远是 5 } printf(%d , i); i; } // 正确先更新再 continue int i 0; while (i 10) { i; if (i 5) { continue; } printf(%d , i); }总结一、三种循环对比特性forwhiledo-while语法for(init;cond;update){ }while(cond){ }do{ }while(cond);执行次数0~N次0~N次1~N次适用场景已知循环次数条件控制至少执行一次continue 安全性安全需谨慎需谨慎二、break vs continue关键字作用示例break终止整个循环找到目标后退出continue跳过本次循环跳过某些值三、选择建议// 1. 已知循环次数 → 使用 for for (int i 0; i 100; i) { } // 2. 条件控制可能不执行 → 使用 while while (条件) { } // 3. 至少执行一次 → 使用 do-while do { } while (条件); // 4. 使用 continue 时优先选择 for for (int i 0; i 10; i) { if (条件) continue; // 安全 }循环语句是编程中最基础也最重要的控制结构之一。掌握 for、while、do-while 的用法以及 break 和 continue 的使用技巧是写出复杂程序的关键。学习建议多练习每个语法都要亲手敲一遍注意细节循环变量更新、分号位置理解执行流程画流程图帮助理解调试练习使用 printf 输出中间结果

更多文章