c语言循环程序
一、for循环
1. 基本语法
for (初始化表达式; 条件表达式; 更新表达式) {
// 循环体
}
- 执行流程:
- 执行初始化表达式(仅一次)
- 检查条件表达式,若为真则执行循环体
- 执行更新表达式
- 重复步骤 2 和 3,直到条件为假
2. 示例:打印 1 到 10 的整数
#include <stdio.h>
int main() {
int i;
for (i = 1; i <= 10; i++) {
printf("%d ", i);
}
printf("\n");
return 0;
}
3. 高级用法
-
省略初始化表达式:
int i = 1; for (; i <= 10; i++) { ... } -
省略更新表达式:
for (int i = 1; i <= 10;) { printf("%d ", i); i++; // 更新在循环体内完成 } -
多重循环:
for (int i = 1; i <= 3; i++) { for (int j = 1; j <= 3; j++) { printf("(%d,%d) ", i, j); } printf("\n"); }
二、while循环
1. 基本语法
while (条件表达式) {
// 循环体
}
- 执行流程:
- 检查条件表达式,若为真则执行循环体
- 重复步骤 1,直到条件为假
2. 示例:计算 1 到 100 的和
#include <stdio.h>
int main() {
int sum = 0;
int i = 1;
while (i <= 100) {
sum += i;
i++;
}
printf("1到100的和为: %d\n", sum);
return 0;
}
3. 注意事项
-
避免无限循环:确保循环条件最终会变为假
// 错误示例:无限循环 while (1) { printf("这是一个无限循环\n"); } -
循环控制变量的初始化:在进入循环前初始化控制变量
三、do-while循环
1. 基本语
do {
// 循环体
} while (条件表达式);
- 执行流程:
- 执行循环体
- 检查条件表达式,若为真则重复执行循环体
- 特点:循环体至少执行一次
2. 示例:猜数字游戏
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int number, guess;
srand(time(NULL)); // 初始化随机数种子
number = rand() % 100 + 1; // 生成1-100的随机数
do {
printf("猜一个1-100的数字: ");
scanf("%d", &guess);
if (guess > number) {
printf("猜大了!\n");
} else if (guess < number) {
printf("猜小了!\n");
} else {
printf("恭喜,猜对了!\n");
}
} while (guess != number);
return 0;
}
四、循环控制语句
1. break语句
- 功能:立即终止整个循环,跳出循环体
- 示例:
for (int i = 1; i <= 10; i++) { if (i == 5) { break; // 当i等于5时终止循环 } printf("%d ", i); } // 输出:1 2 3 4
2. continue语句
- 功能:跳过当前循环的剩余部分,直接进入下一次循环
- 示例:
for (int i = 1; i <= 10; i++) { if (i % 2 == 0) { continue; // 当i为偶数时跳过后续代码 } printf("%d ", i); } // 输出:1 3 5 7 9
3. goto语句
- 功能:无条件跳转到指定标签处
- 示例:
int i = 1; loop: printf("%d ", i); i++; if (i <= 10) { goto loop; }
### 五、循环嵌套
#### 1. 示例:打印九九乘法表
```c
#include <stdio.h>
int main() {
int i, j;
for (i = 1; i <= 9; i++) {
for (j = 1; j <= i; j++) {
printf("%d×%d=%-3d", j, i, i*j); // %-3d表示左对齐,宽度为3
}
printf("\n");
}
return 0;
}
2. 示例:打印金字塔图案
#include <stdio.h>
int main() {
int rows, i, j, space;
printf("输入行数: ");
scanf("%d", &rows);
for (i = 1; i <= rows; i++) {
// 打印空格
for (space = 1; space <= rows - i; space++) {
printf(" ");
}
// 打印星号
for (j = 1; j <= 2 * i - 1; j++) {
printf("*");
}
printf("\n");
}
return 0;
}
六、循环结构的比较
| 特点 | for | while | do-while |
|---|---|---|---|
| 适用场景 | 已知循环次数 | 未知循环次数,先判断 | 未知循环次数,先执行 |
| 执行次数 | 0 次或多次 | 0 次或多次 | 至少 1 次 |
| 语法复杂度 | 适合复杂控制逻辑 | 适合简单条件判断 | 适合需要至少执行一次的场景 |
七、循环设计的最佳实践
-
避免无限循环:确保循环条件最终会变为假
-
初始化控制变量:在循环前初始化控制变量
// 错误示例 while (i < 10) { ... } // i未初始化 // 正确示例 int i = 0; while (i < 10) { ... } -
循环变量更新:确保循环变量在每次迭代中被更新
// 错误示例:i未更新,导致无限循环 for (int i = 0; i < 10;) { ... } // 正确示例 for (int i = 0; i < 10; i++) { ... } -
简化循环条件:保持条件表达式简洁明了
// 不推荐 while (x != 0 && y > 0 && z < 100) { ... } // 推荐 bool valid = (x != 0) && (y > 0) && (z < 100); while (valid) { ... } -
避免深层嵌套:超过 3 层嵌套时考虑重构代码

浙公网安备 33010602011771号