循环
1.for循环
循环条件满足,循环体就会被执行,直到循环条件不满足为止。2.for的语法结构
for 表达式1;表达式2;表达式3{循环体;
}
3.for的执行流程:
表达式1:最开始执行,仅执行一次,惯用于变量的初始化。表达式2:循环条件,是boo类型。
表达式3:循环体执行后执行,惯用于变量的变化。
package main import "fmt" func main() { /* 17.使用for循环,计算5的阶乘:5!=5*4*3*2*1 18.使用for循环,打印58-23数字 19.使用for循环,打印'A'到'Z'字母 ‘A’-->int32,数值 65,'A' 20.使用for循环,打印1-100内的数字,每行打印10个。 */ sum := 1 for i := 5; i > 0; i-- { sum *= i } fmt.Println(sum) for i := 58; i >= 23; i-- { fmt.Println(i) } for i := 'A'; i <= 'Z'; i++ { fmt.Printf("%q\t", i) } fmt.Println() for i := 1; i <= 100; i++ { fmt.Print(i, "\t") if i%10 == 0 { fmt.Println() // print+line,直接换行 } } }
4.for的变形:
表达式1,2,3都可以省略表达式2省略,意味着永真
for 表达式1;表达式2;表达式3{} 正常for循环
for 表达式2{} 没有初始值,只有退出条件,满足一定条件后退出
for{} 死循环
package main import "fmt" func main() { /* for 表达式1;表达式2;表达式3{ 循环体 } */ //1.省略表达式1 i := 1 for ;i<5;i++{ fmt.Println(i)//1,2,3,4 } fmt.Println(i) // 5 // 2省略表达2,相当于条件永远为true // for j:=0;;j++{ // fmt.Println(j) // } // 3省略表达式3 for j:=0;j<10;{ fmt.Println(j)//0 0 0.... j++//1 } // 4.3个表达式都省略 //for {//?for true // fmt.Println(i) // i++ //} // 5. 省略表达式1和3 k :=0 for k < 5{ // for ; k<5; fmt.Println(k) // 0 1 2 3 4 k++ // 1 2 3 4 5 } }
5.break,continue
break:用于结束循环,循环彻底结束了。continue:用于结束某次循环,循环下次继续。
如果多层循环嵌套,break和continue默认结束里层循环,如果要结束外层循环,需要贴标签。
package main import "fmt" func main() { /* 循环中的控制语句:break,continue 循环正常结束:循环条件不满足, 通过break和continue来结束循环。 break:用于强制结束循环,无论循环条件是否满足 continue:结束了某一次循环,循环下次继续。 */ for i := 1;i<=10;i++{ if i % 2==0{ fmt.Println(i) break } } for i := 1;i<=10;i++{ if i == 5{ //break continue } fmt.Println(i) } // 1.练习1,统计1-100内能被3整除不能被5整除的数,仅要前5个。 // 2.打印从1开始的前20个奇数。 i:=1 count := 0 for { if i % 2 != 0{ fmt.Print(i,"\t") // 1 count++ // 1 if count == 20{ break } } i++ // 2 } }
6.goto
跳转到指定位置。
package main import "fmt" func main() { haha: fmt.Println("这是个标签") //这里是第6行 for i:=0;i<10;i++{ if i==5{ goto haha //这是标签 如果i=5就跳转到第6行,但是会造成死循环 } fmt.Println(i) } }