知识点精讲
一、for循环基本语法(高频考点)
for循环是C语言中最常用的计数型循环,将初始化、条件判断、循环变量更新集中在一处,结构清晰,核心头文件为stdio.h(仅输入输出需包含)。
标准格式:
// 标准格式(三表达式结构)
for (初始化表达式; 条件表达式; 更新表达式) {
// 循环体:满足条件时执行的代码
}
// 执行流程:
// 1. 执行初始化表达式(仅1次)
// 2. 判断条件表达式:
// - 真 → 执行循环体 → 执行更新表达式 → 回到步骤2
// - 假 → 退出循环
核心规则(高频考点):
| 组成部分 |
要求 |
示例 |
注意事项(高频考点) |
| 初始化表达式 |
循环变量赋初值(仅执行1次) |
int i=1、sum=0 |
可省略,但需在for外初始化 |
| 条件表达式 |
布尔型(非0为真,0为假) |
i <= 10、i != 0 |
省略则恒为真(死循环) |
| 更新表达式 |
改变循环变量值 |
i++、i -= 2、sum += i |
可省略,但需在循环体内更新 |
| 循环体 |
单语句/复合语句 |
{ printf("%d", i); } |
多条语句必须用{}包裹 |
#include
int main() {
// 示例:输出1-5的整数(标准计数型循环)
for (int i = 1; i <= 5; i++) { // 初始化;条件;更新
printf("%d ", i); // 循环体
}
return 0;
}
执行流程拆解(高频考点):
1. int i=1(初始化,仅1次)→ 2. i<=5?(是→执行循环体)→ 3. 输出i → 4. i++(更新)→ 5. 回到步骤2 → 6. i=6时条件为假,退出循环
二、for循环的常见形式(高频考点)
1. 标准计数型循环(最常用)
已知循环次数,循环变量按固定步长变化(中职考试高频题型):
#include
int main() {
// 循环10次,输出1-10的奇数
for (int i = 1; i <= 10; i += 2) { // 步长为2
printf("%d ", i);
}
return 0;
}
// 输出:1 3 5 7 9
2. 省略表达式的变形(高频考点)
#include
int main() {
// 形式1:省略初始化(需外部初始化)
int i = 1;
for (; i <= 5; i++) {
printf("%d ", i);
}
// 形式2:省略更新(需循环体内更新)
printf("\n");
for (int j = 1; j <= 5;) {
printf("%d ", j);
j++; // 循环体内更新
}
// 形式3:省略所有表达式(死循环,需break终止)
printf("\n");
int k = 1;
for (;;) {
if (k > 5) break;
printf("%d ", k);
k++;
}
return 0;
}
// 输出:1 2 3 4 5
// 1 2 3 4 5
// 1 2 3 4 5
3. for循环嵌套(高频考点)
外层循环执行1次,内层循环执行全部次数(九九乘法表、二维数组遍历):
#include
int main() {
// 九九乘法表(中职考试高频真题)
for (int i = 1; i <= 9; i++) { // 外层:行数
for (int j = 1; j <= i; j++) { // 内层:列数(不超过行数)
printf("%d×%d=%-2d ", j, i, i*j); // %-2d:左对齐占2位
}
printf("\n"); // 换行
}
return 0;
}
三、for vs while(高频考点)
| 对比维度 |
for循环 |
while循环 |
| 结构特点 |
三表达式集中,结构紧凑 |
条件单独,结构分散 |
| 适用场景 |
已知循环次数(计数型) |
未知循环次数(条件型) |
| 变量作用域 |
初始化变量可限定在for内(C99+) |
变量需在while外定义 |
| 等价转换 |
for(init;cond;update){body} ↔ init; while(cond){body;update;} |
// for循环转while循环(高频考点)
#include
int main() {
// for版本
for (int i = 1; i <= 5; i++) {
printf("%d ", i);
}
printf("\n");
// 等价while版本
int i = 1;
while (i <= 5) {
printf("%d ", i);
i++;
}
return 0;
}
四、break/continue在for中的使用(高频考点)
| 语句 |
作用 |
for循环中特殊点 |
| break |
立即终止整个循环 |
跳过更新表达式,直接退出 |
| continue |
跳过本次循环剩余代码 |
会执行更新表达式后再判断条件 |
break示例(高频考点):
#include
int main() {
// 找到1-10中第一个能被3整除的数后退出
for (int i = 1; i <= 10; i++) {
if (i % 3 == 0) {
printf("找到目标数:%d\n", i);
break; // 终止循环,不会执行i++
}
printf("当前i:%d\n", i);
}
// 输出:
// 当前i:1
// 当前i:2
// 找到目标数:3
return 0;
}
continue示例(高频考点):
#include
int main() {
// 输出1-10的偶数(跳过奇数)
for (int i = 1; i <= 10; i++) {
if (i % 2 != 0) {
continue; // 跳过printf,执行i++
}
printf("%d ", i);
}
// 输出:2 4 6 8 10
return 0;
}
五、for循环常见错误(高频考点)
- 死循环:条件表达式恒为真(如i=10写成i==10、省略条件表达式)
- 表达式顺序错误:初始化写成i=10,条件i>=1,更新i++(永远不满足条件)
- 循环变量作用域错误:C89标准不支持for内定义变量(需提前定义)
- 步长错误:计数型循环步长方向与条件冲突(如i=1,i<=10,i--)
// 错误示例1:死循环(条件恒为真)
#include
int main() {
for (int i = 1; i <= 5; ) { // 省略更新表达式
printf("%d ", i); // 无限输出1
// 缺失i++,循环变量不更新
}
return 0;
}
// 错误示例2:步长方向错误(无输出)
#include
int main() {
for (int i = 1; i <= 10; i--) { // i从1开始递减,条件i<=10永远为真?
printf("%d ", i); // 实际:i=1→0→-1→... 死循环
}
return 0;
}
例题精选(实战解题)
例题1:for循环基本使用(输出1-10)
【高频考点】掌握计数型for循环的标准写法,中职考试基础题型。
#include
int main() {
for (int i = 1; i <= 10; i++) {
printf("%d ", i);
}
return 0;
}
运行结果:
1 2 3 4 5 6 7 8 9 10
例题2:for循环求和(1-100累加)
【高频考点】循环累加操作,中职考试必考题型。
#include
int main() {
int sum = 0; // 累加和初始化
for (int i = 1; i <= 100; i++) {
sum += i; // 等价于sum = sum + i
}
printf("1-100的和:%d\n", sum);
return 0;
}
运行结果:
1-100的和:5050
例题3:for循环求阶乘(5!)
【高频考点】循环累乘操作,中职考试常考题型。
#include
int main() {
int fact = 1; // 阶乘初始化(注意不能为0)
for (int i = 1; i <= 5; i++) {
fact *= i; // 等价于fact = fact * i
}
printf("5的阶乘:%d\n", fact);
return 0;
}
运行结果:
5的阶乘:120
例题4:for循环嵌套(九九乘法表)
【高频考点】嵌套循环核心应用,中职考试压轴题型。
#include
int main() {
for (int i = 1; i <= 9; i++) { // 行数
for (int j = 1; j <= i; j++) { // 列数
printf("%d×%d=%-2d ", j, i, i*j);
}
printf("\n");
}
return 0;
}
运行结果:
1×1=1
1×2=2 2×2=4
1×3=3 2×3=6 3×3=9
1×4=4 2×4=8 3×4=12 4×4=16
...(后续行省略)
例题5:break/continue综合应用
【高频考点】循环控制语句,中职考试常考题型。
#include
int main() {
// 输出1-20中能被3整除的数,遇到15则终止
for (int i = 1; i <= 20; i++) {
if (i == 15) {
break; // 终止循环
}
if (i % 3 != 0) {
continue; // 跳过非3倍数
}
printf("%d ", i);
}
return 0;
}
运行结果:
3 6 9 12
例题6:for循环实战(素数判断)
【实战解题】综合应用,中职技能大赛常考题型。
#include
int main() {
int num, is_prime = 1;
printf("请输入一个大于1的整数:");
scanf("%d", &num);
// 素数判断:只能被1和自身整除
for (int i = 2; i <= num/2; i++) {
if (num % i == 0) {
is_prime = 0; // 不是素数
break; // 提前终止循环
}
}
if (is_prime && num > 1) {
printf("%d是素数\n", num);
} else {
printf("%d不是素数\n", num);
}
return 0;
}
运行示例:
请输入一个大于1的整数:17
17是素数
请输入一个大于1的整数:18
18不是素数
例题7:for循环变形(无限循环)
【高频考点】省略表达式的for循环,中职考试易错题。
#include
int main() {
int count = 0;
// 无限循环(省略所有表达式)
for (;;) {
count++;
printf("计数:%d\n", count);
if (count == 5) {
break; // 终止循环
}
}
printf("循环结束\n");
return 0;
}
运行结果:
计数:1
计数:2
计数:3
计数:4
计数:5
循环结束