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

C语言学习_DAY_5_循环结构while和for语句【C语言学习笔记】

高质量博主,点个关注不迷路🌸🌸🌸

目录

I. 案例引入

II. while语句

III. do while语句

IV. for语句


前言: 书接上回,判断结构已经解决,接下来是另一种很重要的结构:循环结构的实现,在C语言中,有两种循环结构的实现方式,一种是用while语句实现,另一种则是通过for语句实现,我们在本篇笔记中对两种语句进行讲解。

I. 案例引入

首先,我们理解为什么我们需要循环结构,我们看这样一个需求:

现在我想要输出从1到100,总计一百个数字,我们要如何实现呢?

方法一:手写一百条printf()语句

但显然方法一不可取,因为方法一产生了庞大的代码量,既不利于编写程序,也不利于阅读和纠错,并且当我更改需求时,例如从1到10000,则会导致程序无法被快速的修改。

方法二:使用一种循环的结构,循环一百次,每次循环输出一个数字。

显然,方法二才是我们需要的方法,同时引出了我们的学习目标:while和for两种循环语句。


II. while语句

首先介绍第一种实现循环的语句:while语句

while语句的语法格式是这样的:

while(条件表达式){

        当条件表达式为真时,会循环执行的内容

}

看到这个格式定义之后,我们先思考一个问题:

假设有这样的一段程序:

#include<stdio.h>int main(){int a = 3;while(a > 0){printf("%d\n",a);}return 0;
}

这段程序执行后,会发生什么呢?我们分析一下:

首先,a被赋值3,而后进入while语句,while判断a是否大于零,而很显然,a是大于零的,于是执行while语句内部的执行内容,是打印a的值,打印之后,又进行下一次判断,但是,由于a的值并没有发生修改,所以这个循环会一直执行下去,也就是说,它会一直输出a的值3:

当出现这种情况时,往往是因为我们的判断表达式中的变量在循环中并没有修改,进而引发了无限的循环,我们通常称之为死循环。

死循环是一种错误,我们需要避免它,避免的方法就是要确保我们的条件表达式中的变量会随着循环的执行而修改。

例如我们要实现打印1到100,一百个数字,可以这么写:

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

这段程序中,当每一次循环在执行的过程中,while的判断表达式的变量a的值都在自增,于是我们就实现了破除死循环的效果,当a的值增加到101时,由于不满足a <= 100,循环发生了终止。


III. do while语句

学习了while循环语句后,我们介绍它的一个变种,叫do while语句。do while语句有什么作用呢?我们先看一个例子:

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

上面是一段while循环的例子,这个例子中,a的值是1,而while的判断条件是a<0,于是乎循环一次也不会执行,即我们运行后没有任何效果:

现在我提出需求: 还是上面的这段程序,不修改while的条件表达式,也不修改a的值,如何让这个循环执行一次,而后退出呢?这就引入了do-while语句:

do{

       会先执行一次,而后检查while中的条件表达式,如果符合条件,则继续循环,否则退出

} while(条件表达式);

也就是说,使用了do-while时,无论条件是否成立,do中的语句会先执行一次,而后才进行判断;当第一次无条件执行过后,do-while的逻辑完全等价于while,即条件成立则继续执行,否则退出循环。于是上面的需求可以用下面的代码实现:

#include<stdio.h>int main(){int a = 1;do{printf("%d",a);}while(a < 0);return 0;
}

 这段代码执行之后,会输出一次a,而后由于不满足条件,退出了循环:


IV. for语句

介绍完了while循环语句之后,我们介绍另一种循环语句:for语句,for语句相较于while,具有更高的灵活度,但相应的,格式也会更复杂一些,我们先看一下它的通用格式:

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

        循环体

}

看这个通用格式,其实看不出它的执行逻辑,因此我们再进一步深究一下:

表达式1:表达式1通常是用来做一些对变量赋值的操作,这些变量往往是控制循环执行次数的变量,例如我们使用变量a作为控制循环执行次数的变量,那么表达式1可以是:a = 1

表达式2: 表达式2是用来判断循环是否能够继续执行下去的判定式,例如我们可以写: a < 10,表示当a小于10时,循环继续执行

表达式3: 表达式3一般用来对控制循环执行次数的变量的值进行修改,以便跳出循环,避免死循环的发生。

那么这三个表达式,和循环体,它们的执行次序是怎么样的呢?

表达式1(只会执行一次) - - - > 表达式2 - - - > 循环体 - - - > 表达式3

也就是说,表达式3,对变量值的修改,发生在循环体之后,但很多新手认为三个表达式是先执行的,而后执行循环体,因此我们可以用一段代码验证表达式3确实在循环体之后执行:

