设计结构——循环结构

news2024/11/28 16:04:45

循环结构

什么是循环

代码的重复执行,就叫做循环。

循环的分类

  • 无限循环:程序设计中尽量避免无限循环。(程序中的无限循环必须可控)

  • 有限循环:循环限定循环次数或者循环的条件。

循环的构成

  • 循环体
  • 循环条件

循环实现的三要素

  • 循环变量初始化

  • 循环条件

  • 循环变量更新

当型循环的实现

while

语法:

while(循环条件)

{

  循环语句;

}

说明:

  1. 循环条件的返回值必须是布尔类型,在C语言中,布尔类型为真使用 非0 来表示,布尔类型为假使用 0 表示。

  2. {} 包起来的内容整体称之为为 循环体 。

  3. 我们要在 循环体 中控制 循环条件 的变化,否则会产生死循环。

执行过程:

请添加图片描述

特点:

  先判断,后执行,循环体语句有可能一次都不执行。

案例:

/*
需求:while循环案例:如何编程来计算1 + 2 + 3 + … + 100?
*/
#include <stdio.h>
int main()
{
    // 定义一个变量,保存累加和
    int sum = 0;
    // 定义一个循环变量
    int i = 1;
    while(i <= 100) // 循环条件,这里可以有关系表达式、逻辑表达式,表达式运算结果是boolean(1,0)
    {
        // 累加计算
        // sum = sum + i;
        sum += i;
        // 给循环变量赋值,用来影响循环条件
        i++;
    }
    printf("1~100的累加和是:%d\n",sum);
    return 0;
}

while死循环

while(1) // 我们会在死循环进行必要的限制 

for…

语法:

for(①表达式1;②表达式2;③表达式3)

{

  ④循环体语句;

}

说明:

  1. () 中可以只保留两个分号,举例: (;;)

  2. ① 是循环变量,我们需要赋初值,循环变量可以是列表,多个循环变量使用逗号分隔,举例: int i=0,j=0

  3. ② 是循环条件,用来限制循环的次数,循环条件支持关系表达式,如果加入逻辑表达式,会变成复合表达式,举例: i < 10 && j < 10

  4. ③ 改变循环条件,支持列表,这里可以使用赋值表达式,举例: i++,j++

  5. 执行顺序:①②④③ --> ②④③ --> ②④③ … --> ②,这里①只执行1次。

执行过程:

请添加图片描述

特点:

 先判断,后执行,循环体语句有可能一次都不执行。

案例:

/**
* 需求:for循环案例-求1~100之间的偶数和
*/
#include <stdio.h>
// while实现
void while_test()
{
    int sum = 0;
    int i = 1;
    while(i <= 100)
    {
        if(i % 2 == 0)
        {
        	sum += i;
        }
    i++;
    }
    printf("while实现:1~100之间的偶数和%d\n",sum);
}
// for实现
void for_test()
{
    int sum = 0;
    for(int i = 1;i <= 100;i++) // 死循环表示:while(1)、for(;;)
    {
        if(i % 2 == 0)
        {
            sum += i;
        }
    }
    printf("for实现:1~100之间的偶数和:%d\n",sum);
}
int main()
{
    while_test();
    for_test();
    return 0;
}

案例:

/*
需求:for案例-用户可通过键盘录入一个整数n,用来作为阶乘的最高位数
*/
#include <stdio.h>
#include <math.h>
int main()
{
    int n = 1;// 接受控制台输入,作为阶乘最高位
    int r = 1;// 用来接收计算结果
    printf("请输入一个整数:\n");
    scanf("%d",&n);
    // 循环实现阶乘
    for(int i = 1;i <= fabs(n);i++)
    {
    	r *= i;
    }
    printf("1~%d之间的阶乘的结果是:%d\n",n,r);
    return 0;
}

总结

  • for语句使用语法规则上,降低/避免因为忘记循环条件更新操作,而引起的产生无限循环的几率。
  • 应用场合:for语句往往应用于循环次数事先可以确定的场景。

for死循环

for(表达式1;;表达式3);

