内容正文:
专题五 循环结构(一)
【考纲要求】
知识要点
考试条目
4.循环结构程序设计
(1)了解 while、do…while、for 循环语句的异同;
(2)掌握 while、do…while、for 循环语句的使用;
(3)了解循环的嵌套;
(4)掌握 break 语句和 continue 语句的使用。
【课时安排】
2课时
【知识梳理】
While 语句
一、while 语句的语法结构
while (循环条件) {
// 循环体(需要重复执行的代码)
}
核心要素:
循环条件:必须是一个布尔表达式(结果为 true/非0 或 false/0)。
循环体:当条件为真时执行的代码块。
循环控制:必须在循环体内改变循环条件,否则可能导致死循环。
二、执行流程详解
先判断条件:
若条件为真(非0),执行循环体;
若条件为假(0),跳过循环,继续执行后续代码。
循环体执行后:
再次判断条件,重复上述过程。
流程图:
开始 → 判断条件 → 条件为真 → 执行循环体 → 更新条件 → 再次判断 → 条件为假 → 退出循环 → 继续后续代码
三、关键注意事项
1.避免死循环:
int i = 0;
while (i < 5) { // 没有 i++,条件永远为真
printf("Loop...");
}
注:循环体内必须有改变条件的语句(如 i++)。
2.循环条件初始化:
int count;
while (count < 10) { // count未初始化,结果不可预测
// ...
}
注:变量必须初始化(如 int count = 0;)。
四、典型应用场景
1. 不确定次数的循环
// 输入数字直到输入0为止
int num;
scanf("%d", &num);
while (num != 0) {
printf("输入的是:%d
", num);
scanf("%d", &num);
}
特点:循环次数由用户输入动态决定。
2. 遍历数组/字符串
char str[] = "Hello";
int i = 0;
while (str[i] != '\0') {
printf("%c", str[i]);
i++;
}
// 输出:Hello
3. 实现复杂条件控制
// 计算1+2+...+n,直到和超过100为止
int sum = 0, n = 1;
while (sum <= 100) {
sum += n;
n++;
}
printf("最终和:%d,n=%d", sum, n-1);
五、常见代码错误解析
错误示例1:分号位置错误
while (i < 5); // 分号导致循环体为空
{
printf("Hello");
i++;
}
结果:死循环(条件 i < 5 永远不变)。
错误示例2:逻辑条件矛盾
int x = 10;
while (x > 0) {
x = x / 2; // 当x=0时条件仍为假,但x可能无法达到0
printf("%d ", x);
}
// 输出:5 2 1 0(最后一次循环时x=0仍会执行)
问题:循环可能多执行一次,需仔细检查边界条件。
六、练习题
1. 以下代码输出的是( )
int i = 3;
while (i--) {
printf("%d ", i);
}
答案:2 1 0
2. 编写代码,用 while 循环输出斐波那契数列前10项(1,1,2,3,5,8...)。
int a = 1, b = 1, count = 2;
printf("1 1 ");
while (count < 10) {
int next = a + b;
printf("%d ", next);
a = b;
b = next;
count++;
}
3. 输入密码(最多3次机会),若输入正确显示“成功”,否则显示“失败”。
int attempts = 0;
int correct = 123456;
int input;
while (attempts < 3) {
scanf("%d", &input);
if (input == correct) {
printf("成功");
break;
}
attempts++;
}
if (attempts == 3) {
printf("失败");
}
do-while 语句
一、do-while 语句的语法结构
do {
// 循环体(需要重复执行的代码)
} while (循环条件); // 注意结尾必须有分号
核心要素:
循环体:至少会执行一次,无论条件是否成立。
循环条件:必须是一个布尔表达式(结果为 true/非0 或 false/0)。
分号结尾:while(条件) 后必须加分号(;),否则编译报错。
二、执行流程详解
先执行循环体:
无论条件是否为真,循环体至少执行一次。
再判断条件:
若条件为真(非0),继续执行循环体;
若条件为假(0),退出循环。
流程图:
开始 → 执行循环体 → 判断条件 → 条件为真 → 继续执行循环体 → 条件为假 → 退出循环 → 继续后续代码
三、与 while 语句的关键区别
特性
while 语句
do-while 语句
执行顺序
先判断条件,后执行循环体
先执行循环体,后判断条件
最少执行次数
0次(条件初始为假时不执行)
1次(无论条件是否成立)
适用场景
需要前置条件检查的循环
必须至少执行一次循环体的场景
四、典型应用场景
1. 输入验证(必须至少输入一次)
int password;
do {
printf("请输入密码(6位数字):");
scanf("%d", &password);
} while (password != 123456);
printf("密码正确!");
说明:用户必须至少输入一次密码才能判断是否正确。
2. 菜单选择系统
char choice;
do {
printf("
1. 开始游戏
2. 设置
3. 退出
");
scanf(" %c", &choice);
switch (choice) {
case '1': playGame(); break;
case '2': openSettings(); break;
case '3': printf("退出成功"); break;
default: printf("无效选项");
}
} while (choice != '3'); // 直到用户选择退出
3. 处理必须初始化数据
int num;
do {
printf("输入一个正整数:");
scanf("%d", &num);
} while (num <= 0);
printf("输入的正整数是:%d", num);
五、练习题
1.以下代码输出结果是( )
int x = 5;
do {
printf("%d ", x);
x--;
} while (x > 0);
答案:5 4 3 2 1
2.编写代码,用 do-while 计算一个正整数的位数(如输入1234,输出4)。
int num, count = 0;
scanf("%d", &num);
do {
num /= 10;
count++;
} while (num != 0);
printf("位数:%d", count);
3.用 do-while 实现猜数字游戏:随机生成1~100的整数,用户最多猜5次。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
srand(time(NULL));
int target = rand() % 100 + 1;
int guess, attempts = 0;
do {
printf("第%d次猜测(1~100):", attempts + 1);
scanf("%d", &guess);
if (guess > target) printf("太大了!
");
else if (guess < target) printf("太小了!
");
else {
printf("猜对了!
");
break;
}
attempts++;
} while (attempts < 5);
if (attempts == 5) printf("失败,正确答案是%d
", target);
return 0;
}
【限时练习】
1. 以下代码的循环次数是( )
int i = 5;
while (i > 0) {
i--;
if (i == 3) continue;
printf("%d ", i);
}
A. 5 次
B. 4 次
C. 3 次
D. 2次
【答案】B
2.以下代码的输出结果是( )
int x = 0;
do {
printf("%d ", x);
x++;
} while (x < 3);
A. 0 1 2
B. 0 1
C. 0
D. 1
【答案】A
3. 以下代码的输出是( )
int i = 0;
while (++i < 5) {
if (i % 2 == 0) break;
printf("%d ", i);
}
A. 1 3 5
B. 3 5
C. 1 3
D. 1
【答案】D
4. do-while循环的条件表达式在每次循环结束后计算。( )
【答案】√
5.以下代码会导致无限循环( )
int i = 1;
while (i <= 10);
i++;
【答案】√
6.while循环的循环体至少执行一次。( )
【答案】×
7.补全代码,使其逆序输出 1 到 5:
int i = 5;
do {
printf("%d ", i);
______;
} while (i > 0);
【答案】i--;
8.补全代码,计算 1 到 100 的偶数和:
int sum = 0, i = 2;
while (i <= 100) {
sum += i;
______;
}
【答案】i += 2; 或 i = i + 2;
9.编写程序:输入一个整数,计算其各位数字之和。
【答案】
#include <stdio.h>
int main() {
int num, sum = 0;
scanf("%d", &num);
while (num > 0) {
sum += num % 10;
num /= 10;
}
printf("各位数字之和为:%d", sum);
return 0;
}
10.编写程序:输入若干整数(输入 0 时结束),统计正数和负数的个数。
【答案】
#include <stdio.h>
int main() {
int num, pos = 0, neg = 0;
do {
scanf("%d", &num);
if (num > 0) pos++;
else if (num < 0) neg++;
} while (num != 0);
printf("正数:%d个,负数:%d个", pos, neg);
return 0;
}
【内容小结】
学科网(北京)股份有限公司
$$