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

C语言基础13:循环结构 for和while

循环结构

什么是循环结构

代码在满足某种条件的前提下,重复执行,就叫做循环结构。

循环的分类

  • 无限循环:其实就是死循环,程序设计中尽量避免无限循环,如果非要使用,那么这个循环一定要在可控范围内。
  • 有限循环:循环限定循环次数或者终止循环的条件。

循环的构成

  • 循环条件
  • 循环体

当型循环的实现

特点:先判断,后执行,如果条件不满足,一次都不执行

典型代表:while循环和for循环

while

语法:

//写法1:省略{}
while (循环条件)循环语句;//单语句//写法2:保留{}
while (循环条件)
{循环语句;//可以是单语句,可以是复合语句
}

说明:

​ 1.循环条件的返回值必须是逻辑值(布尔类型,条件表达式只能是关系表达式或者逻辑表达式,可以是具体的值(0、非0,false、true))。在C语言中使用0和非0来表示关系表达式或者逻辑表达式的值,如果引入<stdbool.h>,也可也用true或false来表示。

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

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

执行过程:

在这里插入图片描述

特点:

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

案例:

  • 需求:求1~100的累加和

  • 分析:

    • 创建一个变量sum = 0,用来接受累加和
    • 创建一个变量i,用来表示计算数,我们给i初始值i= 1,每次循环的时候,让i++
    • 在循环中,使用sum+=i,完成累加和计算
    • 同时我们要限定i的范围i <= 100
      • 第一次 :sum += i= 0 + 1 = 1 0+1
      • 第二次:sum += i = 1 + 2 = 3 1+2
      • 第三次:sum += i = 3 + 3 = 6 1+2+3
  • 代码:

    /*************************************************************************> File Name:    demo01.c> Author:         ZK> Description: while循环案例:求1~100的累加和> Created Time: 2025年02月12日 星期三 09时44分51秒************************************************************************/#include <stdio.h>int main(int argc,char *argv[])
    {//定义两个变量,sum存储累加和,i用来存储计算数int sum = 0,i = 1;while(i <= 100){//累加和计算sum += i;//sum = sum + i;i++;}printf("1~100的累加和是%d\n",sum);return 0;
    }

案例:

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

  • 分析:

    • 创建两个变量,一个变量sum用来存储偶数和,一个变量i用作循环变量
    • 创建一个循环,设置循环条件:i <=100
    • 在循环体中,需要使用一个if语句判断i是否为偶数 if(i % 2 == 0),如果满足,就求偶数和:sum += i
    • 在循环体 的最后一行,写代码改变循环变量的值:i++
    • 循环结束,打印输出sum
  • 代码:

    /*************************************************************************> File Name:    demo02.c> Author:       ZK> Description: while案例:求1~100以内的偶数和 > Created Time: 2025年02月12日 星期三 10时02分54秒************************************************************************/#include <stdio.h>int main(int argc,char *argv[])
    {//创建两个变量,一个变量sum用来存偶数和,一个变量i用来存循环变量int i = 1,sum = 0;//循环求和while (i <= 100){//过滤奇数if (i % 2 == 0)sum += i;i++;//改变循环变量的值}printf("1~100的偶数和是%d\n",sum);return 0;
    }

死循环:

while (1)
for…

原则上,for循环能实现的,while循环一定可以实现,for循环可以看作是while循环的一种特殊写法。

语法:

for (①表达式1;②表达式2;③表达式3)
{④循环体语句;//如果是单语句,可以省略{};如果是复合语句,必须保留{ }
}

说明:

​ ①( )中可以只保留;;,举例:for(;;),此时就是for循环的死循环

​ ②表达式1循环变量,我们需要赋初值,循环变量可以是单个,也可以是列表,多个循环变量使用逗号分隔

​ ③表达式2循环条件,用来限制循环的次数,循环条件支持关系表达式、逻辑表达式,举例:i < 10 && j<=i

​ ④表达式3改变循环变量(条件),支持列表,这里可以使用赋值表达式,举例:i++,j--

