【C语言】循环语句(语句使用建议)

文章目录

      • **while循环**
      • **while循环的实践**
      • **补充:if语句与while语句区别**
      • **for循环(使用频率最高)**
      • **for循环的实践**
      • **while循环和for循环的对比**
      • **Do-while循环**
      • **break和continue语句**
      • **循环的嵌套**
      • **goto语句(不常用)**
      • **循环语句的效率(来自于高质量的C/C++编程书籍)**

循环语句

循环结构:允许一段代码重复执行直到满足某个特定条件,循环语句有效地编写代码,避免复杂度–>使用for、while、do while等实现循环结构使用for、while、do while等实现循环结构

本次开始循环结构的学习,会有习题加深理解

请添加图片描述

while循环

语法:
while(循环条件)循环体语句块
  • (1) 判断循环条件是否满足,不满足就退出循环体。
  • (2) 执行循环体。
  • (3) 返回第(1)步

如果循环条件根本不能成立,则不执行循环体,若循环条件总是成立,则成为死循环。根据不同实际需要来控制循环条件和控制循环变量数值

//如果条件一直满足,就会出现死循环
while(1)
{   printf("死循环\n")}

while循环的实践

在屏幕上打印1~10的数值

int mian()
{int i=0;while(i<=10){printf("%d ", i);i = i+1;}return 0;
}

补充:if语句与while语句区别

if和while语句在语法结构是十分相似

if(条件表达式)语句块
while(循环条件)语句块

区别:虽然if和while语句都是通过循环条件,判断是否执行语句块,但是while语句是循环语句,意味着while中的语法块可以多次执行,直到不满足条件表达式。

for循环(使用频率最高)

语法:
for(表达式1;表达式2;表达式3)循环体语句块
  • 表达式1:用于循环变量的初始化–省略不对循环控制变量赋值

  • 表达式2:用于循环结束条件判断–省略进入死循环

  • 表达式3:用于循环变量调整–省略不对循环控制变量经行调整

  • (1)计算初始表达式

  • (2)判断循环条件,若满足,则执行;否则,退出循环。

  • (3)执行循环

  • (4)返回第(2)步

整个循环过程中,表达式1初始化部分只被执行1次,剩下就是表达式2、循环语句、表达式3在循环。

for循环的实践

在屏幕上打印1~10的数值

int main()
{for(int i=0;i<10;i++){printf("%d\n",i);}return 0;
}

while循环和for循环的对比

请添加图片描述

while和for在实现循环中,都有三个部分:循环变量初始化、条件表达式、控制循环变量大小。从形式来说for循环的三个部分非常集中方便代码的维护,而while循环的三个部分比较分散

当需要使用循环语句时,while循环和for循环都是不错的选择。

小技巧:当不知道for循环判断条件怎么设定,可带入个临界值对比预期效果,再进行调整判断条件

重点还是放在上面的循环语句

Do-while循环

语句:
do循环体语句块while(循环条件);//不要忘记;号

Do-while语句属于当型循环结构,至少循环一次循环体语句再经行判断循环条件是否继续进入循环中

  • (1) 执行一次循环体。
  • (2) 判断是否满足循环条件,若满足,则循环,转到(1)继续执行;否则,执行随后的语句。

break和continue语句

在循环执行过程中,可能会出现状况,需要提前终止循环。C语言提供了break和continue关键字。

break:是终止本级循环,常用于for,while,do以及switch语句中。当执行一个循环体时,break被执行将立刻跳出循环体,且只退出本级循环

continue:是跳过(不执行)本次循环continue后面的代码,转为继续执行下一次循环体。for循环和while循环中有所差异,在于受到调整循环变量大小位置上的影响

请添加图片描述

循环的嵌套

前面学习for、while、Do-while循环,这三种循环往往嵌套在一起可以更好的解决问题

比如:实现排序,做题

练习:打印100~200之间的素数(素数⼜称质数,只能被1和本身整除的数字)

int main()
{for (int i = 101; i <= 200; i=i+2)//产生100到200的数字--偶数一定是素数{int flag = 1;for (int j = 2; j < i; j++)//能被2到N-1整除的不是素数{if (i % j == 0){flag = 0;break;}}if(flag==1)printf("%d ",i);}return 0;
}

goto语句(不常用)

如果需要实现在同一个函数内跳转到设置好的标号处的效果,可以用到goto语句和跳转标号。

int mian()
{printf("准备开始\n");goto next;printf("被跳过");next;printf("程序来到这里");return 0}

这里就像goto next与next中内容被注释掉,既然goto语句具有跳转的效果,如果使用不当,可能会打乱程序执行的流程
使用场景:适用于跳出多层循环,比如嵌套三层for循环需要提前跳出循环,需要三个break才能跳出循环,而goto可以更加快捷跳出循环
建议:自从提倡结构化设计以来,goto就成为有争议的语句,goto语句能不用就不使用

