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

C语言之循环结构:直到型循环

C语言

循环结构

直到型循环的实现

  • 特点:先执行,后判断,不管条件是否满足,至少执行一次。
  • 典型代表:do…while,goto(已淘汰,不推荐使用)
do…while
  • 语法:

    do
    {循环体;
    }
    while(循环条件)
  • 说明:

    • ①循环条件的返回值必须是逻辑值(0或者非0)
    • {}包起来的内容整体称之为循环体
    • ③我们要在循环体中控制循环条件的变化,否则会产生死循环。
  • 执行过程:

    在这里插入图片描述

  • 特点:先执行,后判断,不管条件是否满足,循环体语句至少执行一次。

  • 案例:

    • 需求:求1~100以内的偶数和

    • 分析:

      • 创建一个变量,用来存储sum
      • 创建一个循环变量 i = 2
      • 创建一个do…while循环,在循环体中,校验偶数 i % 2 == 0,如果满足,就实现偶数和计算 sum += i
      • 计算完之后,在循环体的末行,对循环条件进行更新,i++
      • 限制循环条件:i <= 100
      • 循环结束,打印输出 sum 的值
    • 代码:

      #include <stdio.h>int main()
      {// 创建一个变量,用来存储偶数和int sum = 0;// 创建一个循环变量int i = 2;do{if(i % 2 == 0){sum += i;}i++;// 更新循环变量} while(i <= 100);printf("1~100以内的偶数和是%d\n",sum);return 0;
      }
      
goto
  • 语法:

    goto 标签(label)
    
  • 标签:标明目标的代码的位置,是一个不加""的字符串。

  • 案例:

    • 需求:求1~100以内的偶数和

    • 代码:

      #include <stdio.h>int main()
      {// 创建一个变量存放偶数和int sum = 0;// 创建一个循环变量int i = 2;// 定义一个标签(标签名自定义,这是一个不带引号的字符串)我们一般给需要重复执行的代码添加标签
      loop: // 这个标签需要通过goto触发if(i % 2 == 0){sum += i;}i++;// 循环条件的校验if (i <= 100){// 触发循环goto loop;}printf("1~100以内的偶数和是%d\n",sum);return 0;
      }
      
    • 注意事项

      • ①可读性:goto语句会破坏代码的结构和可读性,使得代码难以理解和维护。因此,应尽量避免使用。
      • ②替代方案:大多数情况下,可以使用循环、条件语句、函数等结构来替代goto语句,使代码更加清晰和易于管理。
      • ③嵌套限制:虽然goto语句可以跨函数跳转(即跳转到另一个函数中的标签),但这种用法是不合法的,并且会导致编译错误。 goto语句只能在同一函数内部跳转。
      • ④错误处理:在某些情况下,goto语句可以用于错误处理,例如从嵌套的多层循环中跳出。但即使在这种情况下,也应谨慎使用,并考虑是否有更好的替代方案。
    • 总结

    虽然 goto 语句在C语言中是合法的,并且有时可能看起来很方便,但过度使用或不当使用会导致代码质量下降。因此,建议尽量避免使用goto语句,而是采用更结构化和可维护的编程方法。

