第五部分 编程语言基础——C语言

第四章 循环结构程序设计

while · do-while · for · break · continue · 嵌套循环

📋 考纲解读

📝 考试内容

结构化程序的设计方法,for 语句while 语句编程方法。

考点解读

近三年考点、题型、分值列表

考 点 题 型 2021年 2022年 2023年
while 循环 程序分析结果题、程序设计题 10 分 10 分 5 分
do-while 循环 程序分析结果题 5 分 5 分
for 循环 程序分析结果题、程序填空题、程序设计题 5 分 5 分
利用循环设计算法 综合应用题、程序填空题、程序改错题、程序设计题 50 分 40 分 40 分
循环的嵌套 综合应用题、程序分析结果题、程序填空题 5 分 15 分 25 分
⭐ 高频考点

当型循环与直到型循环、循环控制变量、利用循环设计算法。

🎯 重难点分析

利用循环设计算法。

01

while 循环

真题回顾 · 知识点分析 · 代码解析

📝 真题回顾 — while 循环

2022 年真题 程序分析结果题

下列程序的运行结果是 ________________。

#include<stdio.h> int main (void) { unsigned int V = 7; int num = 0; while(V) { V &= (V - 1); num++; } printf("num=%d", num); }

📌 答案

num = 3

💡 解析

在这段代码中,V 被初始化为整数 7

在 while 循环中,V &= (V-1) 的操作是用来清除 V 的最低位的 1。每次执行这个操作,V 都会将最低位的 1 变为 0,并且计数器 num 会自增 1。当 V 的所有位都变成了 0 时,循环停止。

执行过程:

• 初始时,V = 7 = 00000111(二进制)

• 第1次:V &= (V-1) → V = 00000110,num = 1

• 第2次:V &= (V-1) → V = 00000100,num = 2

• 第3次:V &= (V-1) → V = 00000000,num = 3

• 循环结束,最终输出 num = 3

💡 技巧:V & (V-1) 可用来统计二进制中 1 的个数!

📚 知识点分析 — 循环语句

(1) while 循环

while 循环会在指定条件为真(非零)时重复执行代码块,直到条件为假(零)。

