0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何才能熟练掌握关于for循环

C语言编程基础 来源:博客 作者:伦易俳嵌咕 2021-08-14 09:47 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

好吧,也许你认为我在写一篇如何使用for循环的文章,,,,首先,我想说无论是学习C语言还是学习java的同学都能从此文中获益,还有,你确定你会用for循环吗?其实许多东西你只是在表面,要品才能有一种感觉,有的时候,我喜欢咬文嚼字一下,所以你可以认为我现在在程序中讨论关于“用推还是用敲”的话题。

先来问你一个问题,一个简单的数学问题,不过你尽量快点回答,区间[9,15]中有几个整数?

多数想马上表现自己聪明的同学可能会马上回答6个,但是是7个,你会发现这种双闭区间的元素会比你想象的多,就连[9,9]都有一个元素是吗?而半开半闭就不同了[0,10)你可以不假思索的用[m,n)中有n-m个元素,来回答这个答案,10个元素,你发现什么了没?这。。有点像数组,恩恩,这个问题就是我们在本文后面将讨论的你如何才能熟练的使用这些多1少1的问题。现在先开始说for循环

我常常把最简单的for循环称之为循环计数器:

for(inti =1;i《=10;i++)cout《《“求妹子”《

你看,这里的i只是一个计数的作用,它在告诉cpu,去把我的这条语句执行十次把!

你可能会说,这有什么?for都是这样的呀!请你往下看

for(inti =1;i《=10;i++)cout《《“求”《

这个for就不同了,它把i做为一种产物,在循环中使用它,我把它称之为循环产生器,这个i就不仅仅是让循环执行十次的作用了,它在每次的循环中产生,循环体的语句中有自己的作用,所以当你理解所谓的循环产生器,你就会很轻松的写出各种多层循环的程序了,比如崔哥曾出个这样一个题:

请用循环语句打印一个空心菱形:

我将用一种清晰的思路来分析写这个程序,

嗯,我先写一个函数,它提供的接口如下:

void print(int n,int p,int q);//在一行输出n个元素,除了在p和q出输出*其它地方都输出空格

恩,很简单的一个函数:

void print(int n,int p,int q){ for(int i = 1;i《=n;i++) { if(i==p||i==q) printf(“*”); else printf(“ ”); } printf(“

”);}

void print(int n,int p,int q){ for(int i = 1;i《=n;i++) { if(i==p||i==q) printf(“*”); else printf(“ ”); } printf(“

”);}

所以,用所谓的循环产生器,产生我们需要的参数传递给这个函数不就行了吗?

下面,我们先做一些约定

“你我约定,难过的往事不许提”。。。

开玩笑了,,,我们继续:

首先,输出空心菱形,这个行数一定是个奇数,

所以我们用1到LOW来表示这LOW个位置,而且中间的那个位置就是LOW/2+1

这样我们的程序就是这样:

#define LOW 13int j,k,n = LOW/2+1;//空心菱形的中间位置j=k=n;for(int i = 1;i《=LOW;i++){ print(LOW,j,k); if(i《n) j--,k++; else j++,k--;}

i做为一个产生器,不但让循环执行LOW次(打印low行)同时也控制产生这j和k这两个参数了,当然我们在清晰道理之后,完全可以把这个函数嵌到循环中,看只用了两个for,而不是某些同学的分段循环,四个for。。。

继续讨论有关for的话题,现在我要通过说明for的一些使用细节,来向你展示,你用什么样的语言决定你的编程思维,我问你如果让你访问数组a[10]的每个元素,你会写怎样的代码?

for(int i = 0;i《=9;i++)

还是

for(int i = 0;i!=10;i++)

我一直都是使用第二种,因为这可以很好的说明半开半闭区间的思想,而且,C数组本身就是从零开始的,我们用10来表示它最后一个元素的下一个位置(因为最后一个元素是a[9]),

其实,不仅仅是数组,在许多语言的迭代器(包括c++标准库)中都会使用第一个元素表示头,最后一个元素的下一个位置表示尾,半开半闭区间的这种思想可以让你不用陷入多1或是少1的问题中,比如[n,n)是没有元素的,[n,m)是有m-n个元素的。。

至于为什么是i!=10,而不是i《10,那要是这样的语句呢?

for(int i = 10;i!=0;i--)

不用把”《”改成”》”了,而且。。。作为一个终止状态,还有用(后面论述)

现在还记得开头的那个求妹子的列子吗?

for(inti =1;i《=10;i++)cout《《“求”《

