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.rhkb.cn/news/503427.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

touch详讲

&#x1f3dd;️专栏&#xff1a;https://blog.csdn.net/2301_81831423/category_12872319.html &#x1f305;主页&#xff1a;猫咪-9527-CSDN博客 “欲穷千里目&#xff0c;更上一层楼。会当凌绝顶&#xff0c;一览众山小。” 目录 基本语法 主要功能 常用选项详解 1. …

【开源免费】基于Vue和SpringBoot的贸易行业crm系统(附论文)

本文项目编号 T 153 &#xff0c;文末自助获取源码 \color{red}{T153&#xff0c;文末自助获取源码} T153&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

仓库叉车高科技安全辅助设备——AI防碰撞系统N2024G-2

在当今这个高效运作、安全第一的物流时代&#xff0c;仓库作为供应链的中心地带&#xff0c;其安全与效率直接关系到企业的命脉。 随着科技的飞速发展&#xff0c;传统叉车作业模式正逐步向智能化、安全化转型&#xff0c;而在这场技术革新中&#xff0c;AI防碰撞系统N2024G-2…

如何打开/处理大型dat文件?二进制格式.dat文件如何打开?Python读取.dat文件

背景&#xff1a; 希望查看C语言输出的二进制DAT文件&#xff0c;写入方式如下&#xff08;如果是视频或游戏&#xff0c;未必能使用这种方式打开&#xff0c;关键是需要知道数据的格式&#xff09; # 写入二进制的C语言fp fopen(str, "wb");for (int i 0; i < …

面向对象分析与设计Python版 活动图与类图

文章目录 一、活动图二、类图 一、活动图 活动图 活动图用于描述业务流程、工作流程或算法中的控制流。活动图强调的是流程中的各个步骤的先后顺序&#xff0c;它可以帮助系统分析师、设计师和程序员更好地理解系统的动态行为。 活动图与用例模型互为补充&#xff0c;主要用于…

51单片机——步进电机模块

直流电机没有正负之分&#xff0c;在两端加上直流电就能工作 P1.0-P1.3都可以控制电机&#xff0c;例如&#xff1a;使用P1.0&#xff0c;则需要把线接在J47的1&#xff08;VCC&#xff09;和2&#xff08;OUT1&#xff09;上 1、直流电机实验 要实现的功能是&#xff1a;直…

2024AAAI SCTNet论文阅读笔记

文章目录 SCTNet: Single-Branch CNN with Transformer Semantic Information for Real-Time Segmentation摘要背景创新点方法Conv-Former Block卷积注意力机制前馈网络FFN 语义信息对齐模块主干特征对齐共享解码头对齐 总体架构backbone解码器头 对齐损失 实验SOTA效果对比Cit…

数字IC设计高频面试题

在数字IC设计领域&#xff0c;面试是评估候选人技术能力和问题解决能力的重要环节。数字IC设计的复杂性和要求在不断提高。面试官通常会提出一系列面试题&#xff0c;以考察应聘者在数字设计、验证、时钟管理、功耗优化等方面的专业知识和实践经验。 这些题目不仅涉及理论知识…

Functions

1.trigonometric function 定义和图像 反三角函数是三角函数的反函数 versin(verse -sin)&#xff1a;1/sinx 性质 三角函数的公式 三角恒等式 周期性公式&#xff1a;直接画图记 公式记忆&#xff1a;先想象一个在第一象限的锐角 1&#xff1a;在坐标轴中旋转360 2.sin&am…

1/7 C++

练习&#xff1a;要求在堆区连续申请5个int的大小空间用于存储5名学生的成绩&#xff0c;分别完成空间的申请、成绩的录入、升序排序、成绩输出函数&#xff0c;并在主程序中完成测试 要求使用new #include <iostream>using namespace std; double *addr_new() {double …

[文献精汇]使用PyCaret预测 Apple 股价

介绍 开发一个机器学习模型来尝试通过线性回归分析来预测 Apple 股票的价格会很有趣。PyCaret 的库&#xff0c;这是一个开源的 Python 低代码机器学习库&#xff0c;可以自动化机器学习工作流程&#xff0c;非常适合像我这样的机器学习初学者。 线性回归分析 线性回归分析用…

【51单片机】02LED流水灯实验

点亮你的LED 一、点亮第一个LED1.GPIO介绍2.P1、P2、P3端口 二、LED实验2.尝试点亮LED3.LED流水灯 一、点亮第一个LED 1.GPIO介绍 这块内容这里可以做简单的了解&#xff0c;与数电知识强相关。后续可以再回过头来学习 GPIO (general purpose input output) 通用输入输出端口…

「Mac畅玩鸿蒙与硬件53」UI互动应用篇30 - 打卡提醒小应用

本篇教程将实现一个打卡提醒小应用&#xff0c;通过用户输入时间进行提醒设置&#xff0c;并展示实时提醒状态&#xff0c;实现提醒设置和取消等功能。 关键词 打卡提醒状态管理定时任务输入校验UI交互 一、功能说明 打卡提醒小应用包含以下功能&#xff1a; 提醒时间输入与…

Python递归(汉诺塔问题)

递归分析 递归&#xff1a;通过自我调用来解决问题的函数 递归通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。 递归要注意&#xff1a; 1.递归出口 2.当前问题如何变成子问题 利用递归写一个阶乘函数&#xff0c;F(n)&#xff0c;求n的阶乘…

VS2022 C#创建Com组件和调用

生成一个类库项目 这里创建了一个.net 4.8的项目&#xff0c;添加了一个ComAIFaceTest类 如下图&#xff1a; ComAIFaceTest代码如下&#xff1a; [ComVisible(true)][Guid("12345678-ABCD-1234-EF00-0123456789AB")][ClassInterface(ClassInterfaceType.AutoDual)…

【GOOD】A Survey of Deep Graph Learning under Distribution Shifts

深度图学习在分布偏移下的综述&#xff1a;从图的分布外泛化到自适应 Northwestern University, USA Repository Abstract 图上的分布变化——训练和使用图机器学习模型之间的数据分布差异——在现实世界中普遍存在&#xff0c;并且通常不可避免。这些变化可能会严重恶化模…

ARM发布Armv9.5架构:迈向更强性能与灵活性的新时代

2024年11月30日&#xff0c;ARM正式发布了其最新的Armv9.5架构&#xff0c;这是Arm技术发展的又一重要里程碑。从表中信息来看&#xff0c;Armv9.5架构的发布标志着该公司的架构系列在性能、灵活性和可扩展性方面取得了进一步突破。本次发布不仅是技术上的提升&#xff0c;更是…

RAFT:随机退火森林

RAFT:随机退火森林 RAFT(Randomized Annealed Forests)是一种机器学习算法,主要用于分类和回归任务。以下是对它的介绍及原理举例说明: 一、RAFT简介 RAFT是一种基于随机森林的集成学习方法,它结合了随机森林的优点和退火算法的思想。随机森林通过构建多个决策树并综…

“AI智慧语言训练系统:让语言学习变得更简单有趣

大家好&#xff0c;我是你们的老朋友&#xff0c;一个热衷于探讨科技与教育结合的产品经理。今天&#xff0c;我想和大家聊聊一个让语言学习变得不再头疼的话题——AI智慧语言训练系统。这个系统可是我们语言学习者的福音&#xff0c;让我们一起来揭开它的神秘面纱吧&#xff0…