00:01
多重循环控制,我们来看一下什么叫做多重循环控制呢?它是这样一个概念,就是将一个循环,就是你有一个循环,不管这个循环是不循环,还是外循环,还是多循环,不管啊,就是将一个循环放在另外一个循环体内,就形成了嵌套循环。那么其中for while do well均可以作为外层循环和内存循环。那么在这里呢,老师给大家有一个建议,就是如果说我们将来出现了循环,中间循环中还有循环的话呢,建议一般使用两层,就是什么意思呢?就是for。这个for里边,对大括号里边,你可以再来一个for。这是没问题的。啊,最多最多三层。最多三层,就是说for循环里面套了一个for循环,而这个循环里面又套了一个for循环,三层就是一个相对来说比较复杂的了。
01:01
建议不要再往里面再嵌套,再嵌套呢,这个代码的可读性就会变得很差,所以老师提醒大家就是如果过多写到这。如果嵌套。嵌套这个循环,循环过多。过多会造成什么呢?会造成造成。可读性降低。啊,降低就是说看不懂这个代码是什么意思了,因此呢,我们建议不最最好是两层,最多不要超过三层。注意,那第二个呢,实际上嵌套循环就是把内层循环当作外层循环的循环体。呃,也就是说线段循环是把内存循环当做我的一个循环体而已。当只有内层循环的条件为false的时候,才会完全跳出内存循环,才可以结束外层循环的本次循环,或者当次循环开始下次的循环。那这句话呢,听起来有点绕口,没着不着急,待会呢,我们举例说明。
02:05
待会儿我们举例说明,大家就一目而了然了,好吧?还有一点要给大家讲的是,假如说我们外层循环的次数是M次,而内存循环是N次,那么整个执行的次数就是M乘以N次,就是M乘以N次,哎,你打个比方,你这有一个for循环。这个for循环里面呢,会有两次进来,而里面有再来一个负循环,这里面是三次,要循环三次,那统共我们这个签到循环就是个二乘以三等于六次。他说的就是这么一个含义。那明白这个道理以后呢,同学们,我们来做几个应用实例,注意多重循环是我们做开发用的非常多的,因为实际上我们很就是单层循环只能处理一些比较简单的业务逻辑,而多层循环呢才会满足更多的需求,我们现在呢出这么一个题。
03:04
大家先看一下题的要求,统计三个班级,三个班的成绩情况,每个班呢有五个学生,就三个班,每个班有五个学生,求出各个班的平均分和所有班级的平均分。成绩我们从键盘输入。好,那么我们先来做第一个题,我们先来做一个第一题,一边说呢,咱们一边给大家讲解,好吧。来新建一个文件。咱们新建一个文件,这个文件呢,我们就叫多重循环,叫multi play,这个多的意思,我就简写multi什么呢?For,好吧,呃,Multi four exe exer c01。好,这是我们的第一个案例,Include。STDL。好,那现在呢,我们把这个主函数写到这里来。
04:01
把需求放好。怎么看我把需求放好?放到这儿。那现在呢,我们来做一个简单分析吧,还是分析,首先这道题呢,它其实是两个,两个要求求出各个班的平均分和所有班的平均分,那么我们分布完成,我们把它分解一下。注意,咱们在写代码的时候呢,最好把一个复杂的问题分解,这是我的又一个方案,前面我们学习了编程的一个一个方式方法。编程的一个技巧吧,我们前面是不是已经讲过,第一个技巧是先死后活,还记得吗?先死后活就说先不要把它做成一个变量的东西。先固定。这样利于我们思考现生活,现在呢?我们再来一个,叫做先简单,先简单再复杂。换言之。
05:01
换言之,就是分解。分解。好,我们现在这样做,先第一步求出各个班的平均分。这是我们要做的第一件事情,第二步呢,我们再来求出所有班的平均分,就一步一步的来。好,这是我的一个分解,那第三个呢,我们看三个班的。成绩情况,所以说我们要定义变量,定义变量表示。班级的个数。比如说我们叫做,取个名字叫什么呢?叫class number,没问题吧,Class number,这是我们班级的数量,再定义一个变量。再定义变量干什么呢?表示学生的数量。表示学生。个数,那学生的个数呢?我取另外一个名字叫ST number曼吧。好,最后大家还记不记得他要统计各个班的平均分,是不是你首先要把每个班的总分求到?
06:01
这个肯定跑不了,所以说我们还要定义变量,定义变量比如说叫做class。Class的。To score。就是这个呢,我们表示每个班级的总分,这个表示每个每个班级总分。对,好,有了这样几个东西呢,我们就现在可以写代码了,哦对,还有一个。还有一个是不是同学们看,因为他说了每个学生的成绩是从键盘输入的,是不是我们还应该定一个变量来接收学生的成绩啊,所以说还要定义一个变量,定义变量是靠。干什么呢?接收,接收学生的成绩。好,现在就可以写代码了,上来给我们开始写代码了,首先呢,我们先定义变量int。学生的数量。等于几呢?是不是等于五啊?
07:01
第一个搞定第二个班级的数量等于几啊等于三。搞定,然后呢,这个每个班的成绩显然可能是小数,我们用它来表示初始化0.0。没问题吧,还有一个定义,接收学生成绩double考初始化0.0。好,这个就OK,现在呢,我们就开始来写这个代码了,嗯,同学们看到,因为这里呢,我们是有三个班,每个班有五个学生,显然是一个。多重循环,这个大家能分析出来吗?因为你想嘛,一个班有五个学生,你就要循环。一次就要循环五次了,那么三个班呢?那你就要进行三次这样的波循环,所以说你还要分析出来这里会使用到什么呢,使用。对,这里会使用。使用这个嵌套循环,或者叫做双重循环。
08:03
叫两层吧,两层循环,我用for,两层for循环。那现在老师呃,思路分析出来过后,肯定还有个I。肯定有个I,还有一个结,这个肯定是需要有的,因为这个I呢,我们用来控制外层循环,用节控制内存循环,那现在就可以写代码了,I等于几呢?I等于一,I小于。而小于等于什么呢?小于班级的数量,现在这个外层循环控制有多少个班级?对,然后呢,I加加这大家看能理解哈。这个是控制什么呢?这个控制班级,班级的这个循环次数。这个大家看到没有控制班级,那呃,有了这个班级的循环次数,是不是还要控制我们这个学生的循环次数,那解小于多少呢?小于等于学生的数量。
09:01
这个大家能看懂不?诶,这个是用来控制什么,朋友们,控制我们学学生循环的次数,对不对,控制学生循环的次数,那这个是三,这个是五吗。那现在呢,每进来一次,是不是每进来一次,我们就提示他一句话print f,提示它print f p,大家看着看着就会了啊,大家不要着急,就说请输入D这个班。这个班级的第第几个学生呢,这么第这么多个学生的成绩,那现在呃,第一个就应该是I,这个节大家看懂了没有,因为你每次进来过后,这个I呢,他第一次。进来过后,他进来过后,他先执行这里面的内容吧。啊,所以说你第一次这个I呢,它固定事宜等到这,等到这里面这个内存循环结束了以后,他进行这个I加加才去做第二个班级学生的收入,这个能理解哈,没什么难度,因为你你现在不用想的那么复杂,你就把老师这一段代码看成是这个for循环里面的一个循环体就行了。
10:19
然后进到这里面呢,它又是个循环,你又得把它看成一个循环体来,把这里面的这部分看成一个循环体就可以了,好,现在我们拿到过后呢,我们就来接收。SCF。OK,那我们搜一下LF对不对,记得吧,然后走一个地址符score,是不是要拿到这个学生的成绩了呀。拿到这个这个班级的第这个。第这个学生的成绩。那拿到这个成绩过后,同学们不要忘了这件事情,是不是要把这个成绩累积到这边来,因为这个是表示每个班的总分,先把它累积一下。加多少呢?加你当前输入的这个成绩。
11:02
能理解哈,这个就是累积,累积成绩。累计完成绩以后,我问同学们一个问题,当我们这个循环结束以后,就是这个内存循环结束以后,是不是就已经得到了?本这一次这个班级的就是呃,得到了这个班级所有学生的成绩,这个能理解不?应该可以啊,就说我说一下当。内存的内存的for循环结束后,结束后就得到了,得到了。嗯,该班级,那这个该是怎么理解呢?这个I是几就是几了。得到了该班级的。总成绩了,班级的总成绩。总成绩。二总的总成绩。成绩。那你现在得到了该班级的总成绩,是不是就可以计算他的平均分了呀?是的可以了啊,那现在就可以计算,我就打一下PF。
12:07
写出来,我说。D。这个班。这个班级的平均分。诶,写错了平均分。是多少呢?对,你现在就可以输出了,我们现在保留小数点两位。这个你看懂不,然后这个这个第第几个班是不是就是这个I呀。是不是就是I不是结啊,结是代表学生哦,然后这边应该写成的是I,那这个平均分是不是就是当前这个总,你得到的这个班级的总的成绩去除以什么同学们。是不去除以我们的这个班这个学生的数量。就完事儿了。这段就就写完了,而且大家想一想,你这个是一个double类型的,所以这个整个这个结果呢,也是double类型的,前面是不是学过。
13:03
好,同学们,这个就写完了,为了好看呢,我们来一个get叉。好,再来一个概率下,为什么我就不讲了。好,同学们,我们可以看到第一个班级就是这样不停的循环就可以拿到成绩了,我们来玩一把,看看代码能否跑起来。跟着老师思路啊,并不难,但是一定要认真听。现在正在生成,生成成功,我们运行一把。我们运行一下,嗯,这样子为了好看,我们这儿还是换一行吧,不然的话他就一一堆了,看起来太难看了,这边我们也换一行输出好不好运行。好的运行,那运行过后呢,现在我们就可以来输入第一个班的第一个学生成绩,比如说十十点零,我为了好计算呢,我都输这个比较简单的,第二个呢,二十二十点零。第三个10.0。第四个20.0。
14:01
最后一个第五一个20.0,好这一回车,同学们是不是我们第一个第一这个这个负循环就结束了,它就计算这句话了呀,是不是就计算。我们这个第一个班的成绩了呀,回车。好,他说了第一个班的平均分是14.00,应该是正确的,你算一下嘛,你自己口算也能算出来。是不是这个加起来是30。你算这个总总成绩是不是这是三十三十。就就就70分嘛,总的是70分除以五嘛。除以五不是14.0吗?正确的,那么现在呢,又循环到第二次进去了。他一一回车不是又I加加了吗?I加加这个I就变成二了,I变成二过后又对第二个班输成绩说二,那么现在又来玩一把10.0,还像刚才来说一下20.0。12.0。20.0在10.0回收,那如果不出问题,如果不出问题,是不是第二个班的平均分也是14.0。
15:09
但是我们一回测,你会发现这个结果我们想的不一样。它变成了28.00。哪个同学能告诉我为什么?哪个同学能告诉我为什么,大家分析一下哪里出了问题,是不是这里,你想一想,你第一个班级处理完了过后,这个成绩是不是总成绩已经统计出来了?但是你在输入第二个班,第二个班的成绩的时候,它是在这个基础上累积的,显然这是不正确的,因此你要做一个动作干什么呢?这里要清零。每次输给给一个班级,一个班级输入成绩时,成绩时需要清零。啊,需要清零这个能理解,有这句话呢,你要给他重新来个0.0就可以了。
16:03
就这么一点点哈,那现在这样一改代码就OK了,代码就肯定就OK,大家玩一把。这句话特别的,为什么我刚才不写,就是因为想给大家看到这个效果,过后再写,你们的印象就很深刻。来,10.0 20.0,十点零二十点零十点零回车。没问题,再来十点零二十点零十点零二十点零十点零。第二个吗,是不是一样的呀,第三个我就不去说了啊,太费时间了,第一个任务我们已经完成了。第二个任务,求所有班级的平均分。大家想一想怎么办?怎么办?你想一想,你现在要求所有班级的平均分,你必须要得到,得到所有班级的总分。你现在得到了吗?没有,所以说你还得写一个什么呢,还得定一个变量。
17:05
我这加一个O。Class总分。能理解什么意思了吧?那现在呢,我们应该再定一个变量,根据需求我们加一个double。来,走一个。哦。把这个拿过来。C当然这个写个0.0,所以说你看我们写代码有一个特点,什么特点呢?就是根据需要可以。可以根据你的需要来添加我们的代码,而不是说非得一步到位。再说一遍啊,就是第三点。根据根据需求增加或修改。修改相应的代码,呃,你比如说我们这个要新加增加新的功能,我们就增加代码,比如说某一个功能要修改,我们就修改相应的代码,这是肯定的。对,好的,那现在我们这个拿到过,同学们想怎么得到这个表示所有。
18:05
所有班级总成绩。那我问大家,这个所有班级总成绩在哪里得到呢?是不是这样子的,当你这个内存循环结束以后,内存循环结束以后,你赶紧把这个class to score累加到这里面不就完了吗?是不是这样子的加等谁呀,Class number。这个就是累积所有所有班级成绩。升级,那等到什么时候,等到这个这个for,整个这个for循环结束以后呢,All class class。就是我们的所有班成绩,那现在你可以在这个负循环外面输出。输出总班,呃,所有班级的所有对所有班级的成绩。能理解我的意思了吧?那现在老师就可以来写了。
19:03
那为了偷懒,我把这句话拿过来用一下。然后就说所有班级。对吧,所有班级的平均分等他那应该怎么算呢?这个就改一下,就应该是我们的to。这个总成绩去乘以什么呀,学生的数量。再乘以班级的数量。因为你每个班有五个学生,那你得把这个算出来才行啊,这个扩一下。是不是这样就对了呀,哎,这样就对了,这个就是得到所有班级的平均分了。是不是这样的道理,来同学们,我们可以运行一下哈,运行一下跑一下。那跑一下呢,这个代码就应该是没问题的,我们数一数十点零,我换一下方案,全部10.0。十点第一个班全是10.0,第二个班呢,我全部输20.0。这样,待会儿呢,我们好来验证答案是不是正确的。
20:03
好,第二个班平均分是20.0,第三个班。30.0。注意跟上我的思路,这很重要,现在就是在锻炼大家一个编程思想。30.0回车,OK,同学们可以看到是不是第三个班的平均分是30,那么所有班的平均分是20,正确的吧?你想嘛,肯定你口算都算得出来,回车结束。好,第一个题我们就回答完毕,那第二个呢,我们再来看统计三个班的及格人数,每个班有五个学生怎么办?在上面是不是这个就是相当于说要增加新的功能了,那现在想一想怎么来完成这个功能呢。怎么来完成这个功能,是不是也非常的简单?朋友们,那现在我们增加一个新的功能。增加新功能干什么呢?要统计三个班所有及格人数,那你先来分析一下。你是不是应该先分析再执行啊分析。
21:00
分析,那我的思路很简单,我们定义一个变量,比如说叫count来保存,保存及格人数。是不是,那问题来了,这个及格人数什么时候统计比较好呢?是不是在这里,你看这个地方是不是每输入一个,每输入一个score,我们在这里判断一下它是不是一个及格的,如果是及格的呢,我们就把它。累积一下不就完了吗?说说第二个思路。当接收到。一个学生成绩后,就看看是否及格。是否及格?如果及格,如果是及格则怎么样呢?则累积到count中完事了,那么就写完了,来,同学们,我们再来一把。那就写个定,看初始化是不是零呢?同学们,这个叫及格人数。
22:00
及格人数没问题吧,同学们人数完全的OK,那这个时候呢,我们需要用上前面的一个判断语句。E。Co大于等于60。对不对,如果大于等于60,我们这个count呢,就加加。对对,就在里面加一个条件,那显然这个地方呢,我们再在这里面再输出一句话就可以了,对,我在最后,因为你输有结束完了我们再输出这个几个人数比较合理,写到题面及格人数,所有班级的及格人数。及格人数。及格人数有多少呢?人数好这般肯定是一个整数对吧,人肯定不是小数嘛,那直接把我们这个count。把这个count放进去就可以了。代码就写完了,那我可以给大家简单的验证一下哦,简单验证一下,我们快速快速的走一下。
23:01
跑,跑起来,10.0。10.0这个呢,我让他及格60点。当然也可以写个60。到这边呢,20.0,这个又来一个及格人数就回撤好第一注意啊,第一个班有两个及格人数,大家心里面。要记住哈,有两个及格人数了,30.0,这个第二个班,我们一个及格人数都不给他。好,30.0。十点。90啊,这个给他一个几格人数吧,现在是不是,呃,第一个班加第二班有两个及格人数,呃,三个及格人数了,再来最后十点零十点零。10.0。10.0我都不给。那如果一回车我们一共有几个,几个人数三个。是不是三个几个人数。其实是第二,第一个班和第二个班,第三个班一个及格人数都没有,因此是三个人数。三个人好,同学们,那关于这道题的一个评价就给大家讲到这儿。
24:04
注意啊,这道题本身难度也不是很大,但是对于我们初学者刚刚接触这种多重循环呢,还是有一点难度的,希望同学们好好去理解最好呢,能够看着老能够根据老师的代码自己写一遍,这样的印象就会非常的深刻。好,同学们关于这一个多重循环应用实例的第一部分就给大家讲解到这里。
我来说两句