2024.11.4-第六讲:循环语句

每日学习打卡
优质创作者: 人工智能技术领域
2024-11-04 20:21:10

第六讲:循环语句 🌀

目录 📋

  1. 计数控制的循环
  2. 条件控制的循环 (while, do-while)
  3. 标记控制的循环
  4. 嵌套循环
  5. 流程控制的转移
  6. gotocontinue 语句

一、计数控制的循环 🔢

计数控制的循环是通过计数器变量来控制循环执行次数的。常见的例子是 for 循环,适用于明确知道循环次数的场景。

代码示例 - 计算等差数列的和 ✏️

  • 当你不可以直接使用求和公式时,可以使用循环。
  • 代码问题:
    • 大量重复代码,如1 + 2 + 3 + ... + 6,若要加到100代码量会激增。
    • 可读性差,易于出错。
  • 解决方案:使用循环控制语句优化代码。

for 循环语法结构 🔄

for (表达式1; 表达式2; 表达式3) {
    语句;
}
  • 表达式1:循环初始条件
  • 表达式2:循环控制条件
  • 表达式3:循环转化条件
  • 循环体内的语句是被重复执行的内容。

💡 三个表达式之间必须使用分号分隔,初学者容易犯错。

代码改进 - 6个输入数据的求和 💻

使用 for 循环可以将6改为更大的数字,减少代码重复。必须确保在循环开始前对累加变量进行初始化。

无限循环 🌀

  • 如果循环条件始终为真,则会造成无限循环
  • 例如:当变量未及时更新或更新方向错误时,可能会导致循环无法终止。

二、条件控制的循环 (while, do-while) 🔁

条件控制循环的概念

  • while 循环do-while 循环 是通过判断某个条件的真假来决定是否继续执行循环体的。
    • while 循环:先判断条件再执行循环。
    • do-while 循环:至少执行一次,然后再判断条件。

示例 - 猴子吃桃问题 🍑

  • 猴子第一天摘了一些桃子,吃了一半又多吃了一个,第二天早上又重复吃掉一半加一个,以此类推,第十天发现只剩下一个桃子。
  • 问:第一天摘了多少桃子?

代码实现

while 形式

int x = 1, d = 1;
while (d < 10) {
    x = (x + 1) * 2;
    d++;
}

do-while 形式

int x = 1, d = 1;
do {
    x = (x + 1) * 2;
    d++;
} while (d < 10);

💡 区别do-while至少执行一次循环,而 while 在初始条件不满足时一次都不会执行。


三、标记控制的循环 🏳️

标记控制循环通过一个标志变量(如布尔型变量)来控制循环的继续或中断。常见的例子是 whiledo-while 循环,适用于不确定循环次数的场景,如用户输入直到满足某个条件。

示例 - 累加用户输入直到用户输入0 💡

do-while 循环

int sum = 0, m;
do {
    printf("Input m: ");
    scanf("%d", &m);
    sum += m;
    printf("sum = %d\n", sum);
} while (m != 0);

💡 特点:最少要读取一次用户输入。

猜数游戏 🎲

  1. 计算机生成一个随机数,范围为1到100。
  2. 用户进行猜测,输入一个数字。
  3. 计算机给出反馈
    • 若猜的数字太大,提示“太大了”;
    • 若猜的数字太小,提示“太小了”;
    • 猜对则提示“恭喜你,猜对了!”
  4. 重复步骤,直到猜对为止,游戏结束。

代码实现

int magic, guess, counter = 0;
magic = rand() % 100 + 1;
do {
    printf("Please guess a magic number: ");
    scanf("%d", &guess);
    counter++;
    if (guess > magic) printf("Wrong! Too big!\n");
    else if (guess < magic) printf("Wrong! Too small!\n");
    else printf("Right!\n");
} while (guess != magic);

四、嵌套循环 ⛓️

嵌套循环是指一个循环嵌套在另一个循环内,常用于多层次迭代问题,例如二维数组的遍历或打印乘法表。

示例 - 打印乘法表 ✖️

代码实现

int m, n;
for (m = 1; m <= 9; m++) {
    for (n = 1; n <= 9; n++) {
        printf("%4d", m * n);
    }
    printf("\n");
}
  • 思路:由内到外,先考虑每行的输出,再考虑如何打印多行。

