当前位置: 首页 > article >正文

9. C 语言 循环控制结构详解

本章目录:

    • 前言
    • 1. C 语言中的循环结构
      • 1.1 `while` 循环
        • 基本语法:
        • 示例:求 1 到 100 的奇数和
      • 1.2 `for` 循环
        • 基本语法:
        • 示例:求 1 到 100 的偶数和
      • 1.3 `do...while` 循环
        • 基本语法:
        • 示例:用 `do...while` 求平方根
      • 1.4 无限循环
    • 2. 循环控制语句
      • 2.1 `break` 语句
        • 示例:使用 `break` 提前退出循环
      • 2.2 `continue` 语句
        • 示例:使用 `continue` 输出 100 到 200 之间不能被 3 整除的数字
      • 2.3 `goto` 语句
        • 示例:使用 `goto` 跳转
    • 3. 总结


前言

在 C 语言中,循环是一种非常重要的控制结构,它允许程序员重复执行一段代码,直到满足某个条件。使用循环,我们可以避免编写大量重复的代码,使程序更加简洁、高效。本文将详细介绍 C 语言中的三种主要循环结构:while 循环、for 循环、do...while 循环,并结合具体实例,帮助你理解它们的使用方式、特点和实际应用场景。


1. C 语言中的循环结构

1.1 while 循环

while 循环是最基本的循环结构,它首先检查循环条件,如果条件为真,则执行循环体内的代码,并在每次执行完后再次检查条件。如果条件为假,循环终止。

基本语法:
while (条件) {
    // 循环体
}
示例:求 1 到 100 的奇数和
#include <stdio.h>

int main() {
    int sum = 0;
    int num = 1; // 从 1 开始

    while (num <= 100) {
        sum += num;
        num += 2;  // 每次增加 2,得到下一个奇数
    }
    
    printf("1 到 100 的奇数和为: %d\n", sum);
    return 0;
}

在这个例子中,while 循环从 1 开始,每次加 2,直到达到 100 为止。每次加的数字是奇数,所以最终计算的是奇数的和。

1.2 for 循环

for 循环是一种更加简洁和常见的循环结构。它通常用于已知循环次数的场景。for 循环在一行内定义了初始化、循环条件、以及循环体内的更新步骤,简化了代码的管理。

基本语法:
for (初始化; 条件; 更新) {
    // 循环体
}
示例:求 1 到 100 的偶数和
#include <stdio.h>

int main() {
    int sum = 0;

    for (int num = 2; num <= 100; num += 2) {
        sum += num;
    }
    
    printf("1 到 100 的偶数和为: %d\n", sum);
    return 0;
}

在这个例子中,for 循环从 2 开始,每次加 2,直到 100。这个循环简洁地计算了 1 到 100 之间偶数的和。

1.3 do...while 循环

do...while 循环与 while 循环的主要区别在于它首先执行循环体,然后再检查条件。这意味着无论条件是否为真,循环体至少会执行一次。

基本语法:
do {
    // 循环体
} while (条件);
示例:用 do...while 求平方根
#include <stdio.h>

double DoSqrt(double z) {
    double a = 1, b = 0, c = 0;

    do {
        if (b * b < z) {
            b += a;
        } else {
            c = b;
            b -= a;
            a /= 10;
        }
    } while (a > 0.000001);  // 继续直到精度满足要求

    return (b + c) / 2;
}

int main() {
    double x, y;
    printf("请输入一个数字:");
    scanf("%lf", &x);

    if (x < 0) {
        printf("输入错误。\n");
    } else {
        y = DoSqrt(x);
        printf("%g 的平方根为: %g.\n", x, y);
    }

    return 0;
}

在这个例子中,do...while 循环用于计算数字的平方根。由于我们至少需要执行一次平方根的计算,所以使用了 do...while 循环。

1.4 无限循环

有时,我们希望循环永不停止,直到手动中断。一个典型的无限循环就是没有条件的 for 循环:

for(;;) {
    // 无限执行的代码
}

例如:

#include <stdio.h>

int main() {
    for(;;) {
        printf("该循环会永远执行下去!\n");
    }
    return 0;
}

当条件为空时,for 循环会默认条件为真,因此会无限执行,直到我们通过外部操作(如按 Ctrl + C)中断程序。

2. 循环控制语句

除了常规的循环结构,C 语言还提供了一些控制语句,允许我们在循环中更灵活地控制执行流:

2.1 break 语句

