0
点赞
收藏
分享

微信扫一扫

Go语言基础语法-流程控制语句


前言

程序是由语句构成,而流程控制语句 是用来控制程序中每条语句执行顺序的语句。可以通过控制语句实现更丰富的逻辑以及更强大的功能。几乎所有编程语言都有流程控制语句,功能也都基本相似。

其流程控制方式有

  • 顺序结构
  • 分支结构
  • 循环结构

这里最简单最常用的就是顺序结构,即语句从上至下一一执行。

Go语言基础语法-流程控制语句_流程控制语句

1. 分支语句

顺序结构的程序虽然能解决计算、输出等问题,但不能做判断再选择。对于要先做判断再选择的问题就要使用分支结构。

1.1 单分支语句

语法:

if 布尔表达式 {  // 注意左花括号必须与表达式同行
   /* 在布尔表达式为 true 时执行 */
}

Go语言基础语法-流程控制语句_golang_02


案例一:

package main

import "fmt"

func main() {
	var user = "jiangtao"
	var passwd = 123

	if user == "tao" && passwd == 123 {

		fmt.Println("登陆成功")

	}
	fmt.Println("登陆失败")
}

执行结果:

Go语言基础语法-流程控制语句_顺序结构_03

解析:
此处不能存在这种写法:

if user == “tao” && passwd = 123 这种写法会报错,在判断是否相等的时候用==,而不是=

改写下,让用户输入

package main

import "fmt"

func main() {
	var user string
	var passwd string
	fmt.Println("请输入用户名:")
	fmt.Scanln(&user)
	fmt.Println("请输入密码:")
	fmt.Scanln(&passwd)

	if user == "laoxin" && passwd == "123" {

		fmt.Println("登陆成功")

	}
	fmt.Println("登陆失败")
}

但这个地方需要注意,因为是单分支语句,他输出登陆成功后,还是会输出登陆失败,。

但登陆失败一定不会执行登陆成功的语句。

如果要实现更多功能需要用到双分支语句:

双分支语句

Go语言基础语法-流程控制语句_布尔表达式_04

语法错误

if 布尔表达式 {  // 注意左花括号必须与表达式同行
   /* 在布尔表达式为 true 时执行 */
} else{
}

案例一:

package main

import "fmt"

func main() {
	var user string
	var passwd string
	fmt.Println("请输入用户名:")
	fmt.Scanln(&user)
	fmt.Println("请输入密码:")
	fmt.Scanln(&passwd)

	if user == "laoxin" && passwd == "123" {

		fmt.Println("登陆成功")

	} else {

		fmt.Println("登陆失败")

	}

}

注意语法格式,{}的位置不能变

花括号里面可以写多行代码,这是一个语句体

3. 多分支语句

语法格式:

if 布尔表达式 {  // 注意左花括号必须与表达式同行
   /* 在布尔表达式为 true 时执行 */
} else  if{
}else if{

}else if{

}else{
}

突然想起了香蕉这个单词, banananananana  

最后一定要有个else,要不然上面的都不执行

Go语言基础语法-流程控制语句_布尔表达式_05

案例一:
成绩是否合格

package main

import "fmt"

func main() {
	var score int
	fmt.Println("请输入你的成绩:")
	fmt.Scanln(&score)
	if score > 90 && score <= 100 {

		fmt.Println("成绩优秀")
	} else if score > 80 && score <= 90 {
		fmt.Println("成绩良好")

	} else if score > 60 && score <= 80 {
		fmt.Println("成绩及格")
	} else {
		fmt.Println("成绩不及格")
	}

}

执行结果:

Go语言基础语法-流程控制语句_顺序结构_06

是否存在bug呢?

比如成绩是200分

Go语言基础语法-流程控制语句_布尔表达式_07


所以成绩应该不能大于100,也不能小于0

修改v2版本

package main

import "fmt"

func main() {
	var score int
	fmt.Println("请输入你的成绩:")
	fmt.Scanln(&score)
	if score > 100 || score < 0 {
		fmt.Println("你输入的成绩超出了范围,请输入0-100之间的数字")
	} else if score > 90 && score <= 100 {

		fmt.Println("成绩优秀")
	} else if score > 80 && score <= 90 {
		fmt.Println("成绩良好")

	} else if score > 60 && score <= 80 {
		fmt.Println("成绩及格")
	} else {
		fmt.Println("成绩不及格")
	}

}

执行结果

Go语言基础语法-流程控制语句_golang_08

在想一个问题: 代码是从上往下进行,比如 一个成绩大于100, 就一定会执行第一个分支,不会执行到第二个分支。

所以我们写 score > 90 score< 100 这个小于100是否有必要。

很明显没有必要,可以改一下,改成score > 90 , 但这样少了90 。 所以需要改成score >=90

V3版

package main

import "fmt"

func main() {
	var score int
	fmt.Println("请输入你的成绩:")
	fmt.Scanln(&score)
	if score > 100 || score < 0 {
		fmt.Println("你输入的成绩超出了范围,请输入0-100之间的数字")
	} else if score >= 90 {

		fmt.Println("成绩优秀")
	} else if score >= 80  {
		fmt.Println("成绩良好")

	} else if score >=60 {
		fmt.Println("成绩及格")
	} else {
		fmt.Println("成绩不及格")
	}

}

注意,代码不管有多少行,都是执行一个分支

Go语言基础语法-流程控制语句_顺序结构_09

其他分支语句 switch

语法:

switch var {
    case val1:
        ...
    case val2:
        ...
    default:
        ...
}

Go语言基础语法-流程控制语句_顺序结构_10


switch语句也是多分支选择语句,执行哪一代码块,取决于switch后的值与哪一case值匹配成功,则执行该case后的代码块。

案例:

数字对应星期

package main

import "fmt"

func main() {
	var num int
	fmt.Scanln(&num)
	switch num {

	case 1:
		fmt.Println("今天星期一")
	case 2:
		fmt.Println("今天星期二")

	case 3:
		fmt.Println("今天星期三")

	case 4:
		fmt.Println("今天星期四")
	case 5:
		fmt.Println("今天星期五")

	case 6:
		fmt.Println("今天星期六")

	}
}

switch的特点:

1、switch比if else更为简洁

2、执行效率更高。switch…case会生成一个跳转表来指示实际的case分支的地址,而这个跳转表的索引号与switch变量的值是相等的。从而,switch…case不用像if…else那样遍历条件分支直到命中条件,而只需访问对应索引号的表项从而到达定位分支的目的。

3、到底使用哪一个选择语句,代码环境有关,如果是范围取值,则使用if else语句更为快捷;如果是确定取值,则使用switch是更优方案

在上面的switch中如果出现不匹配的怎么办呢?

语法:

switch{
    case 1,2:
    default:
}

完善后案例代码:

package main

import "fmt"

func main() {
	var num int
	fmt.Scanln(&num)
	switch num {

	case 1:
		fmt.Println("今天星期一")
	case 2:
		fmt.Println("今天星期二")

	case 3:
		fmt.Println("今天星期三")

	case 4:
		fmt.Println("今天星期四")
	case 5:
		fmt.Println("今天星期五")

	case 6:
		fmt.Println("今天星期六")
	case 7, 0:
		fmt.Println("今天星期日")
	default:
		fmt.Println("数字不合法")
	}
}

总结

流程控制语句,在后面的课程中会用的比较多,是学习的重点。


举报

相关推荐

0 条评论