C语言:循环结构

循环结构

  • 1. for循环
    • 概念
    • 举例
      • 示例
      • 结果
      • 分析
    • 补充
  • 2. while循环
    • 概念
    • 举例
      • 示例
      • 结果
      • 分析
      • 补充
  • 3. do-while循环
    • 概念
    • 举例
      • 示例
      • 结果
      • 分析
    • 补充
  • 4.循环控制
    • 举例
      • 示例
      • 结果
      • 分析

C语言中的循环结构是一种重要的编程构造,它允许我们重复执行一段代码,直到满足某个条件为止。在C语言中,主要有三种循环结构: for循环、 while循环和 do-while循环。

1. for循环

概念

for循环是C语言中最常用和最灵活的循环结构之一。它允许你重复执行一段代码,直到指定的条件不再满足为止。for循环的语法如下:

for (初始化表达式; 循环条件; 步进表达式) {
    // 循环体
}

for循环的执行过程可以分为以下几个步骤:

  1. 初始化表达式:在循环开始前执行一次,通常用于初始化循环控制变量。例如,int i = 0;
  2. 循环条件:在每次循环开始前评估,如果条件为真(非零),则执行循环体。如果条件为假(零),则循环结束,继续执行循环后面的代码。例如,i < 10;
  3. 循环体:循环条件为真时执行的代码块。这是你希望重复执行的代码
  4. 步进表达式:在每次循环体执行后执行,通常用于更新循环控制变量。例如,i++;

举例

示例

#include <stdio.h>
int main() {
    for (int i = 1; i <= 10; i++) {
        printf("%d\n", i);
    }
    return 0;
}

结果

在这里插入图片描述

分析

在这个例子中,for循环的初始化表达式是int i = 1;,它设置循环控制变量i的初始值为1。循环条件是i <= 10;,这意味着只要i的值小于或等于10,循环就会继续执行。步进表达式是i++,它在每次循环结束时将i的值增加1。

补充

for循环的三个部分(初始化表达式、循环条件和步进表达式)都是可选的,你可以根据需要省略其中的一个或多个。例如,如果你已经在循环外初始化了循环控制变量,你可以省略初始化表达式;如果你在循环体内部更新循环控制变量,你可以省略步进表达式。但是,分号是必须的,即使你省略了所有的表达式。
此外,for循环也可以用于创建无限循环,只需省略循环条件和步进表达式,并确保初始化表达式不会导致循环终止。例如:

for (;;) {
    // 无限循环的循环体
}

2. while循环

概念

while循环是C语言中的一种基本循环控制结构,它重复执行一段代码,直到指定的条件不再满足为止。while循环的语法如下:

while (循环条件) {
    // 循环体
}

while循环的执行过程可以分为以下几个步骤:

  1. 循环条件评估:在每次循环开始前评估循环条件,如果条件为真(非零),则执行循环体。如果条件为假(零),则循环结束,继续执行循环后面的代码。
  2. 循环体执行:如果循环条件为真,则执行循环体中的代码。这是你希望重复执行的代码。

举例

示例

#include <stdio.h>
int main() {
    int i = 1; // 初始化循环控制变量
    while (i <= 10) { // 循环条件
        printf("%d\n", i); // 循环体
        i++; // 更新循环控制变量
    }
    return 0;
}

结果

在这里插入图片描述

分析

在这个例子中,循环控制变量i在循环外初始化为1。循环条件是i <= 10,这意味着只要i的值小于或等于10,循环就会继续执行。循环体中打印当前i的值,并在循环体的最后将i的值增加1。

补充

while循环的特点是它可以在不知道具体循环次数的情况下使用,因为它在每次循环开始前都会评估条件。这使得while循环非常适合于那些需要根据某些外部条件来决定循环次数的情况。
for循环不同,while循环没有内置的初始化表达式和步进表达式,因此这些操作通常需要在循环外部或循环体内部显式地进行。
此外,while循环也可以用于创建无限循环,只需将循环条件设置为始终为真即可。例如:

