持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第13天,点击查看活动详情
一、For循环控制
1.1 基础语法及说明
for 循环变量初始化;循环条件;循环变量迭代{
循环操作(语句)/循环体
}
1.2 for 循环四要素
- 循环变量初始化
- 循环条件
- 循环操作/循环体
- 循环变量迭代
1.3 for循环简单案例
1.3.1 for循环使用方法1
package main
import "fmt"
func main() {
// for循环演示
for i := 0; i < 10; i++ {
fmt.Println("当前i = ", i)
}
}
1.3.2 for循环使用方法2
package main
import "fmt"
func main() {
// for循环演示2
j := 0 //变量初始化
for i < 10{ //循环条件
fmt.Println("当前i = ", j)
j++ // 循环变量迭代
}
}
1.3.3 for循环使用方法3(死循环,搭配break)
等价于 for ;;{}
package main
import "fmt"
func main() {
//搭配 break 使用
k := 1
for { // 等价于 for ;;{}
if k <= 10{
fmt.Println("k值为: ", k)
}else{
break
}
k++
}
1.4 for循环执行的顺序说明
- 执行变量初始化, 如 i:=0
- 执行
循环条件判断, 如 i<10 - 如果循环条件为真(步骤二),执行循环体操作 fmt.Println("当前i = ", i)
- 执行循环变量迭代,如 i++
- 反复执行,直到
循环条件为假时,退出
1.5 for循环注意事项和细节说明
- 循环条件是返回一个布尔值表达式
二、案例解析
2.1 字符串遍历
2.1.1 for循环实现
package main
import "fmt"
func main() {
// 定义字符串变量
var str string = "hello,golang"
for i := 0; i < len(str); i++ {
fmt.Printf("%c", str[i]) // 使用Printf转义
}
}
2.1.2 for-range方法实现(可遍历中文)
若本案例中存在中文,那么一个中文会占用3个index
package main
import "fmt"
func main() {
// 定义字符串变量
var str string = "hello,golang"
// 若是中文 那么一个中文会占用3个index
for index, val := range str {
fmt.Printf("index=%d , value=%c\n", index, val)
}
}
2.1.3 遍历中文字符串(非 for - range)
传统遍历对字符串遍历,是按照字节遍历;一个汉字在utf8中占3个字节
需要将字符串转换为 []rune 切片
package main
import "fmt"
func main() {
// 定义字符串变量
var str string = "你好,golang"
// 将str转换为 []rune
rune_str := []rune(str)
for i := 0; i < len(rune_str); i++ {
fmt.Printf("%c", rune_str[i]) // 使用Printf转义
}
}
2.2 打印100以内数字9的倍数的个数及总和
package main
import "fmt"
func main() {
// 定义count变量 用来记录9的倍数
var count int = 0
// 定义 sum 变量 用来记录9倍数的总和
var sum int = 0
for i := 1; i <= 100; i++ {
if i%9 == 0 {
count++
sum += i
}
}
fmt.Printf("count = %d, sum = %d", count, sum)
}
2.3 输出如下等式
package main
import "fmt"
func main() {
// 定义result变量
var result int = 6
for i := 0; i <= result; i++ {
fmt.Printf("%d + %d = %d\n", i, result-i, result)
}
}
三、Go语言中while / do-while的实现
使用for语句实现
3.1 while 案例
package main
import "fmt"
func main() {
// 循环变量初始化
i := 0
for {
// if 循环条件表达式
if i > 10 {
// 跳出for循环
break
}
// 循环操作语句
fmt.Println("这是循环操作语句 -> ", i)
// 循环变量迭代
i++
}
}
3.2 do-while 案例
循环先执行,后判断,至少执行一次
package main
import "fmt"
func main() {
// 循环变量初始化
i := 0
for {
// 循环操作语句
fmt.Println("当前i ==> ", i)
// 循环变量迭代
i++
// if 循环条件表达式
if i > 10 {
// 跳出循环
break
}
}
}
四、多重循环控制
4.1 介绍
- 将一个循环放在另一个循环体内,就形成了嵌套循环。在外边的for称为外层循环在里面的for循环称为内层循环。[建议一般使用两层 ,最多不要超过3层]
- 实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为false时,才会完全跳出内层循环,才可结束外层的当次循环,开始下一次的循环。
- 设外层循环次数为m次,内层为n次,则内层循环体实际上需要执行m*n=mn次。
4.2 案例介绍
4.2.1 统计班级成绩
- 统计三个班的学习情况,其中每个班5个学生
- 求各个班的平均分和所有班级的平均分
- 统计三个班及格人数
- 从键盘输入学生成绩
package main
import "fmt"
func main() {
// 统计三个班的学习情况,其中每个班5个学生
// 求各个班的平均分和所有班级的平均分
// 从键盘输入学生成绩
var sum_score, class_sum_score, student float32
var sum_pass, class_pass int
for i := 1; i <= 3; i++ {
class_sum_score = 0
class_pass = 0
for j := 1; j <= 5; j++ {
fmt.Printf("请输入第%v名学生的成绩: ", j)
fmt.Scanln(&student)
class_sum_score += student
if student >= 60 {
class_pass++
}
}
sum_score += class_sum_score
sum_pass += class_pass
fmt.Printf("%v班平均分为: %v, 及格人数: %v\n", i, class_sum_score/5, class_pass)
}
fmt.Printf("所有班级平均分为: %v, 总计及格人数: %v 人\n", sum_score/3, sum_pass)
}
4.2.2 打印金字塔
根据用户输入的层数打印出对应层的金字塔
package main
import "fmt"
func main() {
// 从键盘输入来打印对应的金字塔层数
var layers int
fmt.Printf("请输入您要打印的金字塔层数:")
fmt.Scanln(&layers)
for i := 1; i <= layers; i++ {
// 打印空格
for k := 1; k <= layers-i; k++ {
fmt.Printf(" ")
}
for j := 1; j <= i; j++ {
fmt.Printf("* ")
}
fmt.Println()
}
}
4.2.3 九九乘法表
package main
import "fmt"
func main() {
// 打印九九乘法表
for i := 1; i <= 9; i++ {
for j := 1; j <= i; j++ {
fmt.Printf("%v*%v=%v\t", j, i, i*j)
}
fmt.Println()
}
}