break 语句用于立即终止循环(或 switch 语句)。当程序执行到 break 语句时,循环会停止,并且程序会继续执行循环之后的代码。

示例:使用 break 提前退出循环
#include <stdio.h>

int main() {
    for (int i = 1; i <= 10; i++) {
        if (i == 5) {
            break;  // 当 i 等于 5 时,退出循环
        }
        printf("%d ", i);
    }
    return 0;
}

在这个例子中,循环会输出 1 2 3 4,因为当 i 等于 5 时,break 语句会终止循环。

2.2 continue 语句

continue 语句用于跳过当前循环的剩余部分,并直接开始下一次循环。当程序遇到 continue 语句时,它会停止当前迭代,立即进入下一次循环的判断阶段。

示例:使用 continue 输出 100 到 200 之间不能被 3 整除的数字
#include <stdio.h>

int main() {
    for (int n = 100; n <= 200; n++) {
        if (n % 3 == 0) {
            continue;  // 如果 n 能被 3 整除,跳过当前循环
        }
        printf("%d ", n);
    }
    return 0;
}

此程序会输出 100 到 200 之间所有不能被 3 整除的数字。每次 n % 3 == 0 时,continue 会跳过当前循环,继续检查下一个数字。

2.3 goto 语句

goto 语句可以将程序控制流跳转到标记的位置。虽然它在某些特定场景下可能有用,但它的使用会使得程序的结构混乱,因此不推荐在大多数情况下使用 goto 语句。

示例:使用 goto 跳转
#include <stdio.h>

int main() {
    int num = 0;
    start:  // 标签
    printf("请输入一个正数:");
    scanf("%d", &num);
    if (num <= 0) {
        printf("输入无效,请重新输入。\n");
        goto start;  // 如果输入无效,跳转到 start 标签
    }
    printf("您输入的正数是: %d\n", num);
    return 0;
}

在这个例子中,goto 用于实现一种简单的输入验证机制。虽然可以工作,但这种方式不如 while 循环更简洁和清晰。


3. 总结

循环结构是 C 语言中的基础且强大的控制结构,它使得我们能够有效地执行重复的任务。掌握 whilefordo...while 循环的使用,可以使你更高效地处理各种问题。除了基本的循环结构外,循环控制语句如 breakcontinuegoto 提供了更灵活的执行方式,但它们需要谨慎使用,以保持代码的清晰和可维护性。

  • while 循环适用于事先不知道循环次数的场景;
  • for 循环适用于已知循环次数或需要特定步骤增量的场景;
  • do...while 循环确保至少执行一次循环体。

了解并掌握这些循环结构的应用,能够让你写出更加高效和优雅的 C 语言程序。



http://www.kler.cn/a/471359.html

相关文章:

  • 【问题】配置 Conda 与 Pip 源
  • 51单片机——中断(重点)
  • 分享3个国内使用正版GPT的网站【亲测有效!2025最新】
  • 毕业项目推荐:基于yolov8/yolov5/yolo11的动物检测识别系统(python+卷积神经网络)
  • PySide6的样式表
  • 标准IO
  • Flutter 鸿蒙化 flutter和鸿蒙next混和渲染
  • 图漾相机基础操作
  • 更换WordPress主题的基础知识及注意事项
  • B-tree 数据结构详解
  • STM32 I2C硬件配置库函数
  • pytorch torch.isclose函数介绍
  • 基于单片机的室外休闲智能座椅设计(论文+源码)
  • 设计模式 行为型 策略模式(Strategy Pattern)与 常见技术框架应用 解析
  • 数据库课设——网上花店销售管理系统(上)
  • Jina AI/Reader:将 URL 和 PDF 内容自动化提取并转换为 LLM 可处理文本
  • 创建型模式5.单例模式
  • 【Linux】文件的压缩与解压
  • 利用Python爬虫获取API接口:探索数据的力量
  • Jenkins pipeline 发送邮件及包含附件
  • 【杂谈】-DeepSeek如何以560万美元突破成本障碍
  • Arduino IDE刷微控制器并下载对应固件的原由
  • SpringCloud系列教程:微服务的未来(六)docker教程快速入门、常用命令
  • thinnkphp5.1和 thinkphp6以及nginx,apache 解决跨域问题
  • Gary Marcus 预测2025年AI发展的25项展望:深刻反思与前瞻
  • 青少年编程与数学 02-006 前端开发框架VUE 09课题、计算属性