#include<stdio.h>int main(){int a;for(a = 1;a >= 1 ; a --){printf("a = %d",a);}return 0;
}

上面这段代码很有意思,如果说,表达式3先于循环体执行,也就是按照:

表达式1(只会执行一次) - - - > 表达式2 - - - > 表达式3 - - - > 循环体

这样的顺序执行,那么我们分析一下输出的a的值:

表达式1执行后,a = 1

表达式2执行后,a = 1 不变

表达式3执行后,a = a - 1 = 0

于是输出结果为0,但我们运行代码发现:

因而我们证明了循环体确实在表达式3之前执行,也即for循环三个表达式与循环体执行顺序应该为:

表达式1(只会执行一次) - - - > 表达式2 - - - > 循环体 - - - > 表达式3 (牢记次序)

另外补充一个细节:

在C语言中,"通常" 不支持在表达式1中对变量进行声明,而只可以赋值,即不支持:

int a = 1

而支持 

a = 1

因此我们通常是这样写的:

#include<stdio.h>int main(){int a;for(a = 1;a >= 1 ; a --){printf("a = %d",a);}return 0;
}

即先声明a,而后在for中进行赋值操作(当然,现在的编译器可能支持在for中第一个表达式里定义,但通常不这样写。)

那到这里,循环语句也已学习完成,我们继续向C语言入门冲锋!

相关文章:

C语言学习_DAY_5_循环结构while和for语句【C语言学习笔记】

高质量博主&#xff0c;点个关注不迷路&#x1f338;&#x1f338;&#x1f338;&#xff01; 目录 I. 案例引入 II. while语句 III. do while语句 IV. for语句 前言: 书接上回&#xff0c;判断结构已经解决&#xff0c;接下来是另一种很重要的结构&#xff1a;循环结构的实…...

JavaScript高级程序设计读书分享之4章——4.3垃圾回收

JavaScript高级程序设计(第4版)读书分享笔记记录 适用于刚入门前端的同志 4.3.3 性能 垃圾回收程序会周期性运行&#xff0c;如果内存中分配了很多变量&#xff0c;则可能造成性能损失&#xff0c;因此垃圾回收的 时间调度很重要。尤其是在内存有限的移动设备上&#xff0c;垃圾…...

Java线程的6 种状态

Java 线程的状态 Java线程有六种状态&#xff1a; 初始&#xff08;NEW&#xff09;、运行&#xff08;RUNNABLE&#xff09;、阻塞&#xff08;BLOCKED&#xff09;、 等待&#xff08;WAITING&#xff09;、超时等待&#xff08;TIMED_WAITING&#xff09;、终止&#xff08…...

5年测试在职经验之谈:3年手工测试、2年的自动化测试,从入门到不可自拔...

毕业3年了&#xff0c;学的是环境工程专业&#xff0c;毕业后零基础转行做软件测试。 已近从事测试行业8年了&#xff0c;自己也从事过3年的手工测试&#xff0c;从事期间越来越觉得如果一直在手工测试的道路上前进&#xff0c;并不会有很大的发展&#xff0c;所以通过自己的努…...

QHash-官翻

QHash 类 template <typename Key, typename T> class QHash QHash 类是一种模板类&#xff0c;提供基于哈希表的字典类结构。更多内容… 头文件:#include <QHash>qmake:QT core派生类:QMultiHash 所有成员列表&#xff0c;包括继承的成员废弃的成员 注意&…...

MYSQL 配置优化

max_connections 允许客户端并发连接的最大数量&#xff0c;默认值是151。 show status like %connections%; 设置参数值应大于Max_used_connections。如果使用连接池&#xff0c;可参考连接池的最大连接数和每个连接池的数量作为参考设置 innodb_buffe_pool_instances Inno…...

多 态

1多态的基本概念多态是C面向对象三大特性之一多态分为两类静态多态: 函数重载和运算符重载属于静态多态&#xff0c;复用函数名动态多态: 派生类和虚函数实现运行时多态静态多态和动态多态区别:静态多态的函数地址早绑定–--编译阶段确定函数地址动态多态的函数地址晚绑定–--运…...

Java集合

集合、数组都是对多个数据进行存储操作的结构&#xff0c;简称java容器 &#xff08;此时的存储&#xff0c;主要指的是内存层面的存储&#xff0c;不涉及持久化的存储&#xff09; 数组存储的特点&#xff1a; 一旦初始化&#xff0c;其长度就确定了。数组一旦定义好&#x…...

高校借力泛微,搭建一体化、流程化的​内控管理平台

