C语言 循环结构

news2024/11/24 9:48:44

while循环和for循环都是入口条件循环,即在循环的每次迭代之前检查测试条件,所以有可能根本不执行循环体中的内容。C语言还有出口条件循环(exit-condition loop),即在循环的每次迭代之后检查测试条件,这保证了至少执行循环体中的内容一次。

入口条件循环:while

while语句创建了一个循环,重复执行直到测试表达式为假或0。while语句是一种入口条件循环,也就是说,在执行多次循环之前已决定是否执行循环。因此,循环有可能不被执行。循环体可以是简单语句,也可以是复合语句。

格式:

while(表达式expression)

{

  循环体statement;

}

运行顺序:

当表达式为真,则执行下面的语句;语句执行完之后再判断表达式是否为真,如果为真,再次执行下面的语句;然后再判断表达式是否为真……就这样一直循环下去,直到表达式为假,跳出循环。这个就是 while 的执行顺序。
注意,初学者编程时,if、else、for、while、do 后面的执行语句不论有多少行,就算只有一行也要加“{}”,养成良好的编程习惯尤为重要。

#include<stdio.h>

int main(void)

{

 long num;

 long sum=0L;

 int status;

 printf("Please enter an integer to be summed(q to quit):\n");

 status=scanf("%ld",&num);

 while(status==1)

 {

   sum=sum+num;

   printf("Please enter an integer to be summed(q to quit):\n");

   status=scanf("%ld",&num);

 }

 printf("Sum is %ld",sum);

 getchar();

 getchar();

 return 0;

}

总之,因为while循环是入口条件循环,程序在进入循环体之前必须获取输入的数据并检查status的值,所以在 while 前面要有一个 scanf()。要让循环继续执行,在循环内需要一个读取数据的语句,这样程序才能获取下一个status的值,所以在while循环末尾还要有一个scanf(),它为下一次迭代做好了准备。

关系运算符

< 小于

> 大于

<= 小于或等于

== 等于

>= 大于或等于

!= 不等于

优先级

关系运算符之间有两种不同的优先级

高优先级组: <<= >>=

低优先级组: == !=

关系表达式

关系为真,关系表达式的值为1;关系为假,关系表达式的值为0

入口条件循环:for

for语句使用3个表达式控制循环过程,分别用分号隔开。initialize表达式在执行for语句之前只执行一次;然后对test表达式求值,如果表达式为真(或非零),执行循环一次;接着对update表达式求值,并再次检查test表达式。for语句是一种入口条件循环,即在执行循环之前就决定了是否执行循环。因此,for循环可能一次都不执行。statement部分可以是一条简单语句或复合语句。

格式:

for(表达式1initialize;表达式2test;表达式3update;)

 statement

1.用于初始化,只用一次 2.判断 3.遍历(i=i+1)

二者联系

在 for 循环的格式中,表达式 1、表达式 2 和表达式 3 在 while 循环中一个也不少,只不过不像 for 循环那样写在一起,而是分开写。在 while 循环中,循环变量 i 在定义的时候就给它赋初值,++i 则是写在 while 的循环体内。只有循环判断表达式与 for 一样,都是写在其后的括号中。
那么,是不是所有的 for 循环都可以转化成 while 循环?答案是“Yes”!不仅如此,所有的 while 循环也都可以转化成 for 循环,for 循环和 while 循环可以相互转换。
当程序中需要用到循环结构时,for 循环和 while 循环都可以使用,具体如何选择要根据实际情况分析。比如死循环往往就是用 while(1),这样更方便!

二者区别

一、循环的结构不同

for循环的表达式为:

for(单次表达式;条件表达式;末尾循环体)

{

 中间循环体;

}

while循环的表达式为:

while(表达式)

{

 循环体;

}

二、执行条件的判断方式不同

for循环执行末尾循环体后将再次进行条件判断,若条件还成立,则继续重复上述循环,当条件不成立时则跳出当下for循环。

while循环当满足条件时进入循环,进入循环后,当条件不满足时,执行完循环体内全部语句后再跳出(而不是立即跳出循环)。

三、使用的目的不同

