开发者学堂课程【Go语言核心编程 - 基础语法、数组、切片、Map:多分支应用案例】学习笔记,与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/625/detail/9567
多分支应用案例
内容介绍:
一、多分支案例演示2
二、多分支案例演示3
三、多分支案例演示4
一、多分支案例演示2
func main() {
var b bool = true
if b == false {
fmt.Println("a")
} else if b {
fmt.Println("b")
} else if !b {
fmt.Println("c")
} else
{
fmt.Println("d")
}
}
//输出结果是b。
Q:如果写成 b = false,能编译通过吗?如果能,结果是?
(1)代码分析:
func main() {
var b bool = true
一段bool类型的代码b = true
if b == false {
fmt.Println("a")
若b==false,执行a语句,而 false≠true,故不执行a语句
} else if b {
fmt.Println("b") b==true
,
故执行b语句
} else if !b {
fmt.Println("c")!
b表示对b代码取反,则不执行
} else {
fmt.Println("d")
不执行
}
}
(2)运行结果分析
A:编译无法通过。
按照 Java 语言、PSP语言、C 语言或 C++语言等编程语言逻辑,代码的含义可看作将 false 赋值给b,则仍旧可以编译,最终输出结果为c;
而在Golang语言中,为了避免由于代码的多种写法产生歧义,if后的内容必须是条件表达格式,不能是赋值语句,编译无法通过。
(3)学习目标
强化关于 Go 语言中,分支控制中,if 后必须是条件表达格式,不能是赋值语句。
二、分支控制if-else案例演示3
求 ax2+bx+c=0方程的根。a、b、c分别为函数的参数,如果:b2-4ac>0,则有两个解;b2-4ac=0,则有一个解;b2-4ac<0,则无解;
提示1:x1=(-b+sqrt(b2-4ac))/2a
x2=(-b-sqrt(b2-4ac))/2a
提示2:math.Sqrt(num);需要引入math包
测试数据:3,100,6
(1)分析思路:
①abc是3个 float64
②使用到给出的数学公式
③题目中有多种条件可能,应使用到多分支
④使用 math.Squr 方法
查询使用手册的方法:
百度中输入 Go 官方文档搜索,点击打开“Go语言标准库文档中文版|Go语言中文网| Golang 中文社区|Go...”,选择 math 包,选择其中的 func Sqrt(x float64)float64函数,查询其应用场景,即“返回x的二次方根”
(2)对应代码
package main
import {
"fmt"
"math"
)
func main() {
var a float64 = 3.0
var b float64 = 100.0
var c float64 = 6.0
var a float64 = 3.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 {
f
mt.Println("无解...")//c
}
}
(3)代码运行输出结果:
x1 =-0.5409755150261972 x2 =-299.4590244849738
说明该赋值条件下,m>0。
改变赋值,输出结果会发生变化,如其他条件不变,对b赋值为1.0,对c赋值为10.0,则输出结果为“无解”;对a赋值为2.0,对b赋值为4.0,对c赋值为2.0,输出结果为 x1 =-4。
学习目标
将代码与数学公式整合,并学会利用 math 包中的相关函数编写多分支控制代码。
三、分支控制 if-else 案例演示4
大家都知道,男大当婚,女大当嫁。那么女方家长要嫁女儿,一定会提出一定的条件:高:180cm以上;富:财富1千万以上;帅:是。条件从控制台输入。
1.如果这三个条件同时满足,则:“我一定要嫁给他!!!”
2.如果这三个条件有为真的情况,则:“嫁吧,比上不足比下有余。”
3.如果三个条件都不满足,则:“不嫁....”
var height int32 | var money float32 | var handsome bool
1.思路分析
①应该设计3个变量 var height int32 | var money float32 | var handsome bool
②需要从中断输入 fmt.Scanln
③使用多分支控制 if--else if--else
2.对应代码
package main
import (
"fmt"
_"math"
)
func main() {
var height int32
var money float32
var handsome bool
fmt.Println("请输入身高(厘米)")
fmt.Scanln(&height)
fmt.Println("请输入财富(千万)")
fmt.Scanln(&money)
fmt.Println("请输入是否帅(true/false)")
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("不嫁....")
}
}
注:
①_"math"表示忽略 math 包;
②height 本身即为 bool,故该处条件格式无需写成“height == bool”
3.代码运行输出结果
依照提示分别输入相应的身高值、财富值、是否帅(true/false),输出最终结果。
①“身高(厘米)”为190,“财富(千万)”为2,“是否帅(true/false)”为true,则最终输出结果为“我一定要嫁给他!!!”
②“身高(厘米)”为190,“财富(千万)”为0.2,“是否帅(true/false)”为false,则最终输出结果为“嫁吧,比上不足比下有余。”
②“身高(厘米)”为140,“财富(千万)”为0.1,“是否帅(true/false)”为false,则最终输出结果为“不嫁....”