for(;;);

案例:

/*
需求:for案例-求Fibonacci数列前20个数。
*/
#include <stdio.h>
int main()
{
    int f1 = 1;// 前一个数,默认是1,因为第1个是1
    int f2 = 1;// 后一个数,默认是1,因为第2个是1
    int i = 1;// 循环变量
    for(;i <= 20;i++)
    {
        printf("%12d%12d",f1,f2);
        // 一行显示两个数,每两个换一行
        if(i % 2 == 0)
        {
        	printf("\n");
        }
        f1 = f1 + f2; // f1 = 2 = 1+1
        f2 = f2 + f1; // f2 = 3 = 1+2
    }
    return 0;
}

直到型循环的实现

do…while

语法:

do

{

  循环体;

} while(循环条件);

说明:

  1. 循环条件的返回值必须是布尔类型,在C语言中,布尔类型为真使用 非0 来表示,布尔类型为假使用 0 表示。

  2. {} 包起来的内容整体称之为为 循环体 。

  3. 我们要在 循环体 中控制 循环条件 的变化,否则会产生死循环。

执行过程:

请添加图片描述

特点:

 先执行,后判断,循环体语句至少执行一次。

案例:

/*
需求:do..while案例:求1~100之间奇数的累加和
*/
#include <stdio.h>
int main()
{
    // 创建一个变量,用来存储累加和
    int sum = 0;
        // 创建循环变量,默认值1
    int i = 1;
    do
    {
        // 判断i是否是奇数
        if(i % 2 != 0)
        {
        	sum += i;
        }
        i++;// 改变循环变量的值
    }while(i <= 100);
    printf("1~100之间奇数的累加和是:%d\n",sum);
    return 0;
}

循环的嵌套

3种循环(while、do……while、for)可以互相嵌套。在前一个循环结构的内部又存在一个完整的循环结果

案例:

/**
* 需求:嵌套for循环案例-求100~200之间的所有素数
*/
#include <stdio.h>
int main()
{
    int num = 100;// 存放100~200之间的自然数
    int i = 2;// 循环变量,默认从2开始,因为自然数除以1没有意义 102,100~102, 102%100,102%101
    int isPrime = 1;// 用来记录1~自身之间能整除的次数 6, 2~5, 6%2,6%3,6%4,6%5
    // 第1层for循环:生成100~200之间的自然数
    for(;num <= 200; num++)
    {
        // 默认是素数
        isPrime = 1;
        // 第2层循环,生成 2~自身-1的自然数,用于和自身校验,是否能够整除,如果有1个能被整除,就说明不
        是素数
        for(i = 2; i < num -1; i++)
        {
            if(num % i == 0)
            {
            	isPrime = 0;// 不是素数
            }
        }
        if(isPrime) // 条件判断:isPrime == 1 缩写 isPrime
        {
        	printf("%d ",num);
        }
    }
    printf("\n");
    return 0;
}

循环结构的典型应用场景

  • 求累和:举例 1+2+3+4+…+100的和
  • 求累乘:举例 1234…*100的积
  • 求均值:举例: (1+2+3+4+…+100) / 100的值
  • 求极值:举例: 12,34,55,2,66中的最大值或者最小值
  • 元素遍历:常用于数组元素的遍历,比如:从 [1,2,3,4,5] 获取每一个元素。数组我们后续课程讲解。

基础算法模型

  1. 累加和
  • 定义一个变量(sum),并赋初值为0;
  • 用该变量累加(+=)每一个数据项(i)
  • 当访问完每一个数据项,此时该变量的取值就是累加和的结果。
  1. 累乘
  • 定义一个变量,并赋初值为1;
  • 用该变量累乘(*=)每一个数据项;
  • 当访问完每一个数据项,此时该变量的取值就是累乘的结果。
  1. 极值【知识点:数组】
  • 定义一个变量,并赋初值为第一个数据项
  • 从第二个数据项开始,一次性与该变量进行比较,如果大于/小于该变量,则将当前数据项的数
  • 据赋值给该变量。
  • 当访问完每一个数据项,此时该变量的取值就是求极值的结果。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度学习项目 -7-使用 Python 的手写数字识别