循环语句的效率(来自于高质量的C/C++编程书籍)

这里主要提及了三个方面

  1. 长短循环在不同层循环的效率问题
  2. 循环体中逻辑判断设计的效率问题
  3. for循环变量范围的书写问题

1.尽量应当将最长的循环放在最内层,最短的循环放在最外层,为了减少CPU切换循环层的次数,以便于提高程序效率

请添加图片描述

2.如果循环体内存在逻辑判断,并且循环次数很大,应将逻辑判断移到外面

3.for语句中循环控制变量循环体的外面,目的为了高效保持循环"流水线"作业,使得编译器能对循环进行优化处理,提高效率。如果N非常大,推荐右边的写法,可以提高效率如果N非常小,两者效率差别并不明显,建议采用左边的写法,因为程序可读性更强

请添加图片描述

个人理解:如果需要多次使用判断语句,这样子会导致流水线会停下来,影响到效率,将判断放外面先经行判断,再高效地循环"流水线"工作

3.1不能在for循环体内修改循环变量,可以调整循环变量大小,防止for循环失控

3.2 for循环中循环控制变量的取值采用“半开半闭区间”写法,这样的写法更加直观知道起点到终点的间隔为多少,循环次数为多少

1.for(int i=0;i<N;i++)  2.for(int i=0;i<=N-1;i++)

个人理解:两者的功能是相同的,不管上面的那一种写法并不是固定的,还是根据实际需要选择,如果是实现一样的效果,还是推荐"半开半闭区间",不要忘记循环判断条件取值得小妙招!

感谢各位的观看,本店先更新完C语言章节,C++系列,在C语言系列结束更新。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

css 如何获取分辨率(使用@media查询)

在CSS中&#xff0c;可以使用media查询来应对不同的屏幕分辨率。例如&#xff0c;您可以为不同的屏幕宽度设置不同的样式规则。 /* 针对屏幕宽度小于600px的样式 */ media screen and (max-width: 599px) {body {background-color: lightblue;} }/* 针对屏幕宽度大于或等于600…

使用光标精灵更换电脑鼠标光标样式,一键安装使用

想要让自己在使用电脑时更具个性化&#xff0c;让工作和娱乐更加愉快&#xff0c;改变你的电脑指针光标皮肤可能是一个简单而有效的方法。很多人或许并不清楚如何轻松地调整电脑光标样式&#xff0c;下面我就来分享一种简单的方法。 电脑光标在系统里通常只有几种默认图案&…

流畅的 Python 第二版(GPT 重译)(一)

前言 计划是这样的&#xff1a;当有人使用你不理解的特性时&#xff0c;直接开枪打死他们。这比学习新东西要容易得多&#xff0c;不久之后&#xff0c;活下来的程序员只会用一个容易理解的、微小的 Python 0.9.6 子集来编写代码 。 Tim Peters&#xff0c;传奇的核心开发者&am…

Spring Web MVC入门(5)

响应 在我们前面的代码例子中, 都已经设置了响应数据Http响应结果可以是数据, 也可以是静态页面, 也可以针对响应设置状态码, Header信息等. 返回静态页面 创建前端页面index.html(注意路径) html代码如下: <!DOCTYPE html> <html lang"en"> <hea…

window下安装并使用nvm(含卸载node、卸载nvm、全局安装npm)

window下安装并使用nvm&#xff08;含卸载node、卸载nvm、全局安装npm&#xff09; 一、卸载node二、安装nvm三、配置路径和下载源四、使用nvm安装node五、nvm常用命令六、卸载nvm七、全局安装npm、cnpm八、遇到的问题 nvm 全名 node.js version management&#xff0c;顾名思义…

PyTorch 深度学习(GPT 重译)(二)

四、使用张量表示真实世界数据 本章内容包括 将现实世界的数据表示为 PyTorch 张量 处理各种数据类型 从文件加载数据 将数据转换为张量 塑造张量&#xff0c;使其可以作为神经网络模型的输入 在上一章中&#xff0c;我们了解到张量是 PyTorch 中数据的构建块。神经网络…

列表的循环遍历

列表的遍历 - while循环 既然数据容器可以存储多个元素&#xff0c;那么&#xff0c;就会有需求从容器内依次取出元素进行操作。 将容器内的元素依次取出进行处理的行为&#xff0c;称之为&#xff1a;遍历&#xff0c;迭代 如何遍历列表的元素呢&#xff1f; 可以使用前面…

阿里云轻量应用服务器和ECS服务器有啥区别?2024年整理对比表

阿里云服务器ECS和轻量应用服务器有什么区别&#xff1f;轻量和ECS优缺点对比&#xff0c;云服务器ECS是明星级云产品&#xff0c;适合企业专业级的使用场景&#xff0c;轻量应用服务器是在ECS的基础上推出的轻量级云服务器&#xff0c;适合个人开发者单机应用访问量不高的网站…