​ ⑤执行顺序:①②④③→②④③→②④③→…→②

// 

执行过程:

在这里插入图片描述

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

案例:

/*************************************************************************
> File Name:
demo03.c
> Author:
FPF
> Description: for循环案例
> Created Time: 2025年02月12日 星期三 10时52分51秒
************************************************************************/
#include <stdio.h>
#include <math.h>
/**
* 需求:while循环案例:计算1~100以内的偶数和
*/
int while_test()
{// 创建一个变量用来存储sumint sum = 0;// 创建一个循环变量,并初始化(表达式1)int i = 2;// 循环while(i <= 100) // 循环条件(表达式2){// 过滤调奇数 循环体语句if (i % 2 == 0){sum += i;}// 改变循环条件(表达式3)i++;}printf("1~100以内的偶数和是%d\n",sum);
}
/**
* 需求:for循环案例:计算1~100以内的偶数和
*/
int for_test()
{// 创建一个变量用来存储sumint sum = 0;// 创建一个循环变量,并初始化(表达式1)int i = 2;// 循环for(;i <= 100;) // 循环条件(表达式2){// 过滤调奇数 循环体语句if (i % 2 == 0){sum += i;}// 改变循环条件(表达式3)i++;}printf("1~100以内的偶数和是%d\n",sum);
}
/**
* 需求:for循环案例:计算1~100以内的偶数和
*/
int for_test2()
{// 创建一个变量用来存储sumint sum = 0;// 循环for(int i = 2; i <= 100; i++) // 循环条件(表达式2){// 过滤调奇数 循环体语句if (i % 2 == 0){sum += i;}}printf("1~100以内的偶数和是%d\n",sum);
}
/**
* for循环案例
* 需求:用户可以通过键盘录入一个整数n,用来作为阶乘的最高位,比如n = 5,那么阶乘表示:1 * 2 * 3 * 4
* 5
*/
int for_test3()
{// 创建一个变量,接收控制台输入的整数nint n;// 创建一个变量,用来接收阶乘的结果int r = 1;printf("请输入一个整数:\n");scanf("%d",&n);// 使用for循环实现阶乘 fabs()求绝对值,需要引入 math.hfor (int i = 1; i <= fabs(n); i++){r *= i;}printf("1~%d之间的阶乘的将结果是%d\n",(int)fabs(n),r);
}
int main(int argc,char *argv[])
{while_test();for_test();for_test2();for_test3();return 0;
}

死循环:

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

循环实现的三要素:

  • 循环变量的初始化,举例:int i = 2;
  • 循环条件,举例:i <= 100
  • 循环变量的更新,举例:i++

案例:

  • 需求:求斐波拉契数列前20个

  • 分析:

    • 斐波拉契数列指的是符合一定规则的数列,举例:1,1,2,3,5,8
    • 斐波拉契数列的特点是第2个就等于前两个数之和,最开始的第1,2数是固定的,都是1
  • 代码:

    /*************************************************************************> File Name:    demo04.c> Author:       ZK> Description:  for循环案例:求斐波拉契数列的前20位> Created Time: 2025年02月12日 星期三 11时31分44秒************************************************************************/#include <stdio.h>int main(int argc,char *argv[])
    {int i = 1;//定义一个循环变量int f1 = 1;//数列第一位int f2 = 1;//数列第二位for (;i <= 10;i++){printf("%d %d ",f1,f2);//第一次:1 1 2 3f1 += f2;f2 += f1;}return 0;
    }

相关文章:

C语言基础13:循环结构 for和while

循环结构 什么是循环结构 代码在满足某种条件的前提下&#xff0c;重复执行&#xff0c;就叫做循环结构。 循环的分类 无限循环&#xff1a;其实就是死循环&#xff0c;程序设计中尽量避免无限循环&#xff0c;如果非要使用&#xff0c;那么这个循环一定要在可控范围内。有…...

六西格玛设计培训如何破解风电设备制造质量与成本困局

