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

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.mrgr.cn/news/82928.html

相关文章:

  • spring boot 多数据源集成mysql、postgresql、phoenix、doris等
  • k8s基础(4)—Kubernetes-Service
  • Leetcode 3409. Longest Subsequence With Decreasing Adjacent Difference
  • 跨年烟花C++代码
  • 爬取猫眼电影Top 100榜单:从入门到实战
  • 【C语言程序设计——入门】C语言入门与基础语法(头歌实践教学平台习题)【合集】
  • 数据传送类指令
  • 【Linux】上传、下载、压缩、解压
  • Python 模拟登录网页,或者编写爬虫时模拟登录的详细总结
  • 【Rust自学】10.7. 生命周期 Pt.3:输入输出生命周期与3规则
  • 30天开发操作系统 第 12 天 -- 定时器
  • Java虚拟机面试题:JVM调优
  • [创业之路-241]:《从偶然到必然-华为研发投资与管理实践》-2- IPD流程中的业务线、技术线、职能支撑线
  • Web渗透测试之XSS跨站脚本 原理 出现的原因 出现的位置 测试的方法 危害 防御手段 面试题 一篇文章给你说的明明白白
  • Effective C++读书笔记——item11(自赋值)
  • 来说数据库
  • C++ Qt练习项目 QChar功能测试
  • 尚硅谷· vue3+ts 知识点学习整理 |14h的课程(持续更ing)
  • aardio —— 虚表 —— 模拟属性框
  • 安卓OCR使用(Google ML Kit)
  • 【华为OD机试E卷C卷D卷】跳马【C++/Java/Python】
  • Python应用指南:高德交通态势数据(一)
  • java 核心知识点——基础知识
  • 群论学习笔记
  • 关于大一上的总结
  • 【Linux】sed编辑器