[从0开始的C语言] 从凉宫春日的“Endless Eight”学C语言循环

目录

前言:

1. 什么是循环

2. while 循环:长门有希的计数器

2.1 while 循环语法结构

2.2 示例代码:记录循环次数

3. for 循环:凉宫的计划书

3.1 for 循环语法结构

3.2 示例代码:凉宫的活动计划

4. do...while 循环:凉宫的暑假重置

4.1 do...while 循环语法结构

4.2 示例代码:凉宫的循环暑假

5. 循环控制:break 和 continue

5.1 break:提前打破循环

5.2 continue:跳过某次循环

6. 总结


前言:

提到“循环”,资深动漫迷脑海里可能会浮现一个令人崩溃的画面——《凉宫春日的忧郁》中的“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月) 的循环经历,你会如何用代码破解?欢迎留言讨论!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值