while (1) {
    // 无限循环的循环体
}

3. do-while循环

概念

do-while循环是C语言中的一种循环控制结构,它至少执行一次循环体,然后根据循环条件决定是否继续执行。do-while循环的语法如下:

do {
    // 循环体
} while (循环条件);

do-while循环的执行过程可以分为以下几个步骤:

  1. 执行循环体:首先执行循环体中的代码,无论循环条件是否为真。
  2. 循环条件评估:在循环体执行完毕后,评估循环条件。如果条件为真(非零),则再次执行循环体。如果条件为假(零),则循环结束,继续执行循环后面的代码。

举例

示例

#include <stdio.h>
int main() {
    int i = 1; // 初始化循环控制变量
    do {
        printf("%d\n", i); // 循环体
        i++; // 更新循环控制变量
    } while (i <= 10); // 循环条件
    return 0;
}

结果

在这里插入图片描述

分析

在这个例子中,循环控制变量i在循环外初始化为1。循环体首先执行一次,打印当前i的值,然后将i的值增加1。之后,循环条件i <= 10被评估,如果为真,则循环体再次执行。这个过程一直重复,直到i的值增加到11,使得循环条件变为假,循环结束。

补充

do-while循环的主要特点是它确保循环体至少执行一次,这是它与while循环的主要区别。while循环在循环开始前评估条件,如果条件一开始就为假,那么循环体一次也不会执行。而do-while循环先执行循环体,然后再评估条件,因此即使条件一开始就为假,循环体也会执行一次。
do-while循环在实际编程中不如for循环和while循环常用,但它适用于那些需要先执行操作再检查条件的情况,例如用户输入验证或某些初始化任务。
for循环和while循环一样,do-while循环也可以用于创建无限循环,只需将循环条件设置为始终为真即可。例如:

do {
    // 无限循环的循环体
} while (1);

在实际编程中,选择哪种循环结构取决于具体的应用场景和个人偏好。

4.循环控制

在循环结构中,我们还可以使用breakcontinue语句来控制循环的执行:

  • break语句用于立即退出当前循环,无论循环条件是否为真。
  • continue语句用于跳过当前循环的剩余部分,直接进入下一次循环的条件判断。

举例

示例

#include <stdio.h>
int main() {
    int numbers[] = {1, 3, 5, 7, 8, 9, 10};
    int length = sizeof(numbers) / sizeof(numbers[0]);
    int i;
    int position = -1; // 初始化为-1,表示未找到偶数
    for (i = 0; i < length; i++) {
        if (numbers[i] % 2 == 0) { // 检查当前元素是否为偶数
            position = i; // 保存偶数的位置
            break; // 找到偶数后退出循环
        } else {
            continue; // 如果是奇数,跳过剩余的代码,进行下一次迭代
        }
        // 注意:由于continue语句的存在,这里的代码在遇到奇数时不会被执行
        printf("不会输出奇数\n");
    }
    if (position != -1) {
        printf("第一个偶数位于: %d\n", position);
    } else {
        printf("没有偶数\n");
    }
    return 0;
}

结果

在这里插入图片描述

分析

在这个例子中,数组numbers包含了一系列整数。我们使用一个for循环来遍历数组。如果当前元素是偶数(numbers[i] % 2 == 0),我们保存它的位置并使用break语句退出循环。如果当前元素是奇数,我们使用continue语句跳过循环体的剩余部分,直接进入下一次循环迭代。
注意,在continue语句之后的循环体代码(printf语句)在遇到奇数时不会被执行,因为continue会立即跳转到循环的下一个迭代。

输出是4是因为第一个偶数8在数组中的位置是4(从0开始计数)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/588777.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Hive优化以及相关参数设置

1.表层面设计优化 1.1 表分区 分区表实际上就是对应一个 HDFS 文件系统上的独立的文件夹&#xff0c;该文件夹下是该分区所有的数据文件。Hive 中的分区就是分目录&#xff0c;把一个大的数据集根据业务需要分割成小的数据集。在查询时通过 WHERE 子句中的表达式选择查询所需要…

