循环控制
for循环
基本介绍
听其名而知其意。即:让一段代码多次/循环执行。
入门案例
// 演示for循环控制 入门案例// 需求: 打印100次 "hello world!"package mainimport "fmt"func main() {for i := 1; i <= 100; i++ {fmt.Println(i, "hello world!")}}
基本语法
写法一:
for <循环变量初始化>; <循环条件>; <循环变量迭代> {
<循环执行的语句>
}
写法二:
<循环变量初始化>
for <循环条件> {
<循环执行的语句>
<循环变量迭代>
}
写法三:
<循环变量初始化>
for {
if <循环条件> {
<循环执行的语句>
} else {
break // 这里的break的作用是终止for循环
}
<循环变量迭代>
}
写法四:
<循环变量初始化>
for ; ; {
if <循环条件> {
<循环执行的语句>
} else {
break // 这里的break的作用是终止for循环
}
<循环变量迭代>
}
流程图解

案例演示
// 演示 for 循环控制语句// 需求: 打印1-100之间所有是9倍数的整数个数及总合package mainimport "fmt"func main() {var (count uint64sum uint64)for i := 1; i <= 100; i++ {if i % 9 == 0 {count ++sum += uint64(i)}}fmt.Println(count, sum)}
// 演示 for 循环控制语句// 需求: 完成下列块注释中表达式的输出(6是可变的)/*0 + 6 = 61 + 5 = 62 + 4 = 63 + 3 = 64 + 2 = 65 + 1 = 66 + 0 = 6*/package mainimport "fmt"func main() {var (num int)fmt.Println("请输入一个正整数")fmt.Scan(&num)for i := 0; i <= num; i++ {fmt.Println(i, "+", num - i, "=", num)//fmt.Printf("%v + %v = %v\n", i, num -i, num)}}
// 演示 for 循环控制语句// Go中没有while循环,但可以通过for循环 + if条件控制实现while循环// 需求: 当随机数i=999时, 打印"恭喜你成为超级幸运玩家!"package mainimport ("fmt""math/rand""time")func main() {for {rand.Seed(time.Now().UnixNano()) // 以时间戳作为随机数种子i := rand.Intn(1000) // 随机生成0-1000之间的整数fmt.Println(i)if i == 999 {fmt.Println("恭喜你成为超级幸运玩家!")break}}}
多层for循环
基本介绍
- 将一个循环放在另一个循环体内,就形成了嵌套循环。在外层的for循环称为 外层循环,在内层的for循环称为 内层循环。(建议不超过3层嵌套循环)
- 实质上,嵌套循环就是把内层循环当成外层循环的循环体。当内层循环的循环条件为false时,才会完全结束内层循环,此时外层循环仅结束单次循环,并随后开始下一次循环。
- 若外层循环次数为m次,内层循环为n次,则内层循环体实际需要执行m * n次
案例演示
// 演示 for 多重循环控制语句// 统计3个班的成绩情况,每个班有5名同学,求出每个班的平均分 及 所有班在一起的平均分 (学生的成绩从键盘输入获取)package mainimport "fmt"func main() {var score, sum, totalSum float64for i := 1; i <= 3; i++ {sum = 0.0 // 重点: 在外层循环每次循环时,将sum赋值为0.0,从而实现通过sum求每个班的总分时,不会迭加上一班的分数for n := 1; n <= 5; n++ {fmt.Printf("请输入第%v个班%v名学生的成绩\n", i, n)fmt.Scan(&score)sum += score}fmt.Printf("第%v个班的平均分为%v\n\n", i, sum / 5)totalSum += sum}fmt.Printf("三个班合在一起的平均分为%v\n", totalSum / 15)}
// 演示 for 多重循环控制语句// 经典案例: 打印金字塔/*** ** *********/package mainimport "fmt"var layers intfunc main() {fmt.Println("请输入层数")fmt.Scan(&layers)// i表示层数for i := 1; i <= layers; i++ {// 在打印*号前,县打印空格for k := 1; k <= layers-i; k++ {fmt.Print(" ")}// j 表示每层*号的个数for j := 1; j <= 2*i-1; j++ {if j == 1 || j == 2*i-1 || i == layers {fmt.Print("*")} else {fmt.Print(" ")}}fmt.Println(" ")}}