循环的嵌套

  • 3种循环(while、do…while、for)可以互相嵌套。在前一个循环结构的内容有存在一个完成的循环结构。例如:

    在这里插入图片描述

  • 案例:

    • 需求:求100~200之间的所有的素数(素数又被称为质数)

    • 分析:

      • 只能被1和自身整除的数叫做素数或质数。(做这个题,思路要反着来,过滤合数,剩余的就是素数)
    • 代码:

      #include <stdio.h>int main()
      {// 创建一个变量,存放100~200之间的自然数int num = 100;// 循环变量,默认从2开始,因为自然数除以1没有意义,因为所有自然数都能被1整数,我们现在需要校验 2 ~ 自身 -1之间int i;// 定义一个标志位:用来记录1~自身之间能被当前自然数整除的次数,用来校验是否位素数int is_flag; // 默认就是素数// 第1层for循环:生成100~200之间的自然数for(; num <= 200; num++){// 每个自然数在判别之前,需要重置标志位is_flag = 1;// 第2层循环:校验每一个自然数,检测其是否是非素数 举例:num = 4, i= 2~3 9// for (i = 2; i< num / 2; i++)// for (i = 2; i*1 <= num; i++)for(i = 2;i < num; i++) // 排除1和自身 9, 9 % 2==0,9 % 3==0...9%8==0 20 2 45 10{// 被校验数是否能被校验数整除,如果能,就是非素数if ( num % i == 0){// 如果是和数,就跳出is_flag = 0;break;// break就是结束循环}}// 根据标志位,判断该自然数是否是素数if (is_flag) // 条件判断:is_flag == 1 缩写 is_flag(推荐),is_flag == 0 缩写!is_flag(推荐){printf("%-4d",num);}}printf("\n");return 0;
      }
      

循环结构的典型应用场景

  • 求累和:举例:1+2+3+...+100的和,sum = 0
  • 求累积:举例:1*2*3*...*100的积,result = 1
  • 求均值:举例: (1+2+3...+100)/100的值
  • 求极值:举例: 12,34,56,67中的最大值、最小值
  • 元素遍历:常用于数组元素的遍历。

基础算法模型

  1. 累和
  • 定义一个变量(sum),并赋初值为0;

  • 该变量累加(+=)每一个数据项(i);

  • 当访问完每一个数据项,此时该变量的取值就是累加和的结果。

  1. 累乘
  • 定义一个变量,并赋初值为1;

  • 用该变量累乘(*=)每一个数据项;

  • 当访问完每一个数据项,此时该变量的取值就是累乘的结果。

  1. 极值(多应用于数组)
  • 定义一个变量,并赋初值为第一个数据项;

  • 从第二个数据项开始,依次于该变量进行比较,如果大于/小于该变量,则将当前数据项的数据赋值给该变量。

  • 当访问完每一个数据项,此时该变量的取值就是求极值的结果。

break与continue

break
  • 功能:

    • ①用在switch中,用来跳出switch的case语句;如果case没有break,可能会产生case穿透。
    • ②用在循环中(while、do…while、for),提前结束循环,也就是跳出整个循环。
  • 说明:

    • ①break不能用于循环语句和switch语句之外的任何其他语句之中。
    • ②break只能终止并跳出最近一层的循环结构。
  • 图例:

    在这里插入图片描述

  • 案例:

    • 需求:四海同学参与运算符考试,如果考试及格,就跳出循环,否则就一直考。

    • 代码:

      #include <stdio.h>int main()
      {printf("运算符考试\n");// 创建一个变量,用来存放小明兄弟的考试成绩int score;do{printf("小明兄弟开始运算符考试...\n");scanf("%d",&score);// 考试合格,跳出循环if (score >= 60){// printf("恭喜小明兄弟通过考试!\n");break;}else{printf("很遗憾,小明兄弟你需要重新考试!\n");}} while(1);printf("恭喜小明兄弟通过考试!\n");return 0;
      }
      