2023年&#xff0c;中国风电行业装机容量突破4.3亿千瓦&#xff0c;稳居全球第一&#xff0c;但高速扩张背后暗藏隐忧&#xff1a; 质量痛点&#xff1a;叶片开裂、齿轮箱故障等缺陷频发&#xff0c;运维成本占项目全生命周期成本超30%&#xff1b;成本压力&#xff1a;原材料…...

【Android开发】安卓手机APP使用机器学习进行QR二维码识别

前言:本项目是一个 Android 平台的二维码扫描应用,具备二维码扫描和信息展示功能。借助 AndroidX CameraX 库实现相机的预览、图像捕获与分析,使用 Google ML Kit 进行二维码识别。为方便大家了解项目全貌,以下将介绍项目核心代码文件 MainActivity.java 和 AndroidManifes…...

Zabbix-监控SSL证书有效期

背景 项目需要&#xff0c;需要监控所有的SSL证书的有效期&#xff0c;因此需要自定义一个监控项 实现 创建自定义脚本 在Zabbix的scripts目录(/etc/zabbix/scripts/)下创建一个新的shell脚本check_ssl.sh&#xff0c;内容如下 #!/bin/bash time$(echo | openssl s_client…...

生成式聊天机器人 -- 基于Pytorch + Global Attention + 双向 GRU 实现的SeqToSeq模型 -- 上

生成式聊天机器人 -- 基于Pytorch Global Attention 双向 GRU 实现的SeqToSeq模型 -- 上 前言数据预处理下载并加载数据原始数据格式化数据清洗与字典映射转换为模型需要的数据格式 SeqToSeq 模型Encoder 编码器Decoder 解码器全局注意力机制解码器实现 前言 本文会介绍使用…...

Kickstart自动化安装过程中自动选择较小的磁盘安装操作系统

Kickstart自动化安装过程中自动选择较小的磁盘安装操作系统 需求 在实际生成操作过程中&#xff0c;一般会遇到物理服务器存在多块盘的情况。 安装过程中&#xff0c;磁盘的标签是随机分配的&#xff0c;并不是空间较小的盘&#xff0c;就会使用较小的磁盘标签 而需求往往需要…...

基于进化式大语言模型的下一代漏洞挖掘范式:智能对抗与自适应攻防体系

摘要 本文提出了一种基于进化式大语言模型(Evolutionary LLM)的智能漏洞挖掘框架,突破了传统静态分析的局限,构建了具备对抗性思维的动态攻防体系。通过引入深度强化学习与多模态感知机制,实现了漏洞挖掘过程的自适应进化,在RCE、SQLi、XXE等关键漏洞类型的检测中达到97…...

游戏引擎学习第99天

仓库:https://gitee.com/mrxiao_com/2d_game_2 黑板&#xff1a;制作一些光场(Light Field) 当前的目标是为游戏添加光照系统&#xff0c;并已完成了法线映射&#xff08;normal maps&#xff09;的管道&#xff0c;但还没有创建可以供这些正常映射采样的光场。为了继续推进&…...

脉冲当量含义

前言&#xff1a; 大家好&#xff0c;我是上位机马工&#xff0c;硕士毕业4年年入40万&#xff0c;目前在一家自动化公司担任软件经理&#xff0c;从事C#上位机软件开发8年以上&#xff01;我们在开发C#的运动控制程序的时候&#xff0c;一个必要的步骤就是设置每个轴的脉冲当…...

docker compose部署flink集群

本次部署2个jobmanager和3个taskmanager 一、部署zookeeper集群 flink使用zookeeper用作高可用 部署集群参考&#xff1a;docker compose部署zookeeper集群-CSDN博客 二、创建目录及配置文件 创建timezone文件&#xff0c;内容填写Asia/Shanghai 手动创建目录&#xff1a…...

docker compose快速部署kafka-connect集群

先部署kafka集群&#xff0c;启动 参考&#xff1a;docker compose部署kafka集群-CSDN博客 创建timezone文件&#xff0c;内容填写Asia/Shanghai 再部署kafka-connect集群 networks: net: external: true services: kafka-connect1: restart: always image:…...