财政部《行政事业单位内部控制规范&#xff08;试行&#xff09;》中明确规定&#xff1a;行政事业单位内部控制是指通过制定制度、实施措施和执行程序&#xff0c;实现对行政事业单位经济活动风险的防范和管控&#xff0c;包括对其预算管理、收支管理、采购管理、资产管理、建…...

使用人工智能赚钱的方式,行业领域有哪些?

使用人工智能赚钱的方式&#xff0c;行业领域有哪些&#xff1f;不少于2000字。 一、人工智能的应用领域 1、金融服务&#xff1a;金融服务行业是人工智能应用的领域之一&#xff0c;它可以帮助银行、信用卡公司等金融机构实现快速、有效的贷款审批&#xff0c;以及客户分析、…...

【数组中重复的数字】-C语言-题解

原题链接&#xff1a;数组中重复的数字 一、描述&#xff1a; 在一个长度为 n 的数组 nums 里的所有数字都在 0&#xff5e;n-1 的范围内。数组中某些数字是重复的&#xff0c;但不知道有几个数字重复了&#xff0c;也不知道每个数字重复了几次。请找出数组中任意一个重复的数…...

C++调用Python脚本进行18次循环操作后,脚本不执行

C调用Python脚本进行18次循环操作后&#xff0c;脚本不执行 现象&#xff1a; 发送端接收端 从第二张图中可以看出&#xff0c;python脚本卡在’[parkin_debug] 6’与’[parkin_debug] 7’之间 该测试经过多次反复测试&#xff0c;均在第18次循环执行时&#xff0c;出现上述问…...

字节10年架构师职业发展经历,助你做好职业规划

一直以来程序员这一职业都给人高薪资的印象&#xff0c;近年来随着互联网行业的快速发展&#xff0c;程序员更是人满为患&#xff0c;然而很多人关注的却是程序员的薪资&#xff0c;而非职业本身。 一批批程序员进入工作岗位&#xff0c;但是很多人并没有对自己的职业生涯有清…...

ArrayList真的是因为实现了RandomAccess接口才能做到快速随机访问的吗

ArrayList和RandomAccess接口RandomAccess 接口Collections.binarySearch()源码总结RandomAccess 接口 首先&#xff0c;RandomAccess接口是什么&#xff0c;以下代码可见&#xff1a; public interface RandomAccess { }RandomAccess接口其实是一个标记接口&#xff0c;它只…...

OSI七层模型与物理层与设备链路层

目录 协议 举例 OSI七层模型 理解七层模型 以下为OSI七层模型数据逐层封装和数据逐层解封的过程 TCP/IP参考模型 数据包的层层封装与层层拆包 各层的数据以及协议 封装所用的协议的数字表示形式 物理层 模拟信号 模拟信号特点 数字信号 数字信号特点 数据通信模…...

Java8的Optional类的使用 和 Stream流式操作

Java知识点总结&#xff1a;想看的可以从这里进入 目录13.6、Optional类13.7、Stream13.7.1、Stream创建13.7.2、中间操作1、筛选2、切片3、映射4、排序13.7.3、终止操作1、遍历2、聚合3、匹配查找4、归约5、收集归集统计分组字符串拼接归约13.6、Optional类 Optional类是一个…...

Authorization Server 认证服务

Hi Auth HiAuth是一个开源的基于Oauth2协议的认证、授权系统&#xff0c;除了标准的Oauth2授权流程功能外&#xff0c;还提供了应用管理、用户管理、权限管理等相关功能。 在这个项目中你能够了解到如何基于spring-security-oauth2-authorization-server实现自己的Authorizat…...

研制过程评审活动(五)生产定型阶段

1. 生产定型阶段主要任务 生产定型的主要任务是对产品批量生产条件和质量稳定情况进行全面考核,以确认产品是否达到批量生产的标准。   需要生产定型的军工产品,在完成设计定型并经小批量试生产后、正式批量生产之前,进行生产定型。生产定型的条件和时间,由定委在批准设计…...

NCUT加权的NMF

矩阵定义 X&#xff1a;特征矩阵&#xff0c;矩阵的维度为体素数mx&#xff08;指标数x被试数&#xff09;n S&#xff1a;相似性矩阵&#xff0c;由特征矩阵的每一行计算皮尔逊相关得到mxm的方阵 D&#xff1a;度矩阵&#xff0c;度矩阵的对角线元素由相似性矩阵S对应的行和…...

从0开始的ios自动化测试

最近由于工作内容调整&#xff0c;需要开始弄ios自动化了。网上信息有点杂乱&#xff0c;这边我就按我的实际情况&#xff0c;顺便记录下来&#xff0c;看是否能帮到有需要的人。 环境准备 安装tidevice pip3 install -U “tidevice[openssl]” 它的作用是&#xff0c;帮你绕…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...