Angular基础-搭建Angular运行环境

这篇文章介绍了在Angular项目中进行开发环境搭建的关键步骤。包括node.js安装和配置、安装Angular CLI工具、安装angular-router、创建Angular项目等步骤。这篇文章为读者提供了清晰的指南&#xff0c;帮助他们快速搭建Angular开发环境&#xff0c;为后续的项目开发奠定基础。 …

Python中动画显示与gif生成

1. 动画生成 主要使用的是 matplotlib.animation &#xff0c;具体示例如下&#xff1a; import matplotlib.pyplot as plt import matplotlib.animation as animation import numpy as np fig, ax plt.subplots() t np.linspace(0, 3, 40) g -9.81 v0 12 z g * t**2 / …

【项目学习01_2024.05.02_Day04】

学习笔记 4 课程分类查询4.1需求分析4.2 接口定义4.3 接口开发4.3.1 树型表查询4.3.2 开发Mapper 4 课程分类查询 4.1需求分析 有课程分类的需求 course_category课程分类表的结构 这张表是一个树型结构&#xff0c;通过父结点id将各元素组成一个树。 利用mybatis-plus-gen…

第十五届蓝桥杯Java软件开发大学B组自我经验小结

自我介绍 23届大一 双非 计院科班 软件工程 江苏人在吉林上大学 Java蒟蒻 在学校的宣传下 有幸参加了第十五届蓝桥杯Java大学b组省赛 蓝桥杯说明 就是一个算法比赛吧 考试时间9.00到1.00 四小时 带准考证和身份证和笔 草稿纸会发 赛制是IOC就是不会给任何反馈 就是你…

IDEA 创建Servlet-HelloWorldServlet