【核心特性】Go 模块化开发入门(go mod 深度解析)

Go 模块化开发入门&#xff08;go mod 深度解析&#xff09; 一、引言 在 Go 语言的开发过程中&#xff0c;随着项目规模的不断扩大&#xff0c;依赖管理变得愈发重要。Go Modules 作为 Go 语言官方的依赖管理工具&#xff0c;自 Go 1.11 版本引入后&#xff0c;极大地简化了项…...

国产ARM处理器工控机如何助力企业实现自主可控?

选择国产ARM处理器工控机的原因可以从多个角度来考虑&#xff0c;包括技术、经济、安全和政策等方面。以下是一些关键理由&#xff1a; 技术优势 低功耗高效能&#xff1a;ARM架构以其出色的能效比著称&#xff0c;适合需要长时间运行的工业控制应用。适应性强&#xff1a;国…...

dns功能及工作原理是什么?

在互联网的浩瀚海洋中&#xff0c;域名系统(DNS)扮演着至关重要的角色。它就像一个巨大的地址簿&#xff0c;将用户友好的域名转换为机器可识别的IP地址&#xff0c;确保用户能够访问到正确的服务器。本文将深入探讨DNS的功能和工作原理&#xff0c;揭示这一互联网基础设施的奥…...

Java中的Map集合与文件操作详解

1. Map集合概述 Map是一种键值对&#xff08;key-value&#xff09;的集合&#xff0c;常用于存储具有映射关系的数据。与List和Set不同&#xff0c;Map的键&#xff08;key&#xff09;是唯一的&#xff0c;而值&#xff08;value&#xff09;可以重复。Map集合的主要实现类有…...

SAP-ABAP:dialog界面中的数据块Event Block详解举例

在SAP的Dialog程序开发中&#xff0c;Event Block&#xff08;事件块&#xff09;是屏幕流逻辑&#xff08;Flow Logic&#xff09;中的关键部分&#xff0c;用于定义屏幕在特定事件触发时执行的逻辑。Event Block通常与ABAP模块&#xff08;Module&#xff09;结合使用&#x…...

PostgreSQL 开发利器:Navicat 核心功能与资源攻略

近几年&#xff0c;&#x1f418; PostgreSQL 在全球数据库排名中表现优异。在 2025 年 2 月 DB-Engines 排名中 (如图)&#xff0c;PostgreSQL 稳居第四名&#xff0c;并逐渐逼近第三名的 Microsoft SQL Server&#xff0c;其评分和受欢迎度持续增长&#xff0c;成为开源数据库…...

飞算 JavaAI:加速 AI + 行业趋势的智能化进程

在数字化浪潮奔涌的当下&#xff0c;“AI 行业” 已然成为不可逆的发展趋势&#xff0c;各行业都在积极探索 AI 技术与自身业务的融合&#xff0c;期望借此实现创新突破与转型升级。在这一进程中&#xff0c;飞算 JavaAI凭借其卓越的技术实力和独特的功能优势&#xff0c;为加…...

XZ_Mac电脑上本地化部署DeepSeek的详细步骤

根据您的需求&#xff0c;以下是Mac电脑上本地化部署DeepSeek的详细步骤&#xff1a; 一、下载并安装Ollama 访问Ollama官网&#xff1a; 打开浏览器&#xff0c;访问 Ollama官网。 下载Ollama&#xff1a; 在官网中找到并点击“Download”按钮&#xff0c;选择适合Mac系统的…...

Flink-DataStream API

一、什么样的数据可以用于流式传输 Flink的DataStream API 允许流式传输他们可以序列化的任何内容。Flink自己的序列化程序用于 基本类型&#xff1a;即字符串、长、整数、布尔值、数组复合类型&#xff1a;元组、POJO和Scala样例类 基本类型我们已经很熟悉了&#xff0c;下…...

像素即坐标,跨镜即连续:镜像视界空间级全域跟踪引擎技术解析方案