📖 基本语法
while (condition) { // 循环内要执行的代码 }
⚠️ 注意

while 循环是「当型」循环——先判断条件,条件为真才执行循环体。如果一开始条件就为假,循环体一次也不会执行。

(2) do-while 循环

do-while 循环会先执行一次代码块,然后在指定条件为真时重复执行,直到条件为假。

📖 基本语法
do { // 循环内要执行的代码 } while (condition);
⚠️ 注意

do-while 循环是「直到型」循环——先执行一次循环体,再判断条件。循环体至少执行一次!末尾的分号 ; 不能省略。

02

for 循环与控制语句

for · break · continue · 嵌套循环

🔄 知识点分析 — for 循环

(3) for 循环

for 循环在指定条件为真时重复执行代码块,通常用于在已知循环次数的情况下进行循环。

📖 基本语法
for (initialization; condition; increment) { // 循环内要执行的代码 }

(4) break 语句

可以使用 break 语句在循环内部提前结束循环,并跳出循环。当某个条件满足时,可以使用 break 语句立即跳出循环。

for(int i = 1; i <= 10; i++) { if(i == 5) { break; // 当 i=5 时跳出循环 } printf("%d ", i); } // 输出:1 2 3 4

(5) continue 语句

可以使用 continue 语句跳过当前循环迭代中剩余的代码,直接进入下一次循环迭代。

for(int i = 1; i <= 5; i++) { if(i == 3) { continue; // 跳过 i=3 的这次循环 } printf("%d ", i); } // 输出:1 2 4 5

🔁 知识点分析 — 嵌套循环

(6) 嵌套循环

C 语言允许在一个循环内嵌套另一个循环,形成多层循环结构。

📌 执行规则

在嵌套循环中,内层循环的每次迭代都会完整执行一遍,直到内层循环结束后再执行外层循环的下一次迭代。

// 打印九九乘法表(外层循环控制行,内层循环控制列) for(int i = 1; i <= 9; i++) { // 外层循环:9行 for(int j = 1; j <= i; j++) { // 内层循环:每行i个式子 printf("%d×%d=%-3d", j, i, i*j); } printf("\n"); }
💡 理解技巧

外层循环走一步,内层循环走一圈。外层循环执行 m 次,内层循环执行 n 次,总循环次数 = m × n。

三种循环比较

循环类型 执行顺序 适用场景 最少执行次数
while 先判断,后执行 条件控制,次数不定 0 次
do-while 先执行,后判断 至少执行一次 1 次
for 先判断,后执行 已知循环次数 0 次
03

巩固提高

练习题 · 独立思考 · 查看答案

✏️ 巩固提高 — 第 1 题

练习题 1

下列程序的运行结果是 ________________。

#include<stdio.h> int main (void) { int i, s = 1; while(i <= 10) s += i += 2; printf("%d", s); }

📌 答案

结果不确定(变量 i 未初始化)

💡 解析

这道题的关键在于:变量 i 只声明了但没有初始化

在 C 语言中,局部变量如果不初始化,其值是不确定的(垃圾值)。因此 while 循环的条件判断结果是不可预测的。

如果假设 i 的初始值为 0(仅作分析参考),则执行过程如下:

• i=0:s += 0+2 → s=1+2=3,i=2

• i=2:s += 2+2 → s=3+4=7,i=4

• i=4:s += 4+2 → s=7+6=13,i=6

• i=6:s += 6+2 → s=13+8=21,i=8

• i=8:s += 8+2 → s=21+10=31,i=10

• i=10:s += 10+2 → s=31+12=43,i=12 → 退出循环

⚠️ 重要提醒:使用变量前一定要初始化!这是考试中常见的陷阱。

✏️ 巩固提高 — 第 2 题

练习题 2

下列程序的运行结果是 ________________。

#include<stdio.h> int main() { int i = 10, s = 2; while(i < 15) { s *= i; i += 2; } printf("%d", s); }

📌 答案

3360

💡 解析

初始值:i = 10s = 2

循环执行过程:

• 第1次:i=10 < 15 → s = 2 × 10 = 20,i = 12

• 第2次:i=12 < 15 → s = 20 × 12 = 240,i = 14

• 第3次:i=14 < 15 → s = 240 × 14 = 3360,i = 16

• 第4次:i=16 >= 15 → 循环结束

最终 s = 2 × 10 × 12 × 14 = 3360

💡 注意:i 每次增加 2,所以 i 的取值为 10、12、14,共执行 3 次循环。

✏️ 巩固提高 — 第 3 题

练习题 3

下列程序的运行结果是 ________________。

#include<stdio.h> int main() { int i, s = 1; for(i = 1; i < 10; i++); s += i++; printf("%d", s); }

📌 答案

11

💡 解析

这道题有一个经典陷阱:注意 for 循环后面的分号!

for(i=1; i<10; i++); 末尾有一个分号 ;,这意味着 for 循环的循环体是一个空语句

执行过程:

1. for 循环空转:i 从 1 增加到 9,当 i=10 时退出循环

2. 退出循环时,i = 10

3. 执行 s += i++

• 先用 i 的当前值(10)参与运算:s = 1 + 10 = 11

• 然后 i 再自增 1(i++ 是后置自增):i = 11

⚠️ 陷阱:for 后面的分号会让循环体变成空语句!考试中经常出现这种陷阱题,一定要仔细看!

✏️ 巩固提高 — 第 4 题

练习题 4

下列程序的运行结果是 ________________。

#include<stdio.h> int main() { int i = 10, s = 0; while(i-- > 5) s += 2; printf("%d", s); }

📌 答案

10

💡 解析

关键点:i--后置自减——先使用 i 的当前值进行比较,然后 i 再减 1。

循环执行过程:

• 第1次:i=10,判断 10>5 → 真,s=0+2=2,i 变为 9

• 第2次:i=9,判断 9>5 → 真,s=2+2=4,i 变为 8

• 第3次:i=8,判断 8>5 → 真,s=4+2=6,i 变为 7

• 第4次:i=7,判断 7>5 → 真,s=6+2=8,i 变为 6

• 第5次:i=6,判断 6>5 → 真,s=8+2=10,i 变为 5

• 第6次:i=5,判断 5>5 → 假,i 变为 4,循环结束

最终 s = 2 × 5 = 10

💡 记忆口诀:后置自增/自减——「先用后变」;前置自增/自减——「先变后用」。

✏️ 巩固提高 — 第 5 题

练习题 5

下列程序的运行结果是 ________________。

#include<stdio.h> int main() { int i = 0; char a[] = "abccsdaw"; for(; i < 4; i++) a[i]++; printf("%s", a); }

📌 答案

bcddsdaw

💡 解析

这道题考察字符数组与循环的结合。a[i]++ 表示将数组第 i 个字符的 ASCII 码值加 1。

初始数组:a = "abccsdaw"

a[0]='a', a[1]='b', a[2]='c', a[3]='c', a[4]='s', a[5]='d', a[6]='a', a[7]='w'

循环修改前4个字符(i=0到3):

• i=0:a[0]++ → 'a' + 1 = 'b'

• i=1:a[1]++ → 'b' + 1 = 'c'

• i=2:a[2]++ → 'c' + 1 = 'd'

• i=3:a[3]++ → 'c' + 1 = 'd'

• i=4:4 < 4 不成立,循环结束

修改后数组:a[0]='b', a[1]='c', a[2]='d', a[3]='d', 其余不变

最终输出:bcddsdaw

💡 注意:for 循环的初始化部分为空(for(; i<4; i++)),因为 i 已经在外面初始化了。这是合法的写法。

本章小结

循环结构程序设计

  • while / do-while / for 三种循环语句
  • break 跳出循环,continue 跳过本次迭代
  • 嵌套循环:外层一步,内层走一圈
  • 注意变量初始化、空循环体等常见陷阱

多练习 · 多思考 · 熟能生巧

1 / 15
上一页 下一页