目录
前言:
提到“循环”,资深动漫迷脑海里可能会浮现一个令人崩溃的画面——《凉宫春日的忧郁》中的“Endless Eight”。这部动画中,凉宫的团员们被困在一个时间循环中,经历了 15498 次重复的暑假(没错,甚至连编剧和声优都快崩溃了)。在第一次观看这部动漫的时候,本人也被迫看了除了分镜不同,剧情大致相同的8集(属实是学习分镜技巧了)。一想到我看了8集相同内容的痛苦记忆,从此之后我意识到我需要对我的电脑好一些,通过算法优化减少循环次数,提高程序运行效率,善待我的电脑!
虽然 Endless Eight 让观众崩溃,但在编程中,循环却是不可或缺的基础技能!今天我们就借助《凉宫春日的忧郁》的设定,来轻松搞懂 C 语言的循环。
1. 什么是循环
在编程中,循环是让代码重复执行的工具,就像《Endless Eight》(无尽8月)中同样的暑假事件一遍遍地重演。我们可以通过循环减少代码冗余,专注解决问题。在所有编程语言中,循环是一种至关重要的控制结构,用于重复执行某段代码。通过这些工具,我们可以高效地处理重复性任务。
在 C 语言中,我们有三种主要的循环结构:
1. for 循环:适合重复次数固定的循环,比如每一次暑假凉宫都要写的活动计划书。
2. while 循环:更像是一种未知的探索,不断循环直到条件满足,比如若不满足暑假结束跳出循环的条件,长门有希就得一直观察每一次暑假的经过。
3. do...while 循环:就像凉宫的小伙伴们每次都要先过完整个暑假,在下一次暑假开始时才发现时间循环还没结束。
接下来,我们用凉宫SOS团员的日常,来讲解这三种循环。
2. while 循环:长门有希的计数器
在 Endless Eight 的 15498 次循环中,只有长门有希记得所有细节(具体原因不解释)。这就像一个 while 循环:你不知道会循环多少次,但只要条件为真,就得一直执行。
2.1 while 循环语法结构
while (条件) {
// 循环体
}
• 条件:当条件为真时,循环体会一直执行。
• 如果条件一开始就是假,循环体将一次也不执行。
2.2 示例代码:记录循环次数
假如长门正在统计循环次数,直到循环达到 15498 次才停止:
#include <stdio.h>
int main() {
int loop_count = 0; // 记录循环次数,从 0 开始
// while 循环,只要 loop_count 小于 15498 就执行
while (loop_count < 15498) {
loop_count++; // 每次循环计数器加 1
}
printf("长门记录到第 %d 次时间循环。\n", loop_count);
return 0;
}
运行过程详解:
1. 初始值:loop_count = 0,计数从 0 开始。
2. 条件检查:loop_count < 15498,只要小于 15498,就继续循环。
3. 执行循环体:每次 loop_count++,计数器增加 1。
4. 循环结束:当 loop_count = 15498 时,条件不再满足,循环退出。
5. 打印结果:输出循环次数。
输出结果:
长门记录到第 15498 次时间循环。
3. for 循环:凉宫的计划书
凉宫春日总是满脑子计划,比如她决定带小伙伴们们去游泳、打棒球、看烟火、抓昆虫,活动一项都不能少。这种固定次数的循环,最适合用 for 来实现
凉宫春日喜欢制定暑假活动计划,比如:
• 上午去游泳
• 下午打棒球
• 晚上看烟火
这些活动是确定次数的任务,很适合用 for 循环。
3.1 for 循环语法结构
for (初始化; 条件; 更新) {
// 循环体
}
• 初始化:设定循环的起始状态(比如计数器从 0 开始)。
• 条件:循环执行的条件,只有条件为真,循环体才会继续执行。
• 更新:每次循环结束后,计数器的变化(通常是 ++ 或--)。
3.2 示例代码:凉宫的活动计划
假如凉宫安排了 4 项活动,用 for 循环来表示这些活动:
#include <stdio.h>
int main() {
// 定义活动数组,保存所有活动名称
char *activities[] = {"游泳", "打棒球", "看烟火", "抓昆虫"};
int total = 4; // 活动的总数
// for 循环,i 从 0 开始,直到小于 total
for (int i = 0; i < total; i++) {
printf("凉宫带大家去:%s\n", activities[i]); // 打印每项活动
}
return 0;
}
运行过程详解:
1. 初始化:int i = 0,循环从第一个活动开始。
2. 条件检查:i < total,只要 i 小于活动总数,循环就继续。
3. 执行循环体:输出 activities[i],对应的活动被打印。
4. 更新计数器:i++,将 i 的值加 1,转到下一项活动。
5. 结束条件:当 i 等于 total(4)时,循环停止。
输出结果:
凉宫带大家去:游泳
凉宫带大家去:打棒球
凉宫带大家去:看烟火
凉宫带大家去:抓昆虫
4. do...while 循环:凉宫的暑假重置
do...while 是先执行一次循环体,再判断是否继续。就像凉宫的团员们每次都会先完成一轮暑假活动,然后才意识到自己被困在时间循环中。
4.1 do...while 循环语法结构
do {
// 循环体
} while (条件);
• 强制执行一次循环,即使条件是假的。
4.2 示例代码:凉宫的循环暑假
凉宫的小伙伴们每次至少体验一次暑假,直到凉宫的愿望得以满足时间循环才停止:
#include <stdio.h>
int main() {
int finished = 0; // 0 表示暑假还没结束
// do...while 循环
do {
printf("凉宫度过了一次暑假...\n");
// 让用户输入是否结束循环
printf("时间循环结束了吗?(0=未结束, 1=结束):");
scanf("%d", &finished);
} while (finished == 0); // 只要 finished 为 0,就继续循环
printf("终于迎来了新学期!\n");
return 0;
}
运行过程详解:
1. 强制执行:无论 finished 是什么,先执行 printf("凉宫度过了一次暑假...");。
2. 用户输入:通过 scanf 读取用户输入的状态。
3. 条件检查:如果 finished == 0,继续循环,否则退出。
4. 打印结果:当循环结束,输出新学期的消息。
运行示例:
凉宫度过了一次暑假...
时间循环结束了吗?(0=未结束, 1=结束):0
凉宫度过了一次暑假...
时间循环结束了吗?(0=未结束, 1=结束):1
终于迎来了新学期!
5. 循环控制:break 和 continue
5.1 break:提前打破循环
假如凉宫发现 SOS 团员偷懒,可以直接中断活动:
for (int i = 1; i <= 4; i++) {
if (i == 3) {
printf("有人偷懒!活动取消!\n");
break;
}
printf("完成活动 %d\n", i);
}
输出:
完成活动 1
完成活动 2
有人偷懒!活动取消!
5.2 continue:跳过某次循环
比如某次活动有一半人没来,凉宫决定跳过这次活动:
for (int i = 1; i <= 5; i++) {
if (i == 3) {
printf("第 %d 次活动跳过,人数不足!\n", i);
continue;
}
printf("完成活动 %d\n", i);
}
输出:
完成活动 1
完成活动 2
第 3 次活动跳过,人数不足!
完成活动 4
完成活动 5
6. 总结
就像凉宫团员在时间循环中找到真相一样,学会 C 语言的循环后,你也能在代码的“循环”中游刃有余。
提问: 如果你也有 Endless Eight(无尽8月) 的循环经历,你会如何用代码破解?欢迎留言讨论!