知识点精讲
一、while循环基本语法
while循环是C语言最基础的循环结构,遵循先判断条件,后执行循环体的规则,核心头文件为stdio.h(仅输入输出需包含)。
基本格式:
// 标准格式
while (条件表达式) {
// 循环体:满足条件时执行的代码
// 必须包含循环变量更新语句,避免死循环
}
核心规则:
| 组成部分 |
要求 |
示例 |
注意事项 |
| 条件表达式 |
布尔型(非0为真,0为假) |
i <= 10、flag == 1 |
必须用()包裹,不能省略 |
| 循环体 |
单语句/复合语句 |
{ printf("%d", i); i++; } |
多条语句必须用{}包裹 |
| 循环变量更新 |
改变条件表达式结果 |
i++、n--、sum += i |
缺失会导致死循环 |
#include
int main() {
// 示例:输出1-5的整数(计数型循环)
int i = 1; // 循环变量初始化
while (i <= 5) { // 循环条件
printf("%d ", i); // 循环体
i++; // 循环变量更新
}
return 0;
}
执行流程:
1. 初始化循环变量 → 2. 判断条件表达式 → 3. 条件为真执行循环体 → 4. 更新循环变量 → 5. 回到步骤2 → 6. 条件为假,退出循环
二、while循环的常见类型
1. 计数型循环(固定次数)
已知循环执行次数,循环变量从初始值到终止值按固定步长变化:
#include
int main() {
// 循环10次,输出1-10的偶数
int i = 2;
while (i <= 10) {
printf("%d ", i);
i += 2; // 步长为2
}
return 0;
}
2. 条件型循环(未知次数)
循环次数未知,满足特定条件时终止循环:
#include
int main() {
// 输入数字,直到输入0为止
int num;
printf("请输入数字(输入0退出):\n");
while (1) { // 死循环框架
scanf("%d", &num);
if (num == 0) {
break; // 终止循环
}
printf("你输入了:%d\n", num);
}
return 0;
}
三、break和continue控制循环
| 语句 |
作用 |
示例场景 |
| break |
立即终止整个循环,跳出循环体 |
满足条件时提前退出循环 |
| continue |
跳过本次循环剩余代码,直接进入下一次条件判断 |
过滤不需要处理的数据 |
break示例:
#include
int main() {
int i = 1;
while (i <= 10) {
if (i == 5) {
break; // i=5时终止循环
}
printf("%d ", i);
i++;
}
// 输出:1 2 3 4
return 0;
}
continue示例:
#include
int main() {
int i = 0;
while (i < 10) {
i++;
if (i % 2 == 0) {
continue; // 跳过偶数,只输出奇数
}
printf("%d ", i);
}
// 输出:1 3 5 7 9
return 0;
}
四、while循环常见错误
- 死循环:循环条件永远为真(如缺少i++、条件写成i=1而非i==1)
- 循环变量未初始化:直接使用未赋值的变量作为循环条件
- 循环体缺少{}:多条语句时仅第一条被当作循环体
- 条件表达式错误:如将<=写成<,导致少执行一次循环
// 错误示例:死循环(缺少i++)
#include
int main() {
int i = 1;
while (i <= 5) {
printf("%d ", i); // 无限输出1
// 缺失i++,循环变量不更新
}
return 0;
}
例题精选
例题1:while循环基本使用(输出1-10)
使用while循环输出1到10的整数,掌握计数型循环的基本写法。
#include
int main() {
int i = 1;
while (i <= 10) {
printf("%d ", i);
i++;
}
return 0;
}
运行结果:
1 2 3 4 5 6 7 8 9 10
例题2:while循环求和(1-100累加)
使用while循环计算1到100的累加和,掌握循环中变量的累加操作。
#include
int main() {
int i = 1, sum = 0;
while (i <= 100) {
sum += i; // 等价于sum = sum + i
i++;
}
printf("1-100的和:%d\n", sum);
return 0;
}
运行结果:
1-100的和:5050
例题3:while循环求阶乘(5!)
计算5的阶乘(5! = 5×4×3×2×1),掌握循环中变量的累乘操作。
#include
int main() {
int i = 1, fact = 1;
while (i <= 5) {
fact *= i; // 等价于fact = fact * i
i++;
}
printf("5的阶乘:%d\n", fact);
return 0;
}
运行结果:
5的阶乘:120
例题4:break语句(提前终止循环)
输入数字,当输入负数时立即终止循环,输出已输入的正数之和。
#include
int main() {
int num, sum = 0;
printf("请输入正数(输入负数结束):\n");
while (1) { // 死循环
scanf("%d", &num);
if (num < 0) {
break; // 输入负数,终止循环
}
sum += num;
}
printf("输入的正数之和:%d\n", sum);
return 0;
}
运行示例:
请输入正数(输入负数结束):
10
20
30
-5
输入的正数之和:60
例题5:continue语句(跳过偶数)
使用while循环输出1-20的所有奇数,通过continue跳过偶数。
#include
int main() {
int i = 0;
while (i < 20) {
i++;
if (i % 2 == 0) {
continue; // 跳过偶数,直接进入下一次循环
}
printf("%d ", i);
}
return 0;
}
运行结果:
1 3 5 7 9 11 13 15 17 19
例题6:while循环综合应用(猜数字游戏)
随机生成一个1-100的数字,用户通过while循环反复猜测,直到猜对为止。
#include
#include
#include
int main() {
// 生成1-100的随机数
srand(time(0));
int target = rand() % 100 + 1;
int guess, count = 0;
printf("猜数字游戏(1-100):\n");
while (1) {
printf("请输入你的猜测:");
scanf("%d", &guess);
count++;
if (guess > target) {
printf("猜大了!\n");
} else if (guess < target) {
printf("猜小了!\n");
} else {
printf("恭喜猜对了!你猜了%d次\n", count);
break;
}
}
return 0;
}
运行示例:
猜数字游戏(1-100):
请输入你的猜测:50
猜小了!
请输入你的猜测:75
猜大了!
请输入你的猜测:63
恭喜猜对了!你猜了3次