一、前言 该文章仅作为个人学习使用 二、正文 项目源代码&#xff1a;深度学习项目 - 使用 Python 进行手写数字识别 - DataFlair (data-flair.training) 数据集&#xff1a;​​​​​​​https://drive.google.com/open?id1hJiOlxctFH3uL2yTqXU_1f6c0zLr8V_K Python 深…

AB安全产品详解Guard master Safety Products

AB安全产品详解Guard master Safety Products

程序员面试中的“八股文”:是助力还是阻力?

“八股文”在实际工作中是助力、阻力还是空谈&#xff1f; 作为现在各类大中小企业面试程序员时的必问内容&#xff0c;“八股文”似乎是很重要的存在。但“八股文”是否能在实际工作中发挥它“敲门砖”应有的作用呢&#xff1f;有IT人士不禁发出疑问&#xff1a;程序员面试考…

深入浅出mediasoup—拥塞控制

拥塞控制对于不同网络条件下保证音视频传输质量非常重要。mediasoup 移植了 WebRTC 的 GCC 模块&#xff0c;嵌入到服务器&#xff0c;使得 mediasoup 具备了和 WebRTC 客户端一样的拥塞控制能力。为了使 GCC 能够与 mediasoup 框架良好交互&#xff0c;mediasoup 做了很多适配…

Large Models for Time Series and Spatio-Temporal Data: A Survey and Outlook

基本信息 博客贡献人 谷雨 作者 Ming Jin, Qingsong Wen, et al. 标签 大语言模型、预训练基础模型、大模型、时间序列、时空数据、时态数据 摘要 时态数据&#xff0c;包括时间序列和时空数据&#xff0c;在现实世界的应用中极为广泛。这些数据类型记录了动态系统随时…

2024电赛H题可能用到的代码——自动行驶小车

目录 前言 一、MPU6050零漂处理 二、MPU6050的Yaw&#xff08;180&#xff09;误差处理 三、PID算法&#xff08;增量式位置式&#xff09; 四、灰度传感器&#xff08;以8路为例&#xff09; 1、获取黑线偏差 2、判断ABCD点&#xff08;有无黑线交点&#xff09; 五、总结 前言…

内存原生CRAM技术将会颠覆计算存储的未来?

近期&#xff0c;一项刚刚发布的最新研究表明&#xff0c;一种名为计算随机存取存储器&#xff08;Computational Random-Access Memory, CRAM&#xff09;的新技术能够极大地减少人工智能&#xff08;AI&#xff09;处理所需的能量消耗。这项技术由明尼苏达大学双城分校的一组…

SmartInitializingSingleton和InitializingBean的区别

SmartInitializingSingleton&#xff1a;接口里面就一个方法afterSingletonsInstantiated&#xff0c;它是spring容器将所有bean都初始化完成之后&#xff0c;才会去调用&#xff0c;要求实现它接口的bean必须是单例的。 应用场景&#xff1a;可以在服务启动之后去处理一些逻辑…

红酒与电影:银幕上的醉人瞬间

在光影交织的银幕世界里&#xff0c;红酒不仅是品味生活的象征&#xff0c;更是情感交流的媒介。当定制红酒与电影相遇&#xff0c;它们共同编织出一个个醉人的瞬间&#xff0c;让观众在品味红酒的同时&#xff0c;也沉醉于电影的魅力之中。今天&#xff0c;就让我们一起走进红…

JS小应用:从图床获取的html代码中提取IMG标签并提取图片复制到剪贴板

JS小应用&#xff1a;从图床获取的html代码中提取IMG标签并提取图片复制到剪贴板 问题产生 自己做站长&#xff0c;为了节省银子&#xff0c;难免要用到图床。有的图床可以直接给你URL&#xff0c;这当然是最好的情况&#xff1a; 而有的图床&#xff0c;却禁用了鼠标右键&am…

“论数据分片技术及其应用”写作框架软考高级论文系统架构设计师论文

