程序流程控制
一、程序流程控制介绍
- 顺序控制
- 分支控制
- 循环控制
二、顺序控制
1)内涵
2)流程图
3)注意==定义变量采用合法的前向引用
三、分支控制
1.分支控制的基本介绍
- 单分支
- 双分支
- 多分支
2.单分支控制
1)基本语法
age:=12
var age int
fmt.Println("请输入你的年龄:")
fmt.Scanln(&age)
if age>=18 {
fmt.Println("你要为自己的行为负责")
}
2)流程图
3)细节:if中,支持定义一个变量
if age:=20;age>18{//感觉这个有点神奇,支持在if判断条件中定义一个变量
fmt.Println("你的年龄大于18,要对自己的行为负责!")
3.多分支控制
1)基本语法
else不是必须的,且多分支只有一个执行入口
2)流程图
3)一些注意
4)案例
package main
import "fmt"
func main(){
var score int
fmt.Println("请输入成绩:")
fmt.Scanln(&score)
if score==100{
fmt.Println("奖励一辆BMW")
}else if score>88&&score<=99{
fmt.Println("奖励一台iphone7plus")
}else if score>=60&&score<=80{
fmt.Println("奖励一个Ipad")
}else{
fmt.Println("什么都不奖励")
}
}
package main
import "fmt"
func main(){
var height int32
var money float64
var handsome bool
fmt.Println("请输入身高:")
fmt.Scanln(&height)
fmt.Println("请输入财富:")
fmt.Scanln(&money)
fmt.Println("请输入是否帅气:")
fmt.Scanln(&handsome)
if height>180 && money>1.0 &&handsome{
fmt.Println("我一定要嫁给他")
}else if height>180 || money>1.0 || handsome{
fmt.Println("嫁吧,比上不足,比下有余。")
}else{
fmt.Println("不嫁。。。。")
}
}
package main
import (
"fmt"
"math"
)
func main(){
a:=2.0
b:=4.0
c:=2.0
m:=b*b-4*a*c
if m>0{
x1:=(-b+math.Sqrt(m))/2*a
x2:=(-b-math.Sqrt(m))/2*a
fmt.Printf("x1=%v x2=%v",x1,x2)
}else if m==0{
x1:=(-b+math.Sqrt(m))/2*a
fmt.Printf("x1=%v",x1)
}else{
fmt.Println("无解")
}
}
5)陷阱
if的条件表达式不能是赋值语句
4.嵌套分支
1)基本介绍
2)案例
package main
import(
"fmt"
)
func main(){
var second float64
fmt.Println("请输入秒数")
fmt.Scanln(&second)
if second<=8{
var gender string
fmt.Println("请输入性别")
fmt.Scanln(&gender)
if gender=="女"{
fmt.Println("进入女子组")
}else{
fmt.Println("进入男子组")
}
}else{
fmt.Println("出局")
}
}
四、SWITCH分支控制
1)介绍不用加break
2)流程图
3)快速入门案例
func main(){
var key byte
fmt.Println("请输入一个字符,a,b,c,d,e")
fmt.Scanf("%c",&key)
switch key {
case 'a':
fmt.Println("周一")
case 'b':
fmt.Println("周二")
case 'c':
fmt.Println("周三")
case 'd':
fmt.Println("周四")
case 'e':
fmt.Println("周五")
default:
fmt.Println("输入有误。。。")
}
}
4)注意细节
- case和switch后表达式的数据类型一致
- case后可以有多个表达式,用逗号分隔
- case后表达式为常量,不能重复变量可以
- case后不需要带break
- default不是必须的
- Switch后不带表达式,类似if-else来使用
func main(){
age:=10
switch {
case age==10:
fmt.Print("优秀")
case age<10 && age>=5:
fmt.Print("优良")
case age<5 && age>=0:
fmt.Print("加油")
default :
fmt.Print("没救了")
}
}
- switch后可以定义一个变量,不推荐
- fallthrough穿透,可以执行下一个case
5)练习
func main(){
var month byte
fmt.Println("请输入月份:")
fmt.Scanln(&month)
switch month{
case 3,4,5:
fmt.Println("spring")
case 6,7,8:
fmt.Println("summer")
case 9,10,11:
fmt.Println("autumn")
case 12,1,2:
fmt.Println("winter")
default:
fmt.Println("输入错误")
}
}
五、FOR循环控制
1)快速入门
func main(){
for i:=1;i<=10;i++{
fmt.Println("hello world")
}
}
2)基本语法
3)流程图
4)注意
- 循环条件返回一个布尔值的表达式
- 第二种使用方式
j:=1
for j<=10 {
fmt.Println("hello world!")
j++;
}
- 第三种方式
j:=0;//无限循环,配合break
for{
if(j<10){
fmt.Println("hello world")
}else{
break
}
k++
}
- for-range
六、WHILE和DO…WHILE的实现
1)while的实现
2)dowhile的实现
七、多重循环控制
1)基本介绍
2)案例
totalsum:=0.0
for j:=1;j<=3;j++{
sum:=0.0
for i:=1;i<=5;i++{
var score float64
fmt.Println("请输入学生成绩:")
fmt.Scanln(&score)
sum+=score
}
fmt.Println("第%d个班级的平均分数是:%v",j,sum/5)
totalsum+=sum
}
fmt.Printf("总成绩:%v",totalsum)
打印金字塔
for i:=1;i<=3;i++{
for k:=1;k<=3-i;k++{
fmt.Print(" ")
}
for j:=1;j<=2*i-1;j++{
fmt.Print("*")
}
fmt.Println()
}
八、跳转控制语句
1.BREAK
1)引入break
func main(){
// rand.Seed(time.Now().Unix())
// n:=rand.Int(100)+1
// fmt.Println(n)
count:=0
for{
rand.Seed(time.Now().UnixNano())
n:=rand.Intn(100)+1
fmt.Println("n=",n)
count++
if(n==99){
break
}
}
fmt.Printf("一共使用%d次",count)
}
2)基本介绍
3)示意图
4)注意多层循环通过标签控制退出那一层循环
5)练习
sum:=0
for i:=1;i<=100;i++{
sum+=i
if sum>20{
fmt.Println("当前数:",i)
break
}
}
2.CONTINUE
1)介绍
2)练习
var p int
var n int
var num int
for{
fmt.Scanln(&num)
if num==0{
break
}
if num>0{
p++
continue
}
n++
}
fmt.Printf("正数的个数%v,负数的个数%v",p,n)
}
3.GOTO
1)基本介绍
2)快速入门
n:=30
if n>20{
goto label
}
fmt.Println("ok1")
fmt.Println("ok2")
fmt.Println("ok3")
label:
fmt.Println("ok6")
fmt.Println("ok7")
fmt.Println("ok8")
4.RETURN
func main(){
for i:=1;i<=10;i++{
if i==3{
return
}
fmt.Println("娃娃",i)
}
fmt.Println("hello world!")
}
ps:如果把return改为break,那么结果变成
总结
提示:本文仅仅简单介绍了Golang程序流程控制,此篇是通过b站尚硅谷Golang视频的学习做的笔记。