这里我就让i从1到10,(我不可能求0个妹子吧?)所以,这种对循环i的选取,0或1,是很有细节思考的。

下面再看一个列子:

inti;for(i=0;a[i]!=‘c’&&i!=N;i++);

这段代码的作用是在一个char数组中找到第一个是’c’的元素,并返回它的索引

有几个有趣的地方:

我把i的定义放在外面

这个for循环没有循环体,看那个分号。。。。。。

不是计数器,不是产生器,我喜欢把这种for称之为循环搜捕器,它用来找一个元素

所以我把i定义在循环外,因为之后我们还要使用到i,而同时也与前面的那些for循环中把i定义到for里面形成了对比,因为之前的作用,我并不想把它的作用域外流,实际上,在c++中鼓励你这么使用for,不让它外流,这种东西在vc6.0会出点问题(因为它不是标准的c++),因为i的作用域会外流,所以你就不能写for(int i;;)这样的语句两次,它会报错说你重定义了。而在c语言中,之前是不支持for(int i;;)这种定义方式的,不过在c99的时候,它也支持了,并鼓励你这样写。

并且,通过这个搜捕器,它的条件是a[i]!=‘c’&&i!=N,所以循环终止时,是a[i]==‘c’||i==N这就是我之前说的终止条件,我们就可以在之后写这样的语句;

if(i==N)//没找到else//找到了。i 是它的下标

这就是为什么用’!=’而不是《的原因了,这可以很清楚的看清终止条件。

以上就是今天的分享,小伙伴们可以点个赞支持一下哟~

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    11216

    浏览量

    222915
  • 产生器
    +关注

    关注

    0

    文章

    25

    浏览量

    20372
  • 函数
    +关注

    关注

    3

    文章

    4406

    浏览量

    66830
  • for循环
    +关注

    关注

    0

    文章

    61

    浏览量

    2852

原文标题:C语言编程笔记:关于 for循环 的那些不为人知的秘密!

