5.1 程序流程控制控件基本介绍
在程序中,程序运行的流程控制觉得程序是如何运行的,是我们必须掌握的,主要有三大流程控制语句。
- 顺序控制
- 分支控制
- 循环控制
5.2 顺序控制
顺序控制介绍
程序从上到下逐行地进行,中间没有任何判断和跳转。
5.3 分支控制
分支控制的基本介绍
分支控制就是让程序有选择执行,有下面三种形式
- 单分支
- 双分支
- 多分支
单分支
基本语法
if 条件表达式{
执行代码块
}
说明:当条件表达式为true时,就会执行{}的代码
注意{}是必须有的,就算你只写一行代码。
案例说明
请大家看个案例【ifDemo.go】
编写一个程序,可以输入人的年龄,如果该同志的年龄大于18岁,则输出“你的年龄大于18岁,要对自己的行为负责!”
var age int fmt.Println("请输入年龄:") fmt.Scanln(&age) if age > 18 { fmt.Println("你年龄大于18,要对自己的行为负责!") }
双分支
基本语法
if 条件表达式{
执行代码块1
}else{
执行代码块2
}
案例
var age int fmt.Println("请输入年龄:") fmt.Scanln(&age) if age > 18 { fmt.Println("你年龄大于18,要对自己的行为负责!") } esle { fmt.Println("你的年龄不大这次放过你了") }
var x int = 4 var y int = 1 if(){ if(y>2){ fmt.Println(x+y) } fmt.Println("atguigu") }else{ fmt.Println("x is = ",x) } // 输出atguigu var x int = 4 if x>2 fmt.Println("ok") else fmt.Println("hello") // 编译错误,原因没有{} var x int = 4 if x>2 { fmt.Println("ok") } else{ fmt.Println("hello") } // 编译错误,else不能换行
嵌套分支
基本介绍
在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支结构成为内层分支外面的分支结构称为外层分支。
基本用法
if 条件表达式{ if 条件表达式{ }else{ } }
说明:嵌套分支不宜过多,建议控制在3层内
5.4 switch 分支控制
基本的介绍
1.switch语句用于基于不同条件执行不同动作,每一个case分支都是唯一的,从上到下逐一测试,知道匹配为止
2.匹配项后面也不需要再加break
基本语法
switch 表达式{ case 表达式1,表达式2,...: 语句块1 case 表达式3,表达式4,...: 语句块2 // 这里可以有多个case语句 default: 语句块 }
switch的流程图
对上图的说明和总结
- switch 的执行流程是,先执行表达式,得到值。然后和case的表达式比较,如果相等,就匹配到,然后执行对应的case的语句块,然后退出switch控制
- 如果switch的表达式的值没有和任何的case的表达式匹配成功,则执行default的语句块。执行后退出switch的控制。
- golang的case后的表达式可以有多个,使用逗号隔离
- golang中的case语句块不需要写break,因为默认会有,即在默认情况下,当程序执行完case语句块后,就直接退出该switch控制结构。
switch快速入门案例
/* 编写一个程序,该程序可以介绍一个字符,比如:a,b,c,d,e,f,g a表示星期一,b表示星期二 根据用户的输入显示相依的信息 要求使用switch语句完成 */ var key byte fmt.Println("请输入一个字符 a,b,c,d,e,f,g") fmt.Scanf("%c",&key) switch key{ case 'a': fmt.Println("周一,猴子穿新衣") case 'b': fmt.Println("周二,猴子当小二") case 'c': fmt.Println("周三,猴子爬雪山") // ... default: fmt.Println("输入有误......") }
switch的使用的注意事项和细节
- case/switch后是一个表达式(即:常量值,变量,一个有返回值的函数等都可以)
- case后的各个表达式的数据类型,必须和switch的表达式数据类型一致
- case后面可以带多个表达式,使用逗号间隔,比如case表达式1,表达式2…case后面的表达式如果是常量值(字面量),则要求不能重复
- case后面的表达式如果是常量值(字面量),则要求不能重复
- case后面不需要带break,程序匹配到一个case后悔执行对应的代码块,然后退出switch,如果一个都匹配不到,则执行default
- default语句不是必须的
- switch后面也可以不带表达式,类似if…else分支来使用【案例演示】
8. switch后也可以直接声明一个变量,分号结束,不推荐。【案例演示】
- switch穿透fallthrough,如果在case语句块后增加failthrough,则会继续执行下一个case,也叫switch穿透
- Type Switch:switch 语句还可以被用于type-switch来判断某个interface变量中实际指向的变量类型
switch的课堂练习
- 使用switch把小写类型的char型转为大写(键盘输入)。只转换a,b,c,d,e 其他的输入“other”
- 使用switch把小写类型的char型转换为大写(键盘输入)
- 只转换a,b,c,d,e, 其他的输出“other”
func main(){ var char byte fmt.Println("请输入一个字符...") fmt.Scanf("%c",&char) switch char{ case 'a': fmt.Println("A") case 'b': fmt.Println("B") case 'c': fmt.Println("C") case 'd': fmt.Println("D") case 'e': fmt.Println("E") default : fmt.Println("other") } }
- 对学生成绩大于60分的,输出“合格”,低于60分的,输出“不合格”。(注:输入的成绩不能大于100)
var score float64 fmt.Println("请输入成绩") fmt.Scanln(&score) switch int(score/60){ case 1: fmt.Println("及格") case 0: fmt.Println("不及格") default: fmt.Println("输入有误...") }
switch和if的比较
1.如果判断的具体数值不多,而且符合整数,浮点数,字符,字符串这几种类型,建议使用switch语句,简介高效
2.其他情况,对区间判断和结果为bool类型的判断,使用if,if的范围更广
5.5 for循环控制
基本介绍
听其名而知其意,就是让我们的一段代码循环的执行。
一个需求
请大家看个案例【for】编写一个程序,可以打印10句
for i := 1;i<=10;i++ { fmt.Println("hellow,world",i) }
for循环的基本语法
语法格式
for 循环变量初始化;循环条件;循环变量迭代{
循环操作(语句)
}
对上面的语法格式说明
a.对for循环来说,有四个要素
b. 循环变量初始化
c.循环条件
d.循环操作(语句),有人也叫循环体
e.循环变量迭代
for循环的顺序说明:
1.执行循环变量初始化 比如 i=1
2.执行循环条件, 比如 i<=10
3.如果循环条件为真,就执行循环操作 比如 fmt.Println(“…”)
4.执行循环变量迭代,比如 i++
5.反复执行2,3,4步骤,直到循环条件为false,就退出for循环
for循环执行流程分析
for循环的流程图
for循环的使用注意事项和细节讨论
1.循环条件是返回一个布尔值的表达式
2.for循环的第二种使用方式
for 循环判断条件{
// 循环执行语句
}
将变量初始化和变量迭代写到其他位置
j := 1 for j <= 10{ fmt.println("hello,world",j) j++ }
3.for循环的第三种使用方式
for{ // 循环执行语句 }
上面的写法等价for;;{}是一个无限循环,通常需要配合break语句使用
k := 1 for{ if k <= 10{ fmt.Println("ok~") }else{ break } k++ }
5.8 break的注意事项和使用细节
- break语句出现在多层嵌套的语句块中时,可以通过标签指明要终止的是那一层语句块
lable2: for i := 0; i<4;i++{ // lable1: //设置一个标签 for j := 0;j<10;j++{ if j==2 { // break // break 默认会她跳出最近的for循环 // break lable1 break lable2 // j=0 j=1 } fmt.Println("j=",j) } }
- 对以上案例说明
break默认会跳出最近的for循环,break后面可以指定标签,跳出标签对应的for循环
5.9 跳转控制语句 -continue
基本介绍
continue语句用于结束本次循环,继续下次循环
continue语句出现在多层数量的循环语句体中时,可以通过标签指明要跳过的是哪一类循环,这个和前面的break标签的使用的规则一样
基本语法
{ continue }
continue流程图
5.10 跳转控制语句 goto
goto基本介绍
- Go语言的goto语句可以无条件地转移到程序中指定的行
- goto语句通常与条件语言配合使用,可以来实现条件转移,跳出循环体等功能。
- 在Go程序设计中一般不主张使用goto语句,以免造成流程的混淆,使理解和调试程序都产生困难
goto基本语法
goto label ...... label:statement
goto 的流程图
入门案例
func main(){ fmt.Println("ok1") goto lable: fmt.Println("ok2") fmt.Println("ok3") lable: fmt.Println("ok4") }
5.11 跳转控制语句-return
介绍
return 使用在方法或者函数中,表示跳出来所在的方法或函数,在讲解函数的时候,会详细的介绍
说明
- 如果return在普通的函数,则表示跳出该函数,即不再执行函数中return后面的代码,也可以理解成终止函数。
- 如果return是在main函数中,表示终止main函数,也就是说终止程序。
感谢大家观看,我们下次见