五、流程的控制转移 ⤴️

示例 - 韩信点兵问题 👮‍♂️

  • 描述:韩信有一队兵,按从1到5、6、7、11报数,分别得到特定的数。通过穷举法,可以找出至少有多少兵。
  • 代码实现
    int x;
    for (x = 1; x < 5000; x++) {
      if (x % 5 == 1 && x % 6 == 5 && x % 7 == 4 && x % 11 == 10) {
          printf("x = %d\n", x);
      }
    }
    

六、gotocontinue 语句 🔄

goto 语句 🛑

goto 语句用于将程序跳转到指定标签位置。这种方式可能会使代码难以阅读和维护,因此不建议频繁使用。

代码示例 - 使用 goto 跳转到标签

#include <stdio.h>
int main() {
    int i = 0;

    loop:
    if (i < 5) {
        printf("i = %d\n", i);
        i++;
        goto loop; // 跳转到标签 loop
    }

    return 0;
}

💡 注意:频繁使用 goto 可能会导致“面条式代码”,难以维护。

continue 语句 ➰

continue 语句用于跳过当前循环的剩余部分,直接进入下一次循环的判断和执行。

代码示例 - 使用 continue 语句

#include <stdio.h>
int main() {
    for (int i = 0; i < 10; i++) {
        if (i % 2 == 0) {
            continue; // 如果 i 是偶数,则跳过本次循环
        }
        printf("i = %d\n", i);
    }
    return 0;
}

💡 continue 常用于跳过某些特定条件下的循环内容,而不终止整个循环。


总结 🌟

  • 计数控制循环:适用于已知循环次数的场景,使用 for
  • 条件控制循环:适用于未知循环次数,由条件决定,使用 whiledo-while
  • 标记控制循环:使用标志位控制,适用于条件动态判断的场景。
  • 嵌套循环:一个循环内部包含另一个循环,适用于多层次数据的遍历。
  • 流程控制转移goto 用于程序跳转,但应谨慎使用;continue 用于跳过当前循环中的剩余部分。

🎯 在编程中灵活运用这些循环语句和控制语句,能有效提高代码的可读性和运行效率。

...全文
156 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

27,506

社区成员

发帖
与我相关
我的任务
社区描述
记录每一天的学习进展,分享心得与成长。通过每日学习打卡,帮助成员养成良好的学习习惯,提升个人成长。社区内互相鼓励、文明互动,并通过打卡积分和排行榜激励每个人坚持不懈地追求进步!
学习考研生活 个人社区 广东省·广州市
社区管理员
  • 小ᶻ☡꙳ᵃⁱᵍᶜ꙳
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

✨每日学习打卡社区公告📚

亲爱的社区成员们:

欢迎加入每日学习打卡社区!在这里,我们一起坚持学习、共同进步。这个社区是一个为大家提供打卡学习、互动分享的平台,致力于帮助每一位成员养成良好的学习习惯,提升个人成长🚀。

1. 核心使命🎯

我们的社区使命是通过每日学习打卡📅,激励大家坚持学习📖,实现知识积累的飞跃。无论是英语、数学、专业课程还是学术论文📊,社区提供丰富的学习内容版块,满足大家的多样化学习需求。每一次打卡,都是离目标更近的一步💪!

2. 注意事项⚠️

  • 每日打卡:在学习打卡、英语学习、数学学习等专属频道坚持打卡📅,分享你的学习成果和心得📝。
  • 内容规范:发布内容需选择相应的分类📂,确保主题清晰,利于大家查找交流🔍。
  • 文明互动:在分享和讨论时,请保持积极向上的态度😊,互相尊重🤝,营造良好的学习氛围🌱。

3. 社区激励机制🎁

  • 打卡奖励:坚持打卡的用户将累计学习积分🏆,积分可用于兑换荣誉称号🎖️。
  • 排行榜:每周更新学习排行榜📈,排名靠前的用户可获得社区特别奖励🎉,激励大家保持学习动力💥。
  • 优质分享奖:定期评选优质学习心得💡,分享个人独到经验的成员有机会赢取特别奖励🎊。

期待每一位成员在这里找到学习的乐趣🌟,坚持不懈,迈向更好的自己💼!

试试用AI创作助手写篇文章吧