for循环的目的是为了限制循环体的执行次数,使结果更精确。

while循环的目的是为了反复执行语句或代码块。

四、语法不同

for循环的语法为:for (变量 = 开始值;变量<= 结束值;变量 = 变量 + 步进值) {需执行的代码 }。

while循环的语法为:while (<条件>) {需执行的代码 }。

出口条件循环:do while

do while 语句创建一个循环,在 expression 为假或 0 之前重复执行循环体中的内容。do while语句是一种出口条件循环,即在执行完循环体后才根据测试条件决定是否再次执行循环。因此,该循环至少必须执行一次。statement部分可是一条简单语句或复合语句。

格式

do

{

 statement;

}while(expression);

如何选择循环?

如何选择使用哪一种循环?首先,确定是需要入口条件循环还是出口条件循环。通常,入口条件循环用得比较多,有几个原因。其一,一般原则是在执行循环之前测试条件比较好。其二,测试放在循环的开头,程序的可读性更高。另外,在许多应用中,要求在一开始不满足测试条件时就直接跳过整个循环。

那么,假设需要一个入口条件循环,用for循环还是while循环?这取决于个人喜好,因为二者皆可。要让for循环看起来像while循环,可以省略第1个和第3个表达式。例如:

for ( ; test ; )

与下面的while效果相同:

while ( test )

要让while循环看起来像for循环,可以在while循环的前面初始化变量,并在while循环体中包含更新语句。例如:

初始化;

while ( 测试 )

{

 其他语句更新语句

}

与下面的for循环效果相同:

for ( 初始化 ;测试 ; 更新 )

 其他语句

一般而言,当循环涉及初始化和更新变量时,用for循环比较合适,而在其他情况下用while循环更好。对于下面这种条件,用while循环就很合适:

while (scanf("%ld", &num) == 1)

对于涉及索引计数的循环,用for循环更适合。例如:

for (count = 1; count <= 100; count++)

嵌套循环

指一个循环内包含另一个循环

嵌套循环中的内层循环在每次外层循环迭代时都执行完所有的循环

6.17

#include<stdio.h>

#define ROWS 6

#define CHARS 10

int main(void)

{

 int row;

 char ch;

 for(row=0;row<ROWS;row++)

 {

   for(ch='A';ch<('A'+CHARS);ch++)

   printf("%c",ch);

   printf("\n"); //换行

 }

 getchar();

 getchar();

 return 0;

}

6.18

#include<stdio.h>

int main(void)

{

 const int ROWS=6;

 const int CHARS=6;

 int row;

 char ch;

 for(row=0;row<ROWS;row++)

 {

   for(ch=('A'+row);ch<('A'+CHARS);ch++) //对ch重新初始化

   printf("%c",ch);

   printf("\n");

 }

 getchar();

 getchar();

 return 0;

}

多个循环是否可以合并成一个循环?

可以。合并后的程序显得更加紧凑。但是,调整时要注意遵循模块化(modularity)的原则。模块化隐含的思想是:应该把程序划分为一些独立的单元,每个单元执行一个任务。这样做提高了程序的可读性。也许更重要的是,模块化使程序的不同部分彼此独立,方便后续更新或修改程序。在掌握如何使用函数后,可以把每个执行任务的单元放进函数中,提高程序的模块化。

continue语句

作用:

执行到该语句时,会跳过本次迭代的剩余部分,并开始下一轮迭代。如果其在嵌套循环之内,只会影响包含该语句的内层循环。

应用:

所用循环都可以使用,但是switch语句不行。

优点:

a.减少主语句组中的一级缩进。当语句很长或嵌套较多时,紧凑简洁的格式提高了代码的可读性。

b.用作占位符,提高可读性。

while(getchar() !='\n')

 ;

改进:

while(getchar() !='\n')

 continue;

continue语句让程序跳过循环体的余下部分,那么,从何处开始继续循环?

对于while和do while循环,执行continue语句后的下一个行为是对循环测试表达式求值。

对于for循环,执行continue后的下一个行为是对更新表达式求值,然后是对循环测试表达式求值。

