写点什么

【一 Go 到底】第十三天 --- 循环控制

作者:指剑
  • 2022-10-13
    重庆
  • 本文字数:2507 字

    阅读完需:约 8 分钟

【一Go到底】第十三天---循环控制

一、For 循环控制

1.1 基础语法及说明


for 循环变量初始化;循环条件;循环变量迭代{ 循环操作(语句)/循环体}
复制代码

1.2 for 循环四要素

  1. 循环变量初始化

  2. 循环条件

  3. 循环操作/循环体

  4. 循环变量迭代

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 循环执行的顺序说明

  1. 执行变量初始化, 如 i:=0

  2. 执行循环条件判断, 如 i<10

  3. 如果循环条件为真(步骤二),执行循环体操作 fmt.Println("当前 i = ", i)

  4. 执行循环变量迭代,如 i++

  5. 反复执行,直到循环条件为假时,退出

1.5 for 循环注意事项和细节说明

  1. 循环条件是返回一个布尔值表达式

二、案例解析

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 介绍

  1. 将一个循环放在另一个循环体内,就形成了嵌套循环。在外边的 for 称为外层循环在里面的 for 循环称为内层循环。[建议一般使用两层 ,最多不要超过 3 层]

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

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

4.2 案例介绍

4.2.1 统计班级成绩

  1. 统计三个班的学习情况,其中每个班 5 个学生

  2. 求各个班的平均分和所有班级的平均分

  3. 统计三个班及格人数

  4. 从键盘输入学生成绩


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() }}
复制代码


发布于: 刚刚阅读数: 3
用户头像

指剑

关注

InfoQ签约作者 2022-07-13 加入

AWS Community Builder,AWS Student Ambassador,阿里云专家博主,OPS社区创始成员

评论

发布
暂无评论
【一Go到底】第十三天---循环控制_Go_指剑_InfoQ写作社区