0
点赞
收藏
分享

微信扫一扫

【Golang程序流程控制】

雨鸣静声 2022-02-06 阅读 42

程序流程控制


一、程序流程控制介绍

  • 顺序控制
  • 分支控制
  • 循环控制

二、顺序控制

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视频的学习做的笔记。

举报

相关推荐

0 条评论