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

    文章

    10824

    浏览量

    211120
  • 产生器
    +关注

    关注

    0

    文章

    25

    浏览量

    20062
  • 函数
    +关注

    关注

    3

    文章

    4304

    浏览量

    62421
  • for循环
    +关注

    关注

    0

    文章

    61

    浏览量

    2493

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

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

收藏 人收藏

    评论

    相关推荐

    无刷电机方波驱动原理分析

    通过前几期芝识课堂的学习,相信大家已经熟练掌握了电机的各种基本情况和工作模式,大家也该跃跃欲试希望能进入实战动手环节了,准备好操作电机的所有前期准备,让我们一起让无刷电机真正工作起来吧!
    的头像 发表于 11-21 18:12 490次阅读
    无刷电机方波驱动原理分析

    基于FPGA实现数码管显示

    本文介绍数码管显示译码基本工作原理及Verilog HDL驱动代码编写,进一步熟练掌握FPGA入门基础知识。
    的头像 发表于 10-24 14:44 534次阅读
    基于FPGA实现数码管显示

    rnn是递归神经网络还是循环神经网络

    RNN(Recurrent Neural Network)是循环神经网络,而非递归神经网络。循环神经网络是一种具有时间序列特性的神经网络,能够处理序列数据,具有记忆功能。以下是关于循环
    的头像 发表于 07-05 09:52 489次阅读

    承装修试电力设施许可证所需施工机具设备条件承试类设备使用过程中需要注意事项

    学习,熟练掌握各种高压试验技能,严格遵守各种规章规程,提高自身安全意识,杜绝违规操作,这样才能保证高压试验的安全,确保人身和设备的安全,使我厂的生产安全稳定长久的运
    的头像 发表于 06-17 11:05 223次阅读
    承装修试电力设施许可证所需施工机具设备条件承试类设备使用过程中需要注意事项

    PLC三大量的计算(熟练三大量,玩转PLC)

    PLC中无非就是三大量:开关量、模拟量、脉冲量。只要搞清楚三者之间的关系,你就能熟练掌握PLC了。  6轴双工位激光焊接示教系统 开关量的计算 1、 开关量也称逻辑量,指仅有两个取值,0或1
    的头像 发表于 03-18 08:39 512次阅读
    PLC三大量的计算(<b class='flag-5'>熟练</b>三大量,玩转PLC)

    什么是PLC循环移位指令 PLC循环移位的特点

    PLC循环移位指令包括循环左移指令和循环右移指令。在循环移位过程中,移出的位并不会丢失,而是会放回空出的位上,形成一个环形移位。
    的头像 发表于 03-07 16:57 1949次阅读
    什么是PLC<b class='flag-5'>循环</b>移位指令 PLC<b class='flag-5'>循环</b>移位的特点

    嵌入式工程师需要掌握哪些技术?

    一些必要的技术能力是至关重要的。在本篇中,我们将讨论入行嵌入式所必须的技术能力。 1.C/C++编程能力:C/C++是嵌入式系统开发中最常用的编程语言。熟练掌握C/C++语言将使你能够理解和编写底层
    发表于 03-04 16:38

    arduino如何停止loop循环

    Arduino的loop循环是其主要的程序执行部分,该循环将在Arduino开发板上持续运行,并且只有在程序被重新上传或开发板断电重启时才会停止。然而,在某些情况下,你可能需要在程序执行过程中停止或
    的头像 发表于 02-14 16:24 4201次阅读

    循环指令loop规定循环次数

    循环指令是计算机编程中非常重要的概念,它允许程序重复执行一段代码块,使得程序可以更有效地处理大量数据和重复性任务。在本文中,我们将详尽、详实、细致地介绍循环指令的相关概念、语法和应用场
    的头像 发表于 02-14 16:10 1466次阅读

    聊一聊嵌入式C语言

    作为一名嵌入式软件开发者,熟练掌握嵌入式C语言对我的日常工作至关重要。
    的头像 发表于 01-22 09:28 521次阅读

    电工学习PLC的四大理由

    plc编程的重点是模拟原有的作业流程,将控制过程由程序运行来完成。所以核心内容就是对工艺的程序描述。因此需要熟练掌握PLC程序语言和基本的功能实现。
    的头像 发表于 12-28 18:27 1058次阅读

    十大排序算法总结

    排序算法是最经典的算法知识。因为其实现代码短,应该广,在面试中经常会问到排序算法及其相关的问题。一般在面试中最常考的是快速排序和归并排序等基本的排序算法,并且经常要求现场手写基本的排序算法。如果这些问题回答不好,估计面试就凉凉了。所以熟练掌握排序算法思想及其特点并能够熟练
    的头像 发表于 12-20 10:39 1080次阅读

    基于MicroPython的普中开发板攻略

    Python拥有众多的编程器,如果你之前已经熟练掌握python或已经使用python开发,那么可以直接使用你原来习惯的开发软件来编程。如果你是初学者或者喜欢简单而快速应用,我们使用官方推荐的Thonny Python IDE。
    发表于 12-11 17:12 0次下载

    掌握印制电路板上的干扰及抑制

    印制电路板的设计是电子知识的综合运用,需要有一定的技巧和丰富的经验。这主要取决于设计者对电路原理的熟悉程度,以及元器件布局、布线的工作经验。对于初学者来说,首先就是要熟练掌握电路的原理和一些基本布局、布线原则。
    发表于 12-07 11:40 424次阅读

    【热招】苏州,单片机工程师

    熟练掌握一种软件系统开发经验,譬如FreeRTOS 3、熟悉电子产品的开发流程及相关业务领域的知识; 4、熟练使用相关软硬件开发工具中的一种或多种,有物联网开发经验优先 5.熟悉8、32位单片机开发,熟练掌握C语言,基本
    发表于 11-28 14:02