论文真题 数据分片就是按照一定的规则&#xff0c;将数据集划分成相互独立、正交的数据子集&#xff0c;然后将数据子集分布到不同的节点上。通过设计合理的数据分片规则&#xff0c;可将系统中的数据分布在不同的物理数据库中&#xff0c;达到提升应用系统数据处理速度的目的…

FP分数规划在无线通信中的应用(II)

3. 具体例子 3.1-3.3都只需要用第一章concave-convex方法求解&#xff0c;3.4-3.6需要用到第二章的拉格朗日对偶变换&#xff0c;而且具体解 x \mathbf{x} x时需要对离散变量单独开发算法。 3.1 多小区SISO能量分配 第一个例子是具有一组单天线基站&#xff08;BSs&#xff…

Python面向对象浅析

目录 面向对象基本概念 一、类和对象 类和对象是面向对象骗程的两个核心概念。 在程序开发中&#xff0c;要设计一个类&#xff0c;通常需要满足一下三个要素: self详解&#xff1a; 对象&#xff08;Object&#xff09; 魔法方法&#xff1a; 类里的一些特殊方法 __in…

RK3568笔记四十八:ADC驱动开发测试

若该文为原创文章&#xff0c;转载请注明原文出处。 一、ADC介绍 RK3568集成了一个逐次逼近模数转换器&#xff08;Successive Approximation ADC&#xff09;&#xff0c;通常简称为SAR ADC。 这种转换器能够将连续的模拟信号转换为离散的数字信号&#xff0c;其特点在于具有…

nginx转发netty长链接(nginx负载tcp长链接配置)

首先要清楚一点&#xff0c;netty是长链接是tcp连接不同于http中负载在http中配置server监听。长连接需要开启nginx的stream模块(和http是并列关系) 安装nginx时注意开启stream&#xff0c;编译时加上参数 --with-stream &#xff08;其他参数根据自己所需来加&#xff09; …

rem实现屏幕适配(jQuery)

一、rem换算 1.根据视口宽度动态计算字体大小&#xff0c;如果宽度大于750px&#xff0c;则将字体大小设置为100px&#xff0c;否则按比例缩小。 tips:使用时记得引入jQuery.js // 在文档加载完成后执行函数&#xff0c;确保DOM已经准备就绪$(function () {// 定义一个自执行…

增量学习中Task incremental、Domain incremental、Class incremental 三种学习模式的概念及代表性数据集?

1 概念 在持续学习领域&#xff0c;Task incremental、Domain incremental、Class incremental 是三种主要的学习模式&#xff0c;它们分别关注不同类型的任务序列和数据分布变化。 1.1 Task Incremental Learning (Task-incremental) 任务增量学习&#xff0c;也称为任务增…

盐分反演关键:批量计算常用的盐分指数反演变量

盐分反演关键&#xff1a;批量计算常用的盐分指数反演变量 一、引言 盐分指数反演是遥感应用中的一个重要方面&#xff0c;尤其在农业和环境监测中有着广泛的应用。通过遥感影像&#xff0c;研究人员可以高效地获取和分析地表盐分信息&#xff0c;为土地管理和作物生产提供重…

YOLOX+PyQt5交通路口智能监测平台设计与实现

1.概述 交通要道的路口上人车穿行&#xff0c;特别是上下班早高峰&#xff0c;且时常发生交通事故。因此对交通路口的车流量和人流量的监测必不可少。 2.检测模型 使用的检测模型为YOLOX模型&#xff0c;模型权重为训练VOC数据集得来&#xff0c;其中包括了二十个类别&#…

ONLYOFFICE 协作空间 2.6 已发布:表单填写房间、LDAP、优化房间和文件管理等

更新后的 ONLYOFFICE 协作空间带来了超过 20 项新功能和优化&#xff0c;让工作更加高效和舒适。阅读本文了解详情。 表单填写房间 这次更新增加了一种新的房间类型&#xff0c;可在 ONLYOFFICE 协作空间中组织简单的表单填写流程。 通过表单填写房间&#xff0c;目前可以完成…