多重循环应用案例(一)|学习笔记

简介: 快速学习多重循环应用案例

开发者学堂课程【Go语言核心编程 - 基础语法、数组、切片、Map:多重循环应用案例】学习笔记,与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/625/detail/9579


多重循环应用案例(一)


内容介绍:

一、多重循环控制

二、应用实例1

三、应用实例2

这节课讲解多重循环控制,前面提过的循环控制都是基于一层的,实际上在开发中会遇到比较复杂的业务逻辑,这种业务逻辑往往需要运用多重循环控制才能够解决。


一、多重循环控制

多重循环控制介绍

1、将一个循环放在另一个循环体内,就形成了嵌套循环,与前面讲解过的嵌套分支一样。在外边的 for 称为外层循环,在里面的 for 循环称为内层循环。(建议一般使用两层,最多不用超过3层,超过3层的话逻辑就变得比较复杂)。

2、实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为 false 时,才会完全跳出内层循环,才可结束外层的当次循环,开始下一次的循环。

3、外层循环次数为 m 次,内层循环为n次,则内层循环体实际上需要执行 m*n=mn次。

上述文字描述比较抽象,所以下面通过实例练习来进一步了解,这些题讲解后将会对于多重循环以及循环去解决问题的能力有很大的提升。 


二、应用实例1

案例:统计3个班成绩情况,每个班有5名同学,求出各个班的平均分和所有班级的平均分【学生成绩从键盘输入】。

1.编程时两大绝招

(1)先易后难,也就是说将一个复杂的问题分解成简单的问题,然后一个个完成。

(2)先死后活,也就是说先不要考虑把代码写得很灵活,要先把代码写得死板,再用变量把代码变灵活。下面开始实现程序。

2.分析实现思路1

(1)统计一个班的成绩情况,每个班有5名同学,求出该班的平均分,学生成绩从键盘输入。这里先不考虑变量,降低难度,先易后难。

(2)学生数就是5个【先死后活】

(3)声明一个sum统计班级的总分

代码如下:

package main

import “fmt”

fun main(){ 

//引入主函数

sum := 0.0  

//声明sum,初始值为0.0

for i := 1;i<=5; i++{ 

//初始化i=1,一共5个学生则范围为i<=5,循环迭代为i++。

var  score  float64  

//定义变量score接收成绩。

fmt.Printf(“请输入第%d个学生的成绩\n”,i) 

//提示输入学生成绩,使用格式化输出,i表示第几个学生。

fmt.Scanln(&score)

sum+=score   

//累计总分

}

fmt.Printf(“班级的平均分是%v”,sum/5)  

//平均分为总分sum/人数5。

}

以上代码完成了第一个需求,下面运行一下进行验证。

运行结果:

D:\goproject\src\go_code\chapter05\forexec2>go run main .go

请输入第1个学生的成绩

10

请输入第2个学生的成绩

10

请输入第3个学生的成绩

10

请输入第4个学生的成绩

10

请输入第5个学生的成绩

10

班级的平均分是10

代码运行成功,说明这里一个班学生成绩平均分的计算实现成功,下面继续分析实现思路2,不再统计一个班,转而进行统计3个班的平均分。

3、分析实现思路2

(1)统计3个班级成绩情况,每个班有5名同学,求出各个班的平均分和所有班级的平均分【学生成绩从键盘输入】。就是把上面那一段代码循环,1个班代码执行1次,3个班则代码要执行3次,使用for循环来重复这段代码。

(2)j表示第几个班级

(3)定义一个变量存放总成绩

代码如下:

for j :=1;j<=3;j++{ 

//j表示第几个班,初始化j=1,因为有3个班则取值范围为j<=3

sum := 0.0  

for i := 1;i<=5; i++{

var  score  float64  

fmt.Printf(“请输入第%d班 第%d个学生的成绩\n”,j,i)  

//提示输入班级,成绩

fmt.Scanln(&score)

sum+=score

}

fmt.Printf(“第%d个班级的平均分是%v\n”,j,sum/5)

}

整个代码第一次进入循环时 sum=0.0,然后统计第一个班级平均分,进行输出,第二次进入循环体时 sum 再次赋值为0.0,相当于 sum 会每次清零后再对班级总分sum进行累计,只是把里面的for循环体执行了3次。下面运行查看效果。

运行结果:

image.png