servlet 1.创建空项目2.配置web项目3.配置Tomcat4.加载Tomcat包5.创建HelloWorldServlet类6.配置web.xml7.运行get与post请求 1.创建空项目 2.配置web项目 3.配置Tomcat 4.加载Tomcat包 5.创建HelloWorldServlet类 public class controller extends HttpServlet {Override//get…

java入门-包装类

包装类 Java语言是一个面向对象的语言&#xff0c;但是Java中的基本数据类型却是不面向对象的。基本类型的数据不具备"对象"的特性&#xff08;没有属性和方法可以调用&#xff09;&#xff0c;因此&#xff0c;java为每种数据类型分别设计了对应的类&#xff0c;即*…

《与 Apollo 共创生态——Apollo7周年大会干货分享》

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” 文章目录 阿波罗X企业自动驾驶解决方案自动驾驶技术提升与挑战自动驾驶系统功能与性能的详细解析<td alig…

在智慧城市的建设中智能车载监控录像机发挥什么作用

引言 随着科技的快速发展&#xff0c;智慧城市的概念逐渐深入人心。在智慧城市的建设中&#xff0c;智能车载监控录像机作为一种重要的技术工具&#xff0c;发挥着越来越重要的作用。本文将从多个方面探讨智能车载监控录像机在智慧城市建设中的作用。 一、智能车载监控录像机概…

纯血鸿蒙APP实战开发——主页瀑布流实现

介绍 本示例介绍使用ArkUIWaterFlow组件和LazyForEach实现瀑布流场景。该场景多用于购物、资讯类应用。 效果图预览 使用说明 加载完成后显示整个列表&#xff0c;超过一屏时可以上下滑动。 实现思路 创建WaterFlowDataSource类&#xff0c;实现IDataSource接口的对象&…

C语言/数据结构——每日一题(链表的中间节点)

一.前言 今天我在LeetCode刷到了一道单链表题&#xff0c;想着和大家分享一下这道题&#xff1a;https://leetcode.cn/problems/middle-of-the-linked-list。废话不多说让我们开始今天的知识分享吧。 二.正文 1.1题目描述 1.2题目分析 这道题有一个非常简便的方法——快慢指…

Vue+Element UI el-progress进度条内显示自定义数字及文字

需求 进度条内展示 具体的数字值&#xff0c;进度条外展示 百分比数值 数据 data() {return {reNum: 3214,rePer:40,warmPer: 40,warmNum:2132,}}因为样式要求&#xff0c;显示的百分数也是自己写的哈 &#xff0c;没有用进度条自带的 代码 <div class"pick"&g…

2024五一杯数学建模A题思路分析-钢板最优切割路径问题

文章目录 1 赛题选题分析 2 解题思路3 最新思路更新 1 赛题 A题 钢板最优切割路径问题 提高钢板下料切割过程中的工作效率&#xff0c;是模具加工企业降低成本和增加经济效益的重要途径&#xff0c;其中钢板切割的路径规划是钢板切割过程的一个关键环节。 钢板切割就是使用特殊…

【C++】哈希的应用---布隆过滤器

目录 1、引入 2、布隆过滤器概念 3、选择哈希函数个数和布隆过滤器长度 4、布隆过滤器的实现 ①框架的搭建 ②设置存在 ③检查存在 ④不支持 reset 5、布隆过滤器计算误差 6、布隆过滤器的优缺点 ①布隆过滤器优点 ②布隆过滤器缺陷 7、布隆过滤器的实际应用 8、完…

KUKA机器人KR3 R540维护保养——涂润滑脂

KUKA机器人在保养时少不了润滑脂&#xff0c;不同型号的机器人需要的润滑脂类型也不一样&#xff0c;保养时注意选用合适的润滑脂。本篇文章以KUKA机器人KR3 R540为例&#xff0c;在轴盖板 A2、A3、A5 的内侧涂上润滑脂。 一、涂润滑脂的作用 拆开机器人一个轴的盖板&am…

Android Kernel源码下载方法

Android Kernel的源码是git管理的&#xff0c;和之前下载的Android源码管理方式不一样&#xff0c;所以下载方式也不一样&#xff0c;直接用git下载就可以了&#xff1b;去网上搜的下载方式五花八门&#xff0c;有很多问题&#xff0c;因为服务器经常无法访问&#xff0c;也一直…

质谱原理与仪器3-笔记

质谱原理与仪器3-笔记 一、质量分析器类型1、聚焦磁场分析器&#xff1a;A、单聚焦磁场分析器B、双聚焦磁场分析器 2、四极杆质量分析器3、飞行时间质谱仪(Time of Flight MS, TOF-MS)4、离子阱质量分析器 二、质谱仪的主要性能指标1、质量范围(mass range)2、分辨率(resolutio…

C语言编译的优化等级应该选哪个?O0、O1、O2还是O3

在使用IDE开发STM32程序时&#xff0c;IDE一般都会提供优化等级设置的选项&#xff0c;例如下图中KEIL软件优化等级的设置。 从上图中也可以看出&#xff0c;设置不同的优化等级&#xff0c;实际上是修改了编译器的编译参数。这个编译器是由ARM公司提供的C/C编译器armclang或者…

家里挂宗教画是否合适?

凡在我们这改名取名的客户&#xff0c;峰民都会建议他们挂一副这样或那样的画&#xff0c;这也是根据你命中的五行来给你助运的。而现在许多人都有自己的宗教信仰&#xff0c;有些人会在家供奉佛像&#xff0c;有些人甚至会在家里挂上宗教画&#xff0c;亦同样产生五行效应&…

持续更新|UNIAPP适配APP遇到的问题以及解决方案

在使用UNIAPP开发APP的时候遇到的一些奇奇怪怪问题记录 组件样式丢失 问题&#xff1a;组件引入界面中&#xff0c;在小程序和H5环境下样式正常&#xff0c;而在APP中却出现高度异常问题 解决&#xff1a;增加view标签将组件包裹起来即可正常显示 解决前&#xff1a; 解决后…