go语言使用-程序流程控制之循环控制

本文详细介绍了Go语言的循环控制,包括for循环的基本语法、执行流程、快速入门案例以及如何用for实现while和do...while的效果。同时,还讨论了for-range在遍历数组和字符串中的应用,并给出了多重循环的概念和实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、基本介绍

听其名而知其意,循环控制-for可以让你的代码循环的执行。

二、基本语法

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

语法分析:

for循环四要素:
1、循环变量初始化
2、循环的条件,只有为真(true) 才会执行,否则退出for
3、循环操作(语句), 完成的任务
4、循环变量迭代, 会向退出循环变化
for循环执行步骤
1、先执行循环变量初始化
2、执行循环条件, 判断是否为真,如果为真,则继续,否则退出
3、执行循环操作
4、执行循环叠代
5、然后反复的执行 2, 3, 4 , 直到循环条件 为假,就退出

三、for循环执行流程图

这里写图片描述

四、快速入门案例

实现:打印1~100之间所有是9的倍数的整数的个数及总和

// 1) 打印1~100之间所有是9的倍数的整数的个数及总和
/*
分析:
1、for循环遍历1~100
2、是9的倍数的整数 if i%9 ==0
2、变量 sum 加2中i count 计数
*/
 func ForDemo5()  {
    var count = 0 
    var sum = 0
     for i := 1; i < 101; i++ {
         if i % 9 == 0 {
            count++
            sum += i
         }
     }
     fmt.Printf("1~100之间所有是9的倍数的整数的个数为:%d及总和:%d \n",count,sum)
 }

五、使用细节和注意事项

1、循环条件是返回一个布尔值的表达式
2、for循环的第二种使用方式——实现while

for  循环判断条件  {
    //循环执行语句
}

将变量初始化和变量迭代写到其它位置

代码:

// for使用方式二 使用for循环实现while的效果
func ForDemo2()  {
    i := 0
    for  i < 10 {   
        fmt.Println("for使用方式二",i)
    }
    i++
    fmt.Println("---------------------------------------")
}

3、 for循环的第三种使用方式——实现do while

for  {
    //循环执行语句
} 

上面的写法等价 for ; ; {} 是一个无限循环, 通常需要配合break语句使用。

代码

// for使用方式三 使用for循环do..while的效果实现
func ForDemo3()  {
    i := 0
    for  {
        i++
        if i >10 {
            break
        }

        fmt.Println("for使用方式三",i)
    }
    fmt.Println("---------------------------------------")

}

上面代码,也有人这样写

for ture {
}

for ; ; {
}

4、Golang 提供 for-range的方式,可以方便遍历字符串和数组。
5、使用for 来遍历字符串有两种方法
方式1-常规方法

str := "qjmkfa中国c东方oomccsm,cfd"
// 按字节进行遍历,如果出现中文,会乱码,解决方法切片
    for i1 := 0; i1<len(str); i1++ {
        fmt.Printf("第%d个下标的值是%c \n",i1,str[i1])
    }
    //切片解决普通遍历中文乱码
    str2 := []rune(str)
    for i2 := 0; i2<len(str2); i2++ {
        fmt.Printf("第%d个下标的值是%c \n",i2,str2[i2])
    }
    fmt.Println("---------------------------------------")

方式2-for–range

str := "qjmkfa中国c东方oomccsm,cfd"
    //for range 按字符进行遍历,如果出现中文,不会乱码
    for i , j := range str {
        fmt.Printf("第%d个下标的值是%c \n",i,j)
    }
    fmt.Println("---------------------------------------")

六、while和do…while的实现

1、基本说明
Go语言没有while和do…while语法,这一点需要同学们注意一下,如果我们需要使用类似其它语言(比如 java / c 的 while 和 do…while ),可以通过for循环来实现其使用效果。
2、使用for循环实现while的效果

循环变量初始化
for {
    if 循环条件表达式 {  // 先判断在执行
        break //跳出for循环..
    }
    循环操作(语句)
    循环变量迭代
}   

说明:
1) 使用for实现while 的效果, 变量的初始化写在for外部
2) for 本身是一个无限循环,先判断在执行, 如果判断为真,则break
3) 判断完毕后,继续执行语句和叠代。

代码:

// for使用方式二 使用for循环实现while的效果
func ForDemo2()  {
    i := 0
    for  i < 10 {   
        fmt.Println("for使用方式二",i)
    }
    i++
    fmt.Println("---------------------------------------")
}

3、使用for循环实现do..while的效果

循环变量初始化
for {
    循环操作(语句)
    循环变量迭代
    if 循环条件表达式 {
        break //跳出for循环..
    }
}

代码:

// for使用方式三 使用for循环do..while的效果实现
func ForDemo3()  {
    i := 0
    for  {
        i++
        if i >10 {
            break
        }

        fmt.Println("for使用方式三",i)
    }
    fmt.Println("---------------------------------------")

}

七、多重循环

1、基本介绍

将一个循环放在另一个循环体内,就形成了嵌套循环。在外边的for称为外层循环在里面的for循环称为内层循环。【建议一般使用两层,最多不要超过3层】
实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为false时,才会完全跳出内层循环,才可结束外层的当次循环,开始下一次的循环。
外层循环次数为m次,内层为n次,则内层循环体实际上需要执行m*n次。

2、快速入门案例
打印金字塔经典案例

//请编写一个程序,可以接收一个整数,表示层数,打印出金字塔
    //
    /*
        *
       ***
      *****

    */

    //分析
    //1. 先打印出
    /*

        ****
        ****
        ****

    */



    //2 打印
    /*
        *        //第1行打印 1 *   即: 2 * i - 1 
        ***      //第2行打印 3 *
        *****    //第3行打印 5 *

    */

    //3 打印

    /*
        *     //第1行打印 空格  2   = 总的行数  - i = 3 - 1 
       ***    //第2行打印 空格  1   = 3 - 2
      *****   //第3行打印 空格  0   = 3 - 3
    */

    //4 打印 空心的 , 什么情况下打印 * ,什么情况下打印空格

    /*
        *
       * *
      *****
    */

    //将 3 改成一个变量
    var totalLayer = 20

    //代码实现
    for i := 1; i <= totalLayer; i ++ {  //i表示 第几行 
        //先打印出空格
        for k := 1; k <= totalLayer - i; k++ {
            fmt.Print(" ")
        }

        for j := 1; j <= 2 * i - 1; j++ {  //j 表示列
            //什么情况下打印 * ,什么情况下打印空格
            //在当前这个情况下的第一个和最后一个打印*,其它打印空格
            if j == 1 || j ==  2 * i - 1 || i ==  totalLayer {
                fmt.Print("*")
            } else {
                fmt.Print(" ")
            }
        }
        fmt.Println()
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值