continue
  • 功能:continue语句不会结束整个循环,而是跳过本次循环尚未执行的语句,进入下一次循环。

  • 说明:

    • ①仅用于循环语句中。
    • ② 在嵌套循环的情况下,continue语句只对包含它的最近一层的循环起作用。
  • 图例:

    在这里插入图片描述

  • 案例:

    • 需求:求1~100以内的偶数和

    • 代码:

      #include <stdio.h>/**
      * continue案例:求1~100以内的偶数和,(不使用continue)
      */
      int continue_test1()
      {int sum = 0;for(int i = 1; i <= 100; i++){// 查找偶数if ( i % 2 == 0){sum += i;}}printf("1~100以内的偶数和是%d\n",sum);
      }/**
      * continue案例:求1~100以内的偶数和,(使用continue)
      */
      int continue_test2()
      {int sum = 0;for(int i = 1; i <= 100; i++){// 查找计数if ( i % 2 != 0){continue;}sum += i;}printf("1~100以内的偶数和是%d\n",sum);
      }
      int main()
      {continue_test1();continue_test2();
      }
      

相关文章:

C语言之循环结构:直到型循环

C语言 循环结构 直到型循环的实现 特点&#xff1a;先执行&#xff0c;后判断&#xff0c;不管条件是否满足&#xff0c;至少执行一次。典型代表&#xff1a;do…while&#xff0c;goto&#xff08;已淘汰&#xff0c;不推荐使用&#xff09; do…while 语法&#xff1a; d…...

细说STM32F407单片机RTC的备份寄存器原理及使用方法

目录 一、备份寄存器的功能 二、示例功能 三、项目设置 1、晶振、DEBUG、CodeGenerator、USART6 2、RTC 3、NVIC 4、GPIO 及KEYLED 四、软件设计 1、main.h 2、main.c 3、rtc.c 4、keyled.c、keyled.h 五、运行调试 本实例旨在介绍备份寄存器的作用。本实例继续使…...

MATLAB计算反映热需求和能源消耗的度数日指标(HDD+CDD)(全代码)

目录 度数日(Degree Days, DD)概述计算公式MATLAB计算代码调用函数1:计算单站点的 CDD参考度数日(Degree Days, DD)概述 度数日(Degree Days, DD)是用于衡量建筑、城市和地区的热需求和能源消耗模式的指标。它分为两部分: 加热度日(Heating Degree Days, HDD):当室…...

J6 X8B/X3C切换HDR各帧图像

1、OV手册上的切换命令 寄存器为Ox5074 各帧切换&#xff1a; 2、地平线control tool实现切换命令 默认HDR模式出图&#xff1a; HCG出图&#xff1a; LCG出图 SPD出图 VS出图...

09-轮转数组

给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 方法一&#xff1a;使用额外数组 function rotate(nums: number[], k: number): void {const n nums.length;k k % n; // 处理 k 大于数组长度的情况const newNums new A…...

用vue3写一个好看的wiki前端页面

以下是一个使用 Vue 3 Element Plus 实现的 Wiki 风格前端页面示例&#xff0c;包含现代设计、响应式布局和常用功能&#xff1a; <template><div class"wiki-container"><!-- 头部导航 --><el-header class"wiki-header"><d…...

瑞芯微烧写工具

文章目录 前言一、安装驱动二、安装烧写工具1.直接解压压缩包2. 如何使用 三、MASKROM 裸机必备四、LOADER 烧写&#xff0c;前提是搞过第三步没问题五、Update.img包的烧录六、linux下烧写总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 项目需要…...

说下JVM中一次完整的GC流程?

大家好&#xff0c;我是锋哥。今天分享关于【说下JVM中一次完整的GC流程?】面试题。希望对大家有帮助&#xff1b; 说下JVM中一次完整的GC流程? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 JVM中的一次完整的垃圾回收&#xff08;GC&#xff09;流程可以概括为…...

Open FPV VTX开源之OSD使用分类

Open FPV VTX开源之OSD使用分类 1. 源由2. 硬件2.1 【天空端】SigmaStar2.2 【天空端】Raspberry Pi2.3 【地面端】 3. 软件3.1 天空端软件3.2 地面端软件 4. 分类4.1 嵌入式OSD分类A1-嵌入式OSD&#xff1a;SigmaStar Android分类A2-嵌入式OSD&#xff1a;SigmaStar Hi3536分…...

智慧农业-虫害及生长预测

有害生物防控系统是一个综合性的管理体系&#xff0c;旨在预防和控制对人类生活、生产甚至生存产生危害的生物。这些生物可能包括昆虫、动物、植物、微生物乃至病毒等。 一、系统构成 1、监测预警系统&#xff1a;利用智能传感器、无人机、遥感技术等手段&#xff0c;实时监测…...

Python 识别图片和扫描PDF中的文字

目录 工具与设置 Python 识别图片中的文字 Python 识别图片中的文字及其坐标位置 Python 识别扫描PDF中的文字 注意事项 在处理扫描的PDF和图片时&#xff0c;文字信息往往无法直接编辑、搜索或复制&#xff0c;这给信息提取和分析带来了诸多不便。手动录入信息不仅耗时费…...

C语言如何知道当前系统中的编译器数据类型的大小是多少?

在 C 语言中&#xff0c;你可以使用sizeof运算符来确定当前系统中编译器数据类型的大小&#xff0c;该运算符返回一个size_t类型的值&#xff0c;表示所操作对象或数据类型占用的字节数。下面为你详细介绍使用方法&#xff1a; 1. 基本数据类型大小的获取 基本数据类型如char…...

gitlab Webhook 配置jenkins时“触发远程构建 (例如,使用脚本)”报错

报错信息&#xff1a; <html> <head> <meta http-equiv"Content-Type" content"text/html;charsetISO-8859-1"/> <title>Error 403 No valid crumb was included in the request</title> </head> <body><h2…...

Mysql中使用sql语句生成雪花算法Id

&#x1f353; 简介&#xff1a;java系列技术分享(&#x1f449;持续更新中…&#x1f525;) &#x1f353; 初衷:一起学习、一起进步、坚持不懈 &#x1f353; 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正&#x1f64f; &#x1f353; 希望这篇文章对你有所帮助,欢…...

/etc/profile vs ~/.bashrc:如何正确使用?

在 Linux 或 WSL 环境中&#xff0c;我们经常需要配置环境变量、命令别名、路径等信息。然而&#xff0c;许多人在配置时会纠结&#xff1a;到底应该放在 /etc/profile 还是 ~/.bashrc&#xff1f;本文将全面解析它们的区别&#xff0c;并帮助你做出正确的选择。 1. 什么是 /et…...

SpringBoot实战:高效获取视频资源

文章目录 前言技术实现SpringBoot项目构建产品选取配置数据采集 号外号外 前言 在短视频行业高速发展的背景下&#xff0c;海量内容数据日益增长&#xff0c;每天都有新的视频、评论、点赞、分享等数据涌现。如何高效、精准地获取并处理这些庞大的数据&#xff0c;已成为各大平…...

Flutter_学习记录_数据更新的学习

Flutter 如果界面上有数据更新时&#xff0c;目前学习到的有3种&#xff1a; 第一种&#xff1a; 直接用 StatefulWidget组件&#xff0c;然后当数据更新时&#xff0c;调用setState的方法更新数据&#xff0c;页面上的数据会直接更新&#xff1b;第二种&#xff1a; 用 State…...

c++ 多线程知识汇总

一、std::thread std::thread 是 C11 引入的标准库中的线程类&#xff0c;用于创建和管理线程 1. 带参数的构造函数 template <class F, class... Args> std::thread::thread(F&& f, Args&&... args);F&& f&#xff1a;线程要执行的函数&…...

day09_实时类标签/指标

文章目录 day09_实时类标签/指标一、日志数据实时采集2、Flume简介2.3 项目日志数据采集Flume配置2.3.1 涉及的Flume组件和参数2.3.2 Nginx日志采集2.3.3 用户行为日志采集 二、Nginx日志数据统计1、日志格式说明2、数据ETL2.1 日志抽取2.1.1 正则表达式2.1.2 基于Spark实现Ngi…...

【前端开发学习笔记16】Vue_9

文章分类架子 多个页面复用&#xff0c;封装成组件&#xff1a; props 定制标题默认插槽 default 定制内容主体具名插槽 extra 定制按钮 <template><el-card class"page-container"><template #header><div class"header"><s…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...