循环语句
嗨,我是长安!
循环是编程中特别重要的概念。我记得当年第一次用循环打印乙99乘法表,那种成就感真的很棒!
循环让程序能够重复执行相同的代码!
while 循环
基本语法
while (条件) {
// 循环体
}
执行流程
graph TB
A[开始] --> B{条件成立?}
B -->|是| C[执行循环体]
C --> B
B -->|否| D[结束循环]
示例
#include <stdio.h>
int main() {
int i = 1;
while (i <= 5) {
printf("第%d次循环\n", i);
i++;
}
return 0;
}
输出:
第1次循环
第2次循环
第3次循环
第4次循环
第5次循环
do-while 循环
语法
do {
// 循环体
} while (条件);
与while的区别
while:先判断后执行(可能一次都不执行)do-while:先执行后判断(至少执行一次)
#include <stdio.h>
int main() {
int i = 10;
// while:一次都不执行
while (i < 5) {
printf("while: %d\n", i);
}
// do-while:至少执行一次
do {
printf("do-while: %d\n", i);
i++;
} while (i < 5);
return 0;
}
输出:
do-while: 10
for 循环
语法
for (初始化; 条件; 更新) {
// 循环体
}
执行流程
graph TB
A[初始化] --> B{条件成立?}
B -->|是| C[执行循环体]
C --> D[更新]
D --> B
B -->|否| E[结束]
示例
#include <stdio.h>
int main() {
for (int i = 1; i <= 5; i++) {
printf("第%d次循环\n", i);
}
return 0;
}
for循环详解
for (int i = 0; i < 10; i++) {
// 循环体
}
等价于:
int i = 0; // 初始化
while (i < 10) { // 条件
// 循环体
i++; // 更新
}
循环控制语句
break - 跳出循环
#include <stdio.h>
int main() {
for (int i = 1; i <= 10; i++) {
if (i == 5) {
break; // 遇到5就跳出
}
printf("%d ", i);
}
printf("\n");
return 0;
}
输出:
1 2 3 4
continue - 跳过本次循环
#include <stdio.h>
int main() {
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) {
continue; // 跳过偶数
}
printf("%d ", i);
}
printf("\n");
return 0;
}
输出:
1 3 5 7 9
嵌套循环
循环里面还可以有循环:
打印乘法表
#include <stdio.h>
int main() {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
printf("%d×%d=%d\t", 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
...
打印图案
#include <stdio.h>
int main() {
// 直角三角形
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= i; j++) {
printf("*");
}
printf("\n");
}
return 0;
}
输出:
*
**
***
****
*****
实战案例
案例1:猜数字游戏
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
srand(time(NULL));
int secret = rand() % 100 + 1;
int guess;
int count = 0;
printf("=== 猜数字游戏 ===\n");
printf("我想了一个1-100的数字\n\n");
while (1) {
printf("请输入你的猜测:");
scanf("%d", &guess);
count++;
if (guess > secret) {
printf("太大了!\n\n");
} else if (guess < secret) {
printf("太小了!\n\n");
} else {
printf("🎉 恭喜你猜对了!\n");
printf("你一共猜了%d次\n", count);
break;
}
}
return 0;
}
案例2:计算阶乘
#include <stdio.h>
int main() {
int n;
long long factorial = 1;
printf("请输入一个正整数:");
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
factorial *= i;
}
printf("%d! = %lld\n", n, factorial);
return 0;
}
案例3:求和(1+2+...+100)
#include <stdio.h>
int main() {
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
printf("1+2+3+...+100 = %d\n", sum);
return 0;
}
案例4:打印素数
#include <stdio.h>
#include <stdbool.h>
int main() {
int n;
printf("请输入一个数字:");
scanf("%d", &n);
printf("1到%d之间的素数:\n", n);
for (int i = 2; i <= n; i++) {
bool isPrime = true;
for (int j = 2; j * j <= i; j++) {
if (i % j == 0) {
isPrime = false;
break;
}
}
if (isPrime) {
printf("%d ", i);
}
}
printf("\n");
return 0;
}
案例5:菜单循环
#include <stdio.h>
int main() {
int choice;
while (1) {
printf("\n=== 主菜单 ===\n");
printf("1. 选项A\n");
printf("2. 选项B\n");
printf("3. 选项C\n");
printf("4. 退出\n");
printf("请选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("你选择了A\n");
break;
case 2:
printf("你选择了B\n");
break;
case 3:
printf("你选择了C\n");
break;
case 4:
printf("再见!\n");
return 0;
default:
printf("无效选择\n");
}
}
return 0;
}
常见循环模式
模式1:累加
int sum = 0;
for (int i = 1; i <= n; i++) {
sum += i;
}
模式2:累乘
int product = 1;
for (int i = 1; i <= n; i++) {
product *= i;
}
模式3:计数
int count = 0;
for (int i = 1; i <= n; i++) {
if (条件) {
count++;
}
}
模式4:查找
int found = 0;
for (int i = 0; i < n; i++) {
if (arr[i] == target) {
found = 1;
break;
}
}
练习题
练习1:打印星号金字塔
*
***
*****
*******
*********
练习2:计算平均分
输入5个学生的成绩,计算平均分。
练习3:斐波那契数列
打印前20个斐波那契数列:1, 1, 2, 3, 5, 8, 13...
练习4:数字反转
输入1234,输出4321。
答案参考
查看答案
练习1:
#include <stdio.h>
int main() {
int n = 5;
for (int i = 1; i <= n; i++) {
// 打印空格
for (int j = 1; j <= n - i; j++) {
printf(" ");
}
// 打印星号
for (int k = 1; k <= 2 * i - 1; k++) {
printf("*");
}
printf("\n");
}
return 0;
}
练习2:
#include <stdio.h>
int main() {
float score, sum = 0, average;
printf("请输入5个学生的成绩:\n");
for (int i = 1; i <= 5; i++) {
printf("第%d个学生:", i);
scanf("%f", &score);
sum += score;
}
average = sum / 5;
printf("平均分:%.2f\n", average);
return 0;
}
练习3:
#include <stdio.h>
int main() {
int a = 1, b = 1, c;
printf("%d %d ", a, b);
for (int i = 3; i <= 20; i++) {
c = a + b;
printf("%d ", c);
a = b;
b = c;
}
printf("\n");
return 0;
}
练习4:
#include <stdio.h>
int main() {
int num, reversed = 0, remainder;
printf("请输入一个数字:");
scanf("%d", &num);
while (num != 0) {
remainder = num % 10;
reversed = reversed * 10 + remainder;
num /= 10;
}
printf("反转后:%d\n", reversed);
return 0;
}
知识点总结
- ✅ while - 先判断后执行
- ✅ do-while - 先执行后判断
- ✅ for - 最常用的循环
- ✅ break - 跳出循环
- ✅ continue - 跳过本次
- ✅ 嵌套循环 - 打印图案
下一步
👉 函数详解