持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第11天,点击查看活动详情
一、控制语句分类
- 顺序控制
- 分支控制
- 循环控制
二、顺序控制
程序从上到下逐行执行,中间无判断和跳转
package main
import "fmt"
func main() {
// 顺序执行
var a int = 100
var b int = 200
a, b = b, a
fmt.Printf("a = %v, b = %v\n", a, b)
safe := true
fmt.Println("safe : ", safe)
}
三、分支控制(if-else)
让程序有选择的执行,有如下三种:
- 单分支
- 双分支
- 多分支
3.1 单分支
基本语法
// 当条件表达式为 true 时,运行 代码块
if 条件表达式{
代码块
}
{} 不能省略
案例
定义年龄变量age ,从用户输入存储到变量age中,如果年龄大于 18 则提示:你已经是成年人了
package main
import "fmt"
func main() {
// 定义年龄
var age int
fmt.Printf("请输入您的年龄:")
fmt.Scanln(&age)
if age >= 18 {
fmt.Println("您已经是个成年人了")
}
}
3.2 双分支
基本语法
当条件表达式成立时,执行 代码块1,否则执行代码块2
if 条件表达式{
代码块1
}else{
代码块2
}
{} 不能省略
3.2.1 案例1
取最大数
package main
import "fmt"
func main() {
var a int = 10
var b int = 20
var max int
if a > b {
max = a
} else { // else不能换行,必须跟在 } 后面
max = b
}
fmt.Println("max = ", max)
}
3.2.2 案例2
编写程序,声明2个float64型变量并赋值。判断第一个数大于10.0,且第2个数小于20.0,打印两数之和。
package main
import "fmt"
func main() {
// 编写程序,声明2个float64型变量并赋值。判断第一个数大于10.0,且第2个数小于20.0,打印两数之和
var a, b float64
fmt.Printf("请输入a的值:")
fmt.Scanln(&a)
fmt.Printf("请输入b的值:")
fmt.Scanln(&b)
if a > 10.0 && b < 20.0 {
fmt.Println(a + b)
}
3.2.3 案例3
定义两个变量int32,判断二者的和,是否能被3又能被5整除,打印提示信息
package main
import "fmt"
func main() {
// 定义两个变量int32,判断二者的和,是否能被3又能被5整除,打印提示信息
var m, n int32
fmt.Printf("请输入m的值:")
fmt.Scanln(&m)
fmt.Printf("请输入n的值:")
fmt.Scanln(&n)
if (m+n)%3 == 0 && (m+n)%5 == 0 {
fmt.Printf("%v 可以被3和5整除", m+n)
} else {
fmt.Printf("%v 不能同时被3和5整除", m+n)
}
3.2.4 案例4
判断一个年份是否是闰年,闰年的条件是符合下面二者之一: (1)年份能被4整除,但不能被100整除; (2)能被400整除
package main
import "fmt"
func main() {
// 判断一个年份是否是闰年,闰年的条件是符合下面二者之一: (1)年份能被4整除,但不能被100整除; (2)能被400整除
var years int
fmt.Printf("请输入年份:")
fmt.Scanln(&years)
if (years%4 == 0 && years%100 != 0) || years%400 == 0 {
fmt.Printf("%v 是闰年", years)
} else {
fmt.Printf("%v 不是闰年", years)
}
}
3.3 多分支
基本语法
if 条件表达式1{
代码块1
}else if 条件表达式2{
代码块2
}
.....
}else{
代码块n
}
{} 不能省略
else 可以没有
执行流程
- 判断
条件表达式1是否成立,如果成立,执行代码块1 - 如果
条件表达式1不成立,那么判断条件表达式2执行代码块2 - 依次向下,如果都不满足则执行
else(若存在else) 中的代码块
3.3.1 案例一
定义一个成绩变量score,接收用户输入,判断用户成绩并打印
package main
import "fmt"
func main() {
// 按照成绩划分等级
var score int
fmt.Printf("请输入您的成绩:")
fmt.Scanln(&score)
if score >= 90 {
fmt.Println("您的成绩等级为: A")
} else if score >= 80 && score < 90 {
fmt.Println("您的成绩等级为: B")
} else if score >= 70 && score < 80 {
fmt.Println("您的成绩等级为: C")
} else if score >= 60 && score < 70 {
fmt.Println("您的成绩等级为: D")
} else {
fmt.Println("很抱歉,您没有及格!")
}
}
3.3.2 案例二
求ax²+bx+c=0方程的根。a,b,c分别为函数的参数,如果: b²-4ac>0,则有两个解;b²-4ac=0,则有一个解; b²-4ac<0, 则无解;
求根公式 (-b±sqrt(b²-4ac))/2*a
a=2,b=4,c=2
package main
import (
"fmt"
"math"
)
func main() {
//求ax2+bx+c=0方程的根。a,b,c分别为函数的参数,如果: b2-4ac>0,则有两个解;b2-4ac=0,则有一个解; b2-4ac<0, 则无解;
var a, b, c float64 = 2.0, 4.0, 2.0
// 定义 b²-4ac 的值
var i = b*b - 4*a*c
if i > 0 {
x1 := (-b + math.Sqrt(i)) / 2 * a
x2 := (-b - math.Sqrt(i)) / 2 * a
fmt.Printf("该方程的根为x1=%v, x2=%v", x1, x2)
} else if i == 0 {
x := (-b + math.Sqrt(i)) / 2 * a
fmt.Println("该方程的解为:", x)
} else {
fmt.Println("该方程无解!")
}
}
3.4 嵌套分支
在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支的结构称为内层分支外面的分支结构称为外层分支。
基本语法
if 条件表达式out{
if 条件表达式in{
....
}else{
}
}
{} 不能省略
建议嵌套控制在三层内(含三层)
3.4.1 案例一
参加百米运动会,如果用时8秒以内进入决赛,否则提示淘汰。并且根据性别提示进入男子组或女子组
package main
import (
"fmt"
)
func main() {
// 参加百米运动会,如果用时8秒以内进入决赛,否则提示淘汰。并且根据性别提示进入男子组或女子组
var time float32
var gender string
fmt.Printf("请输入您的百米用时(s): ")
fmt.Scanln(&time)
fmt.Printf("请输入您的性别(male/female): ")
fmt.Scanln(&gender)
if time < 8 {
if gender == "male" {
fmt.Printf("您的百秒用时为 %v s,进入 男子组\n", time)
} else if gender == "female" {
fmt.Printf("您的百秒用时为 %v s,进入 女子组", time)
}
} else {
fmt.Println("您已被淘汰")
}
}
3.4.2 案例2
根据淡旺季打印出购票票价
4(含)-10月(含)旺季
- 成人票 60
- 儿童票 半价
- 老年票 1/3
淡季
- 成人票 40
- 其他票 20
package main
import (
"fmt"
)
func main() {
// 淡旺季购票
var age byte
var price float32 = 60
var month byte
fmt.Printf("请输入您的年龄:")
fmt.Scanln(&age)
fmt.Printf("请输入您的购票月份:")
fmt.Scanln(&month)
if month >= 4 && month <= 10 {
if age < 18 {
price *= 0.5
fmt.Printf("%v 月, 年龄为: %v ,票价为: %v", month, age, price/2)
} else if age >= 60 {
fmt.Printf("%v 月, 年龄为: %v ,票价为: %v", month, age, price/3)
} else {
fmt.Printf("%v 月, 年龄为: %v ,票价为: %v", month, age, price)
}
} else if month == 0 {
fmt.Println("您的购票月份错误,请重新购买")
} else {
if age >= 18 && age < 60 {
fmt.Printf("%v 月, 年龄为: %v ,票价为: %v", month, age, 40)
} else {
fmt.Printf("%v 月, 年龄为: %v ,票价为: %v", month, age, 20)
}
}
}