对于while和for循环,程序执行到continue语句后会开始进入下一轮迭代。

对于do while循环,对于出口条件求值后,如有必要会进入下一轮迭代。

break语句

作用:

程序执行到循环中的break语句时,会终止包含它的循环,并继续执行下一阶段。如果break语句位于嵌套循环内,它只会影响包含它的当前循环。break还可用于因其他其他原因退出循环的情况。

应用:

所有的循环和switch语句都可以使用break语句。

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

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

相关文章

Python 比较出2个list中相同的内容,忽略大小写

2个list 比较出相同的内容&#xff0c;忽略大小写 大致思路如下&#xff1a; 首先让list里面的内容都转成大写或者小写&#xff0c;之后在遍历其中一个list 来判断是否在另外一个list中 代码 a ["Apple", "Banana", "Pear", "Peach&q…

快递批量查询高手软件:一键批量分析已揽收单号

每天都需要同时货好几家快递呢&#xff0c;发货的量也是比较大&#xff0c;平时大家时什么跟踪快递呢&#xff0c;如何在大量单号找出已揽收或未揽收单号呢&#xff1f;有没有便捷方法&#xff0c;可以批量筛选出单号呢&#xff0c;想知道得跟着小编往下看。 1.首先我们在电脑…

用原生js写一个弹窗消息提醒插件(转载)

https://www.cnblogs.com/mr-zhima/p/10909950.html 喏&#xff0c;就是这么一个效果。 1. 分析 当消息被触发的时候&#xff0c;会有一个自上而下的淡入过程。在持续了一段时间后会自动的消失&#xff0c;或者是需要用户来手动的点击关闭按钮。在消息消失的时候&#xff0c;…

ChatGPT 现在可以看、听和说话了!

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

javaee之黑马乐优商城6

商品品牌的查询 上面就是我们需要根据分类id去找品牌 假设我们现在拿到的是 商品的分类id&#xff0c;我们需要根据分类id查询出对应的品牌即可 下面我们拿到上面的接口&#xff0c;直接撸代码 这个是和品牌相关联的操作&#xff0c;因为先去看一下BrandMapper,这个mapper是…

协议-SSL协议-基础概念01-SSL位置-协议套件-握手和加密过程-对比ipsec

SSL的位置-思维导图 参考来源&#xff1a; 华为培训ppt:HCSCE122_SSL VPN技术 ##SSL的位置 SSL协议套件 ​​​​握手阶段&#xff0c;完成验证&#xff0c;协商出密码套件&#xff0c;进而生成对称密钥&#xff0c;用于后续的加密通信。 加密通信阶段&#xff0c;数据由对…

深入理解红黑树

小白慎入&#xff01;本文难度比较高&#xff0c;需要对红黑树有一定的了解再来看&#xff01; 红黑树 红黑树是一种高级数据结构&#xff0c;是平衡树大家族中的一员&#xff0c;并且听名字就知道这个玩意不是凡物&#xff0c;可能你从未听过&#xff0c;但是你一定会为这样的…

微前端无界 项目使用记录

1预期目标和场景 一个vue框架开发的应用&#xff0c;需要使用另一个系统的页面。 通俗来说&#xff0c;就是在一个web应用中独立的运行另一个web应用 2 技术支持 微前端处理方案&#xff1a;无界 无界官网&#xff1a; https://wujie-micro.github.io/doc/guide/ CSDN 参考…

金蝶云星空和聚水潭单据接口对接

金蝶云星空和聚水潭单据接口对接 对接源平台:聚水潭 聚水潭成立于2014年&#xff0c;创始人兼CEO骆海东拥有近三十年传统及电商ERP的研发和实施部署经验。聚水潭创建之初&#xff0c;以电商SaaSERP切入市场&#xff0c;凭借出色的产品和服务&#xff0c;快速获得市场的肯定。随…

如何给Nginx配置访问IP白名单

一、Nginx配置访问IP白名单 有时部署的应用需要只允许某些特定的IP能够访问&#xff0c;其他IP不允许访问&#xff0c;这时&#xff0c;就要设置访问白名单&#xff1b; 设置访问白名单有多种方式&#xff1a; 1.通过网络防火墙配置&#xff0c;例如阿里云/华为云管理平台 2.…