结果如上则说明实现了3个班级分别计算平均分功能,但是还要完成统计所有班的平均分功能。而sum是代表每个班的总成绩,所以还要定义一个变量存放总成绩,变量为 totaSum。

代码如下:

var totalSum float64 = 0.0 

//定义变量totaSum,数据类型为float64,初始化为0.0

for j :=1;j<=3;j++{

sum := 0.0

for i := 1;i<=5; i++{

var  score  float64

fmt.Printf(“请输入第%d班 第%d个学生的成绩\n”,j,i)  

fmt.Scanln(&score)

sum+=score

}

fmt.Printf(“第%d个班级的平均分是%v\n”,j,sum/5)

totalSum += sum

//将各个班的总成绩累计到 totalSum

}

fmt.Printf(“各个班级的总成绩%v 所有班级平均分是%v\n“, totalSum,totalSum /5*3))

//所有班级的平均分就是总分数除以三个班的总人数。

此时运行程序,快速的输入第1班5个学生成绩都为10,第2班5个学生成绩都为20,第3班5个学生成绩都为30

运行结果

第1个班级的平均分是10

2个班级的平均分是20

3个班级的平均分是30

各个班级的总成绩300 所有班级平均分是20

运行结果如上,说明实现了案例要求的基本功能,下面开始最后一步完善,将代码变得灵活。因为如果以后要统计多个班级,而代码还这样写是不合理的。

4、分析实现思路3

(1)可以把代码变得灵活。

(2)定义两个变量,表示班级的个数和班级的人数

代码如下:

var classNum int =2  

//定义一个班级数量变量classNum,类型为int,赋值为2,然后替换相应数值为变量。

var stuNum int =5

//定义学生人数变量 stuNum,人数为5,然后替换相应数值为变量。

var totalSum float64 = 0.0

for j :=1;j<=classNum;  j++{

sum :=0.0

for i := 1;i<= stuNum; i++{

var  score  float64  

fmt.Printf(“请输入第%d班 第%d个学生的成绩\n”,j,i)  

fmt.Scanln(&score)

sum+=score

}

fmt.Printf(“第%d个班级的平均分是%v\n”,j,sum/ float64(stuNum))

//因为在 Golang 中类型如果不匹配则无法进行转化,所以 float64 类型的 sum 和int类型的 stuNum 不匹配,需要将 stuNum 类型转化为 float64

totalSum += sum

}

fmt.Printf

(“各个班级的总成绩%v 所有班级平均分是%v\n“, totalSum,totalSum /float64(stuNum *classNum))

//此处类型不一致,需要转化类型

这时运行代码,进行验证一遍,快速输入第1班5名学生成绩分别为10,20,10,10,10,第2班5名学生成绩都为20

运行结果:

第1个班级的平均分是12

2个班级的平均分是20

各个班级的总成绩160 所有班级平均分是16

经过计算后验证输出答案正确,到此整个案例功能实现成功。

相关文章
|
6月前
|
存储 C++
C++初阶学习第十一弹——探索STL奥秘(六)——深度刨析list的用法和核心点
C++初阶学习第十一弹——探索STL奥秘(六)——深度刨析list的用法和核心点
57 7
|
7月前
|
存储 Java 程序员
Java程序设计基础——多重循环
Java程序设计基础——多重循环
|
7月前
|
XML 算法 Java
Java编程中多重循环
Java编程中多重循环
86 0
|
7月前
|
存储 算法 搜索推荐
【算法】七大经典排序(插入,选择,冒泡,希尔,堆,快速,归并)(含可视化算法动图,清晰易懂,零基础入门)
【算法】七大经典排序(插入,选择,冒泡,希尔,堆,快速,归并)(含可视化算法动图,清晰易懂,零基础入门)
222 1
|
7月前
蓝桥备战-区间嵌套--前缀和做法
蓝桥备战-区间嵌套--前缀和做法
49 0
|
Java
两招教你跳出多重嵌套循环?
两招教你跳出多重嵌套循环?
70 1
|
Go
跳出多层循环,goto语句助你一臂之力
跳出多层循环,goto语句助你一臂之力
257 0
|
Scala vr&ar 开发者
多重循环应用案例|学习笔记
快速学习多重循环应用案例。
168 0
多重循环应用案例|学习笔记
|
Shell
shell编程之双重循环(教你花式打印各种图形)(下)
1、双重循环概述 双重循环需要具备的前提——存在两个以上的自变量。 执行机制:
309 0