循环语句
在不少实际问题中有许多具有规律性的重复操作,因此在程序中就需要重复执行某些语句。一组被重复执行的语句称之为循环体,能否继续重复,决定循环的终止条件。
与其它主流编程语言不同的的是,Go语言中的循环语句只支持 for 关键字,而不支持 while 和 do-while 结构。
2.1、for循环
原始for循环
通过关系表达式或逻辑表达式控制循环
for condition { }
简单循环案例:
count := 0 // 初始化语句
for count < 10 { // 条件判断
fmt.Println("hello yuan!")
count++ // 步进语句
}
fmt.Println("end")
count := 10 // 初始化语句
for count > 0 { // 条件判断
fmt.Println(count)
count-- // 步进语句
}
fmt.Println("end")
练习:如何打印1-100
三要素for循环(核心)
将初始化语句、条件判断以及步进语句格式固定化的循环方式,本质上和上面的for循环没有区别。
for init;condition;post {
// 循环体语句
}
-
init
: 初始化语句,一般为赋值表达式,给控制变量赋初值; -
condition
:条件判断,一般是关系表达式或逻辑表达式,循环控制条件; -
post
: 步进语句,一般为赋值表达式,给控制变量增量或减量。
for i := 1; i < 10; i++ {
fmt.Println(i)
}
执行流程(关键):
(1)初始语句
(2)条件判断,布尔值为真则执行一次循环体,为假则退出循环
(3)执行一次循环体语句结束后,再执行步进语句,然后回到步骤(2),依次循环
案例1:计算1-100的和
/* var s = 0
s += 1
s += 2
s += 3
s += 4
s += 5
s += 6
s += 7
s += 8
s += 9
s += 10
fmt.Println(s)*/
// 如果是1+2+3+....100呢?如何借助循环语法实现
var s = 0
for i := 1; i <= 100; i++ {
s += i
}
fmt.Println(s)
2.2、分支与循环的嵌套使用
循环与和分支语句是可以相互嵌套使用的,即分支语句中使用循环语句,循环语句中使用分支语句。
打印1-100中所有的偶数
for i := 1; i <= 100; i++ {
if i%2 == 0 {
fmt.Println(i)
}
}
无限循环案例
/*
无限循环
for true{}
*/
// 循环中嵌入分支语句
func main() {
fmt.Printf(`
1、普通攻击
2、超级攻击
3、使用道具
4、逃跑
`)
for true {
var choice int
fmt.Printf("请输入选择:")
fmt.Scanln(&choice)
//fmt.Println(choice,reflect.TypeOf(choice))
switch choice {
case 1:
fmt.Println("普通攻击")
case 2:
fmt.Println("超级攻击")
case 3:
fmt.Println("使用道具")
case 4:
fmt.Println("逃跑")
default:
fmt.Println("输入有误!")
}
}
}
输入正整数num,大于100,则打印1-num,小于100,则打印num-1?
var num int
fmt.Scanln(&num)
if num > 100 {
for i := 1; i <= num; i++ {
fmt.Println(i)
}
} else {
for i := num; i > 0; i-- {
fmt.Println(i)
}
}
2.3、退出循环
如果想提 前结束循环(在不满足结束条件的情况下结束循环),可以使用break或continue关键字。
-
break 用来跳出整个循环语句,也就是跳出所有的循环次数;
-
continue 用来跳出当次循环,也就是跳过当前的一次循环。
break语句
当 break 关键字用于 for 循环时,会终止循环而执行整个循环语句后面的代码。break 关键字通常和 if 语句一起使用,即满足某个条件时便跳出循环,继续执行循环语句下面的代码。
for i := 0; i < 10; i++ {
if i==8{
break
}
fmt.Println(":",i)
}
continue语句
break 语句使得循环语句还没有完全执行完就提前结束,与之相反,continue 语句并不终止当前的循环语句的执行,仅仅是终止当前循环变量 i 所控制的这一次循环,而继续执行该循环语句。continue 语句的实际含义是“忽略 continue 之后的所有循环体语句,回到循环的顶部并开始下一次循环”
for i := 0; i < 10; i++ {
if i==8{
continue
}
fmt.Println(":",i)
}
案例: 计算 1 - 2 + 3 - 4 + ... + 99 中除了88以外所有数的总和?
2.4、循环嵌套
在一个循环体语句中又包含另一个循环语句,称为循环嵌套
独立嵌套
在控制台上打印一个五行五列的矩形,如下图所示
*****
*****
*****
*****
*****
for i := 0; i < 5; i++ {
for j:=0;j<5;j++ {
fmt.Print("*")
}
fmt.Print("\n")
}
关联嵌套
在控制台上打印一个如下图所示的三角形
*
**
***
****
*****
for i := 0; i < 5; i++ {
for j := 0; j <= i; j++ {
fmt.Printf("*")
}
fmt.Println()
}