计算机竞赛 深度学习人脸表情识别算法 - opencv python 机器视觉

文章目录 0 前言1 技术介绍1.1 技术概括1.2 目前表情识别实现技术 2 实现效果3 深度学习表情识别实现过程3.1 网络架构3.2 数据3.3 实现流程3.4 部分实现代码 4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习人脸表情识别系…

数独C++代码实现

数独是源自18世纪瑞士的一种数学游戏。中文中“数独”一次&#xff0c;实际上是源自于日语对于数独的音译。是一种运用纸、笔进行演算的逻辑游戏。玩家需要根据99盘面上的已知数字&#xff0c;推理出所有剩余空格的数字&#xff0c;并满足每一行、每一列、每一个粗线宫&#xf…

LeetCode 75.颜色分类

题目链接 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目解析 题意很清楚&#xff0c;让0,1,2按照顺序排好&#xff0c;但是不能使用sort库函数。 将数组分为四部分&#xff0c;分别是&#xff1a; // [0,left] 0 // [left,i] 1 // [i,right] 未…

华为数通方向HCIP-DataCom H12-831题库(单选题:161-180)

第161题 某台路由器Router LSA如图所示,下列说法中错误的是? A、本路由器已建立邻接关系 B、本路由器为DR C、本路由支持外部路由引入 D、本路由器的Router ID为10.0.12.1 答案: B 解析: 一类LSA的在transnet网络中link id值为DR的route id ,但Link id的地址不是10.0.12.…

Unity之NetCode多人网络游戏联机对战教程(4)--连接申请ConnectionApproval

文章目录 前言适用场景1. 准备2.新建GameManager3.编译运行4.脚本详解后话 前言 没看过前面的教程请先阅读前面的教程&#xff0c;本期将会讲到Netcode联机的申请&#xff0c;当一个Client想连接进来&#xff0c;应向Server发送申请联机的信息&#xff0c;然后由服务端向客户端…

EasyExcel的源码流程(导入Excel)

1. 入口 2. EasyExcel类继承了EasyExcelFactory类&#xff0c;EasyExcel自动拥有EasyExcelFactory父类的所有方法&#xff0c;如read()&#xff0c;readSheet()&#xff0c;write()&#xff0c;writerSheet()等等。 3. 进入.read()方法&#xff0c;需要传入三个参数(文件路径…

免杀对抗-C#+go语言-混淆+防反编译+分离

C#&NET-ShellCode-生成/上线 一、生成&#xff1a; 1.msf生成C#语言的shellcode 命令&#xff1a;msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST192.168.206.192 LPORT4444 -e x86/shikata_ga_nai -i 15 -f csharp 二、上线&#xff1a; 1.c#语言shellcode加载代…

如何通过PreMaint设备管理提高制药行业的质量控制和合规性

在制药行业&#xff0c;确保产品的质量和合规性是至关重要的。制药企业必须严格遵守各种法规&#xff0c;以满足患者的需求并确保他们的产品安全有效。为了达到这些目标&#xff0c;制药企业越来越倾向于采用现代化的设备管理系统&#xff0c;如PreMaint。本文将探讨如何通过Pr…

ElementUI之动态树及书籍的分页查询

目录 一.前言 二.Element之动态树 2.1 后台 2.2 前台 三. 动态表格--书籍的分页查询 一.前言 本文章是继上篇的案例之上教大家如何使用ElementUI去实现动态树和书籍的分页查询&#xff0c;如果有不懂的大家可以翻看上篇的博客查看&#xff0c;其中的样式是ElementUI的官网提…

任正非:天空足够大,世界会越来越兴盛

近日&#xff0c;华为公司创始人任正非与南开大学新闻与传播学院院长、科技日报原总编辑刘亚东今年7月7日在深圳一间咖啡厅的对话最新曝光。 在对话过程中&#xff0c;任正非以“拉法尔喷管”来描述华为的研发体系: “喇叭口”吸收宇宙能量&#xff0c;经过理论研究&#xff0…