Go条件判断之if分支控制语句

条件语句需要开发者通过指定一个或多个条件,并通过测试条件是否为 true 来决定是否执行指定语句,并在条件为 false 的情况在执行另外的语句。

分支控制就是让程序有选择执行。有下面三种形式:

1)单分支

2)双分支

3)多分支

下图展示了程序语言中条件语句的结构:

image-20230130084300634

1、if单分支控制

if 语句由布尔表达式后紧跟一个或多个语句组成。

语法:

if 布尔表达式 {

/* 在布尔表达式为 true 时执行 */

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package main
import (
"fmt"
)

func main() {

//编写一个程序,可以输入人的年龄,如果年龄大于18岁,则输出 "你已经成年了"

var age int
fmt.Println("请输入年龄:")
fmt.Scanln(&age) //接收键盘输入的值

if age > 18 {
fmt.Println("你已经大于18岁了,可以自力更生了")
}

// //golang支持在if中,直接定义一个变量,比如下面
// if age := 20; age > 18 {
// fmt.Println("你年龄大于18,要对自己的行为负责!")
// }

}

2、if..else分支控制

语法:

if 条件表达式{

执行代码块1

} else{

执行代码块2

}

流程图:

image-20230130092516618

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package main

import "fmt"

func main() {
var age int
fmt.Println("请输入年龄:")
fmt.Scanln(&age)
if age >= 18 {
fmt.Println("已成年")
} else {
fmt.Println("你还未成年")
}
}

3、if多分支控制

语法:

if 条件表达式1{

​ 执行代码块1

}else if 条件表达式2{

​ 执行代码块2

}

else{

​ 执行代码块n

}

多分支的判断流程如下:

(1) 先判断条件表达式1是否成立,如果为真,就执行代码块 1

(2) 如果条件表达式 1 为假,就去判断条件表达式 2 是否成立, 如果条件表达式 2 为真, 就执行代码块 2

(3) 依次类推.

(4) 如果所有的条件表达式不成立,则执行 else 的语句块,else 不是必须的。

image-20230130093057368

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package main

import "fmt"

func main() {
//根据考试成绩,决定输入哪个等级
//成绩为100分时,满分
//成绩为80-99时,优秀
//成绩为60-80时,及格
//成绩为0-60时,不及格
//>100 <0时成绩无效
var score int
fmt.Println("请输入成绩:")
fmt.Scanln(&score)
//多分支判断
if score == 100 {
fmt.Println("满分")
} else if score > 80 && score <= 99 {
fmt.Println("优秀")
} else if score >= 60 && score <= 80 {
fmt.Println("及格")
} else if score >= 0 && score < 60 {
fmt.Println("不及格")
} else {
fmt.Println("成绩无效")
}
}

4、if嵌套分支

在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支的结构称为内层分支,外面的分支结构称为外层分支。嵌套分支不宜过多,建议控制在2-3层。

语法:

if 条件表达式{

if 条件表达式{

​ 执行代码块1

}else{

执行代码块2

}

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package main

import (
"fmt"
)

func main() {
//参加百米运动会,如果用时10秒以内进入决赛,否则提示淘汰。并且根据性别提示进入男子组或女子组。
//输入成绩和性别
var second float64
fmt.Println("请输入秒数")
fmt.Scanln(&second)
if second <= 10 {
//进入决赛
var gender string
fmt.Println("请输入性别")
fmt.Scanln(&gender)
if gender == "男" {
fmt.Println("进入决赛的男子组")
} else {
fmt.Println("进入决赛的女子组")
}
} else {
fmt.Println("你被淘汰了...")
}
}

5、if分支综合练习

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package main

import "fmt"

//出票系统:根据淡旺季的月份何年龄,打印票价
//6月到10月份旺季:
// 成人(18-70):200
// 未成年(<18):1/5
// 老人(>70):1/10
//其它月份淡季:
// 成人:100
// 其它:200*(1/20)
func main() {
var month int
var age int
var price float64 = 200.0
fmt.Println("请输入月份:")
fmt.Scanln(&month)
if month >= 6 && month <= 10 {
fmt.Println("请输入年龄:")
fmt.Scanln(&age)
if age >= 18 && age <= 70 {
fmt.Printf("%v月 年龄%v 票价%v", month, age, price)
}
if age > 0 && age < 18 {
fmt.Printf("%v月 年龄%v 票价%v", month, age, price/5)
}
if age > 70 {
fmt.Printf("%v月 年龄%v 票价%v", month, age, price/10)
}
}
if month >= 1 && month < 6 || month > 10 && month <= 12 {
fmt.Println("请输入年龄:")
fmt.Scanln(&age)
if age >= 18 && age <= 70 {
fmt.Printf("%v月 年龄%v 票价%v", month, age, price/2)
} else {
fmt.Printf("%v月 年龄%v 票价%v", month, age, price/20)
}
}
}


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!