🔁 1. while 循环(当型循环)
语法形式
while (条件表达式) {
循环体语句;
}
执行流程:先判断条件,条件为真则执行循环体,然后再次判断……直到条件为假时退出
/* 示例:输出1到n */ int i = 1; while (i <= n) { printf("%d ", i); i++; }
while 循环流程图
🎮 while 循环动画演示
🔃 2. do-while 循环(直到型循环)
语法形式
do { 循环体语句; } while (条件表达式);
关键区别:先执行一次循环体,再判断条件。即使条件一开始就为假,循环体也会执行至少一次!
/* 输入验证:确保输入正整数 */ do { printf("请输入正整数: "); scanf("%d", &n); } while (n <= 0);
do-while 流程图
🎮 while vs do-while 区别演示
while 循环:
do-while 循环:
🔢 3. for 循环(最常用)
for 循环结构解析
for
(
初始化
① 执行一次
;
条件
② 每次先判断
;
更新
④ 每次最后执行
) {
循环体; ← ③ 条件为真时执行
}
① 初始化:执行一次
→
② 判断条件
→
③ 执行循环体
→
④ 更新变量
↩ 回②
🎮 for 循环计数动画
进度:0%
for 循环的灵活写法
省略初始化表达式:
int i = 0; for (; i < 5; i++) printf("%d ", i);
省略更新表达式:
for (i=0; i < 5;) { printf("%d ", i); i++; }
逆向循环:
for (i=10; i >= 1; i--) printf("%d ", i);
⚠️ 死循环(三个表达式都省略):
for (;;) 语句; // 永远循环!
⚖️ 4. 三种循环对比与转换
相同任务:输出 1 到 5
while 写法
int i = 1; while (i <= 5) { printf("%d ",i); i++; }
do-while 写法
int i = 1; do { printf("%d ",i); i++; } while (i <= 5);
for 写法
for (int i=1; i <= 5; i++) { printf("%d ",i); }
三种循环特点对比
| 循环类型 | 先判断/先执行 | 适用场景 | 循环次数不定时 |
|---|---|---|---|
| while | 先判断条件 | 不确定循环次数,条件驱动 | ✅ 适合 |
| do-while | 先执行一次 | 至少执行一次(如输入验证) | ✅ 适合 |
| for | 先判断条件 | 循环次数确定,计数型循环 | 可以,但 while 更直观 |
🚦 5. break 与 continue 语句
break — 跳出整个循环
for (i=1; i<=10; i++) { if (i == 5) break; // 遇到5就退出 printf("%d ", i); } // 输出: 1 2 3 4
continue — 跳过本次迭代
for (i=1; i<=10; i++) { if (i % 2 == 0) continue; // 跳过偶数 printf("%d ", i); } // 输出: 1 3 5 7 9
⚡ break vs continue 可视化对比
break
continue
🪆 6. 循环嵌套
双重 for 循环:乘法表 / 图案打印
/* 九九乘法表 */ for (i=1; i<=9; i++) { for (j=1; j<=i; j++) { printf("%d×%d=%-3d", j, i, i*j); } printf("\n"); }
🎮 图案打印演示
🏆 7. 经典算法演示
① 求 1+2+…+n(累加)
int sum = 0; for (i=1; i<=n; i++) sum += i;
② 求阶乘 n!
long long fac = 1; for (i=1; i<=n; i++) fac *= i;
③ 判断素数
int prime = 1; for (i=2; i*i <= n; i++) { if (n % i == 0) { prime = 0; break; } }
④ 输出所有素数(埃氏筛)
/* 输出2到n之间的所有素数 */ for (n=2; n<=limit; n++) { for (i=2; i*i<=n; i++) if (n%i==0) break; if (i*i > n) printf("%d ", n); }
⑤ 辗转相除法(求最大公约数)
while (b != 0) { t = b; b = a % b; a = t; } /* a 即为最大公约数 */