多重循环控制
介绍:
1)将一个循环放在另一个循环体内,就形成了嵌套循环。在外边的for循环称为外层循环,在里面的for循环称为内层循环。【建议一般使用2层,最多不要超过3层】
2)实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为false时,才会完全跳出内层循环,才可结束外层的档次循环,开始下一次的循环。
3)设外层循环次数为m次,内层为n次,则内层循环体实际上需要执行m*n=mn次。
应用实例:
1)统计3个班成绩情况,每个班有5名同学,求出各个班的平均分和所有班级的评分均【学生的成绩从键盘输入】
编程时两大绝招
(1) 先易后难,即将一个复杂的问题分解成简单的问题。
(2) 先死后活
func main() {
//分析实现思路
//1.统计1个班的成绩情况,每个班有5名同学,求出改班的平均分
//2.学生数就是5个 [先死后活]
//3.声明一个sum 统计班级的总分
//分析思路2
//1.统计3个班的成绩情况,每个班有5名同学,求出每个班的平均分
//2.j 表示第几个班级
//3.定义一个变量存放总成绩
//分析思路3
//1.我们可以把代码做活
//2.定义两个变量,表示班级的个数和班级的人数
//代码实现
var classNum int = 3
var stuNum int = 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个学生的成绩
", j, i)
fmt.Scanln(&score)
//累计班级总分
sum += score
}
fmt.Printf("第%d班级的平均分是%v
", j, sum / float64(stuNum))
//将各个班的总成绩累计到totalsum
totalsum += sum
}
fmt.Printf("各个班级的总成绩%v 所有班级的平均分是%v
", totalsum, totalsum / float64(stuNum * classNum))
}
2)打印金字塔经典案例
使用for循环完成下面的案例
1)完成思路,可以先从矩形开始打
2)代码实现
分析编程思路:
func main() {
//编程思路
//1.打印一个矩形
/*
***
***
***
*/
//2.打印半个金字塔
/*
*
**
***
*/
//3.打印整个金字塔
/*
* 1层 1 个* 规律: 2 * 层数 - 1 空格2 规律:总层数-当前层数
*** 2层 3 个* 规律: 2 * 层数 - 1 空格1 规律:总层数-当前层数
***** 3层 5 个* 规律: 2 * 层数 - 1 空格0 规律:总层数-当前层数
*/
//4 将层数做成一个变量
//定义变量var totalLevel int
//5 打印空心金字塔
/*
*
* *
*****
分析:在我们给每行打印*号时,需要考虑是打印 * 还是打印 空格
我们的分析的结果是,每层的第一个和最后一个是打印 *,其它就应该是空的,即打印空格
我们还分析到一个例外情况,最后层(底层) 是全部打*。
*/
var totalLevel int = 9
//i 表示层数
for i := 1; i <= totalLevel; i++ {
//打印*前先打印空格
for k := 1; k <= totalLevel - i; k++ {
fmt.Print(" ")
}
//j 表示每层打印多少*
for j := 1; j <= 2 * i - 1; j++ {
if j == 1 || j == 2 * i -1 || i == totalLevel {
fmt.Print("*")
} else {
fmt.Print(" ")
}
}
fmt.Println()
}
}
4)打印99乘法表
func main() {
num := 9
for i := 1; i <= num; i++ {
for j := 1; j <= i; j++ {
fmt.Printf("%v * %v = %v ", j, i, j * i)
}
fmt.Println()
}
}