像素即坐标&#xff0c;跨镜即连续&#xff1a;镜像视界空间级全域跟踪引擎技术解析方案 一、方案前言 在全域视频感知、智慧城市、智慧园区、安防管控、跨境物流等场景中&#xff0c;传统跨摄像机&#xff08;跨镜&#xff09;跟踪技术长期面临目标ID断裂、轨迹碎片化、外观特…...

基于Python与yfinance构建本地化股票量化筛选器:以PKScreener为例

1. 项目概述与核心价值 最近在和一些做量化交易的朋友交流时&#xff0c;发现大家普遍面临一个痛点&#xff1a;虽然市面上有各种股票数据接口和量化平台&#xff0c;但真正能快速、灵活地根据自定义条件进行股票筛选&#xff0c;并且能本地化部署、深度定制的工具却不多。要么…...

Beyond Compare 5完全激活指南:3种简单方法告别30天试用限制

Beyond Compare 5完全激活指南&#xff1a;3种简单方法告别30天试用限制 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen 你是否正在使用Beyond Compare 5这款强大的文件对比工具&#xff0c;却因…...

Godot 4.x ECS插件GECS:数据驱动架构提升游戏性能与可维护性

1. 项目概述&#xff1a;GECS&#xff0c;为Godot 4.x注入ECS架构之力如果你正在用Godot开发游戏&#xff0c;尤其是那种实体数量多、交互逻辑复杂的项目&#xff0c;比如RTS、模拟经营或者一个满屏敌人的弹幕游戏&#xff0c;你很可能已经感受到了传统面向对象&#xff08;OOP…...

为什么93%的开发者在WebRTC集成中卡在ElevenLabs音频缓冲层?——低延迟TTS流式传输终极调优方案

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs API开发接入指南 ElevenLabs 提供高质量、低延迟的语音合成&#xff08;TTS&#xff09;服务&#xff0c;其 RESTful API 支持多种语言、情感调节与声音克隆能力。接入前需在 ElevenLabs 控…...

基于Vue 3与UnoCSS构建轻量级个人导航页:从零部署到高级定制

1. 项目概述&#xff1a;一个轻量级、可定制的个人导航页 最近在折腾自己的浏览器主页&#xff0c;厌倦了那些臃肿、广告满天飞的默认页面&#xff0c;也受够了每次都要在书签栏里翻找常用链接。作为一个喜欢把一切工具都“私有化”和“个性化”的开发者&#xff0c;我决定自己…...

Windows平台PDF处理终极解决方案:Poppler预编译包深度解析

Windows平台PDF处理终极解决方案&#xff1a;Poppler预编译包深度解析 【免费下载链接】poppler-windows Download Poppler binaries packaged for Windows with dependencies 项目地址: https://gitcode.com/gh_mirrors/po/poppler-windows 在Windows环境下处理PDF文件…...

人工智能体共情能力模块设计与实践(下)

八、实验设计方案 8.1 数据集设计 建议构建一个多场景中文共情对话数据集。 场景分类 场景 示例 客服投诉 订单、退款、物流、系统故障 学习辅导 学不会、考试焦虑、代码报错 工作压力 加班、沟通冲突、任务失败 情绪倾诉 难过、焦虑、失落 决策支持 不知道如何选择 高风险表…...

从0到1掌握Ansible:让自动化运维不再是梦想

最近在公司推进自动化运维的时候&#xff0c;发现很多同事对Ansible还是一知半解&#xff0c;要么就是简单用用&#xff0c;要么就是直接放弃。其实Ansible真的没那么复杂&#xff0c;我用了这么多年&#xff0c;今天就把我的实战经验分享给大家。 说实话&#xff0c;刚开始接…...

那些“假装很忙”的员工,正成为中小企业老板最大的管理黑洞

作为一名常年给企业做数字化诊断的顾问&#xff0c;我发现很多老板都有一个共同的“心病”&#xff1a;走进办公室&#xff0c;满屋子都是噼里啪啦的打字声&#xff0c;每个人看起来都在埋头苦干&#xff0c;但一到交付节点&#xff0c;进度总是莫名其妙地卡壳。这种“办公室伪…...