文章出处:【微信号:xx-cyy,微信公众号:C语言编程基础】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    人工智能行业如何使用for循环语句进行循环

    人工智能行业可以使用以下是关于for循环在不同编程语言中的基本用法说明: Python中的for循环: 主要用于遍历序列(列表、元组、字符串等) 典型结构:for item in sequence
    的头像 发表于 09-10 12:55 392次阅读

    开发单片机需要学习什么?软件编程的 4 个关键层次

    ,缺一不可。 第一层是 C 语言基础语法。这是单片机编程的 “通用语言”,需熟练掌握变量(字符型、整型、浮点型)、函数(定义、调用、返回值)、流程控制(if-else、for 循环、switch),以及数组、指针的基本用法。不用追求复杂语法,重点是 “能用简洁代码实现
    的头像 发表于 08-25 11:32 576次阅读

    高效管理Kubernetes集群的实用技巧

    作为一名经验丰富的运维工程师,我深知在日常的Kubernetes集群管理中,熟练掌握kubectl命令是提升工作效率的关键。今天,我将分享15个经过实战检验的kubectl实用技巧,帮助你像艺术家一样优雅地管理K8s集群。
    的头像 发表于 08-13 15:57 601次阅读

    三大核心网络设备的运维要点

    作为运维工程师,熟练掌握网络设备的管理和维护是构建稳定IT基础架构的关键。本文将深入探讨交换机、路由器和防火墙这三大核心网络设备的运维要点,从基础配置到高级故障排除,为您提供全面的技术指导。
    的头像 发表于 07-22 16:35 710次阅读

    一文掌握Linux命令

    作为一名运维工程师,熟练掌握Linux命令是基本功中的基本功。无论是日常工作中的系统维护,还是面试时的技术考核,Linux命令都是绕不开的核心技能。本文将从实战角度出发,系统梳理运维工程师必须掌握的Linux命令,并结合实际场景解析其应用方法。
    的头像 发表于 07-22 15:23 440次阅读

    熟练掌握ModbusTCP转PROFINET网关的互转技术

    在现代工业生产中,自动化与信息化的深度融合成为提升效率、优化流程的关键。在这一背景下,不同通信协议之间的兼容性与转换能力显得尤为重要,尤其是在广泛应用的Modbus TCP与新兴且高效的Profinet之间。本文将深入探讨Modbus TCP向Profinet转换的过程、技术细节及其应用价值,旨在为工业自动化领域的从业者提供一份实用的知识指南。 添加图片注释,不超过 140 字(可选) 二、Modbus TCP转Profinet网关的重要性 鉴于Modbus TCP与Profinet各自在不同领域的优势
    的头像 发表于 07-07 18:26 253次阅读
    <b class='flag-5'>熟练掌握</b>ModbusTCP转PROFINET网关的互转技术

    基础篇3:掌握Python中的条件语句与循环

    在Python编程语言中,条件语句和循环是构成复杂逻辑和数据处理的基石。本篇基础教程将帮助您深入了解Python中的条件语句和循环结构,让您能够更好地控制程序流程。 条件语句 条件语句允许程序根据
    发表于 07-03 16:13

    小屏幕,大能量 —— 聚会这款工业触摸屏助力传统设备向智能化转型

    设备注入新的活力,实现从 “制造” 到 “智造” 的华丽蜕变。 一、人机交互革新,简化操作流程 传统设备往往依赖复杂的按钮、旋钮和指示灯进行操作与状态显示,操作人员需要经过长时间培训才能熟练掌握,不仅效率低下,还容易出现
    的头像 发表于 05-16 15:31 401次阅读

    电机学教程

    电磁关系,熟练掌握各类电机的运行原理及其分析方法: (3)在以上分析的基础上,掌握各种电机的工作特性、外特性、机械特性、调速特性和起动特性等; (4)根据以上所掌握的各种运行特性,熟知其运用场合,分析其
    发表于 05-12 14:50

    自动化设备里 M12 接头五口的巧妙接法

    熟练掌握自动化设备里M12接头五口的巧妙接法,尤其是结合德索精密工业的优质产品与专业技术,能够极大地提升设备布线的精准度与可靠性,为自动化设备的稳定、高效运行筑牢根基,确保设备在复杂的工业环境中持续稳定地发挥其卓越性能。
    的头像 发表于 05-08 09:01 702次阅读
    自动化设备里 M12 接头五口的巧妙接法

    别忽视!TNC 插座正确拆卸关乎设备寿命

    正确拆卸 TNC 插座,看似微不足道,实则对设备的稳定运行及使用寿命影响重大。无论是专业技术人员,还是普通使用者,都应熟练掌握正确拆卸方法,避免因操作不当对设备造成损害,进而降低设备维护成本,延长设备使用寿命,确保通信与电子设备高效运转。
    的头像 发表于 03-28 08:57 578次阅读
    别忽视!TNC 插座正确拆卸关乎设备寿命

    DIY 达人必看:BNC 连接器接线工具套装精选及实用技巧全解析

    接结束后,及时使用吸锡器清理多余焊锡,防止因焊锡残留造成短路等问题,确保焊接质量可靠。 拥有一套适配的 BNC 连接器接线工具套装,并熟练掌握上述实用技巧,DIY 爱好者在进行音视频设备连接时,便能游刃有余,显著提升接线质量,保障设备稳定运行,尽情享受 DIY 带来的无限乐趣与成就感。
    的头像 发表于 03-12 09:48 764次阅读
    DIY 达人必看:BNC 连接器接线工具套装精选及实用技巧全解析

    技术干货驿站 ▏深入理解C语言:嵌套循环循环控制的底层原理

    多重循环,还是控制循环的执行流程,掌握这些知识都将为你的编程之路打下坚实的基础。嵌套循环在C语言中,循环语句可以嵌套使用,即在一个
    的头像 发表于 02-21 18:26 1039次阅读
    技术干货驿站  ▏深入理解C语言:嵌套<b class='flag-5'>循环</b>与<b class='flag-5'>循环</b>控制的底层原理

    控制咖啡机水温的关键在于NTC温度传感器

    对于热爱咖啡的人来说,一杯完美的咖啡需要精心挑选优质的咖啡豆,熟练掌握烘焙技巧,以及恰到好处地控制水温。在咖啡机中,NTC温度传感器扮演着关键的角色,确保咖啡水温精准控制,让我们享受到口感丰富、浓郁的咖啡体验。
    的头像 发表于 01-14 09:40 1172次阅读

    深入理解C语言:循环语句的应用与优化技巧

    在程序设计中,我们常常需要重复执行某一段代码。为了提高效率和简化代码,循环语句应运而生。C语言作为一门经典的编程语言,提供了多种循环控制结构,帮助程序员高效地实现重复操作。掌握循环语句
    的头像 发表于 12-07 01:11 1064次阅读
    深入理解C语言:<b class='flag-5'>循环</b>语句的应用与优化技巧