循环控制
for循环
基本介绍
听其名而知其意。即:让一段代码多次/循环执行。
入门案例
// 演示for循环控制 入门案例
// 需求: 打印100次 "hello world!"
package main
import "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 main
import "fmt"
func main() {
var (
count uint64
sum uint64
)
for i := 1; i <= 100; i++ {
if i % 9 == 0 {
count ++
sum += uint64(i)
}
}
fmt.Println(count, sum)
}
// 演示 for 循环控制语句
// 需求: 完成下列块注释中表达式的输出(6是可变的)
/*
0 + 6 = 6
1 + 5 = 6
2 + 4 = 6
3 + 3 = 6
4 + 2 = 6
5 + 1 = 6
6 + 0 = 6
*/
package main
import "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 main
import (
"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 main
import "fmt"
func main() {
var score, sum, totalSum float64
for 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 main
import "fmt"
var layers int
func 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(" ")
}
}