kubesphere all in one部署Jenkins提示1 Insufficient cpu

原因 devops 至少一个cpu&#xff08;1000m&#xff09;&#xff0c;但是其他资源已经占用了很多cpu CPU 资源以 CPU 单位度量。Kubernetes 中的一个 CPU 等同于&#xff1a; 1 个 AWS vCPU 1 个 GCP核心 1 个 Azure vCore 裸机上具有超线程能力的英特尔处理器上的 1 个超线程…

优雅的 Markdown

Markdown浅尝 一、勾选框 注意[]前后都要有空格 - [x] 干的漂亮 - [x] 吃饭 - [x] 写代码 - [ ] 睡觉 干的漂亮 吃饭 写代码 睡觉 二、列表 #无序列列表 * 换成 - 也行 * 你 * 你好 * 你好呀 - 你很好啊 你你好你好呀你很好啊 #有序列表 . 后面有个空格 1. 我 2. 是我 3.…

【Jenkins】data stream error|Error cloning remote repo ‘origin‘ 错误解决【亲测有效】

错误构建日志 17:39:09 ERROR: Error cloning remote repo origin 17:39:09 hudson.plugins.git.GitException: Command "git fetch --tags --progress http://domain/xxx.git refs/heads/*:refs/remotes/origin/*" returned status code 128: 17:39:09 stdout: 17…

CSS Module

CSS Module的作用&#xff1a;将CSS样式作用域限制在特定的组件范围内&#xff0c;以避免全局样式污染和命名冲突。 Vue中如何实现样式模块…

大数据开发--02.环境准备

一.准备三台linux虚拟机 1.分别取名node1,node2,node3 2.配置静态ip 这里以node1为例&#xff0c;配置静态ip地址&#xff0c;其他node2.node3一样 配置完成之后别忘记 systemctl restart network 3.在各自的/etc/hosts文件中编辑三个Ip地址 三台都要配置&#xff0c; 4.然…

express+mysql+vue,从零搭建一个商城管理系统16--收货地址(全国省市县名称和code列表)

提示&#xff1a;学习express&#xff0c;搭建管理系统 文章目录 前言一、新建config/area.js二、新建models/address.js三、新建dao/address.js四、新建routes/address.js五、添加地址六、查询用户地址列表总结 前言 需求&#xff1a;主要学习express&#xff0c;所以先写serv…

Kotlin runBlocking CoroutineScope synchronized简单死锁场景

Kotlin runBlocking CoroutineScope synchronized简单死锁场景 import kotlinx.coroutines.*fun main(args: Array<String>) {runBlocking {val lock1 Any()val lock2 Any()CoroutineScope(Dispatchers.IO).launch {repeat(10) {println("A-$it 申请 lock1...&quo…

C语言-----冒泡排序

今天&#xff0c;让我们来学习一下C语言中一个简单的排序算法------冒泡排序。 什么是冒泡排序呢&#xff1f; 冒泡排序是C语言中一个可以将一个数组的内容按照升序或者降序进行重新排列的算法。简单来说&#xff0c;是一种排序的思维。 冒泡排序的核心思想&#xff1a;让同…

Git原理与使用(一)

目录 前言 版本控制器 Linux下的Git的安装 Git的基本操作 创建Git本地仓库 配置Git 工作区、暂存区、版本库 添加与提交 查看.git文件 前言 我们可能要写多个文档对一个产品进行描述&#xff0c;但是一般情况下我们可能要写多个文档&#xff0c;比如&#xff1a; 初…

AD域的部署

一台win10客户端加入进域服务服务器&#xff0c;将客户端DNS指向域控服务器-查看&#xff0c;更改客户端计算机名并加入隶属于域中-shanxi.com-填写服务器账户和密码-重启客户端 计算机名、域和工作组设置 4/查看是否配置正确-此电脑-属性 首先我们打开服务器右击此电脑点击属…

Vue.js开发基础

单文件组件 使用Vite创建Vue项目后&#xff0c;目录结构中包含一些扩展名为.vue的文件&#xff0c;每个.vue文件都可用来定义一个单文件组件。Vue中的单文件组件是Vue组件的文件格式。每个单文件组件由模板、样式和逻辑3个部分构成。 运行结果&#xff1a; 1.模板 模板用于搭建…

Python greenlet的使用,gevent和猴子补丁

目录 greenlet 结果 gevent和猴子补丁 结果 gevent使用案例 注&#xff1a;代码有解释 greenlet #greenlet 完成协程任务,封装你的生成器 import timefrom greenlet import greenlet#在执行下面三个任务的时候&#xff0c;当前进程是开了三个线程 #sleep就相当于线程暂停…