1.顺序控制
package main
import "fmt"
func main() {
var days int = 97
var week int = days / 7
var day int = days % 7
fmt.Printf("%d个星期零%d天\n", week, day)
}
2.分支控制
1.单分支控制
package main
import "fmt"
//单分支控制
func main() {
var age int
fmt.Println("请输入年龄:")
fmt.Scanln(&age)
if age > 18 {
fmt.Println("你已经成年")
}
}
2.双分支控制
package main
import "fmt"
func main() {
var year int = 2020
if (year%4 == 0 && year%100 != 0) || year%400 == 0 {
fmt.Println(year, "是闰年")
}
}
3.多分支控制
package main
import "fmt"
/* 多分支控制
多分支只能有一个执行入口
案例:
小明参加考试 得100分获得BMW (80,99)获得iPhone11 (60,80]得iPad 其他什么也没有
*/
func main() {
var score int
fmt.Println("请输入考试成绩:")
fmt.Scanln(&score)
//多分支判断
if score == 100 {
fmt.Println("奖励BMW")
} else if score > 80 && score <= 99 {
fmt.Println("奖励iPhone11")
} else if score >= 60 && score <= 80 {
fmt.Println("奖励ipad")
} else {
fmt.Println("没有奖励")
}
}
4.嵌套分支
package main
import "fmt"
/*
//案例一:参加运动会,如果8秒以内进决赛,否则淘汰。并根据性别进入男子组或女子组。
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("out...")
}
}
*/
//案例二:四到十月份 成人(18,60)票价60元 儿童半价 老人三分之一 其他月份 成人40 其他20
func main() {
var mouth byte
var age byte
var price float64 = 60
fmt.Println("输入月份:")
fmt.Scanln(&mouth)
fmt.Println("输入年龄:")
fmt.Scanln(&age)
if mouth >= 4 && mouth <= 10 {
if age > 60 {
fmt.Println("%v月 票价 %v 年龄 %v ", mouth, price/3, age)
} else if age >= 18 {
fmt.Println("%v月 票价 %v 年龄 %v ", mouth, price, age)
} else {
fmt.Println("%v月 票价 %v 年龄 %v ", mouth, price/2, age)
}
} else {
if age >= 18 && age < 60 {
fmt.Println("淡季成人票价40")
} else {
fmt.Println("淡季折扣票价20")
}
}
}
3.switch分支控制
package main
import "fmt"
func main() {
//接收一个字符,比如a,b,c,d,e,f,g a表示星期一,b表示星期二。。。
var key byte
fmt.Println("输入一个字母,a,b,c,d,e,f,g")
fmt.Scanf("%c", &key)
switch key {
case 'a':
fmt.Println("周一")
case 'b':
fmt.Println("周二")
case 'c':
fmt.Println("周三")
case 'd':
fmt.Println("周四")
default:
fmt.Println("输入有错")
}
}
注意事项:
1.case/switch后面是一个表达式(常量值,变量,一个有返回值的函数等)
2.case后的表达式的值的数据类型,必须和switch的表达式数据类型一致
3.case后面可以带多个表达式,使用逗号间隔。
4.case后面的表达式如果是常量值,要求不可以重复
5.case后面不需要带break,default不是必须的
6.switch后面可以不带表达式,类似if else分支
案例:
var age int =10
switch{
case age== 10:
fmt.Println("age==10")
case age== 20:
fmt.Println("age==20")
default:
fmt.Println("输入有错")
}
// 7.switch后面可以直接声明一个变量,以分号结束,但是不推荐使用。
// 8.switch穿透-fallthrough,如果在case语句块后面增加一个fallthrough,则会继续执行下一个case,也叫switch穿透。
// 9.Type Switch:switch语句还用于type-switch来判断interface变量中实际指向的变量类型。
4.for循环控制
基础用法
package main
import "fmt"
func main() {
for i := 0; i < 10; i++ {
fmt.Println("你好")
}
}
/*
语法格式
for 循环变量初始化; 循环条件; 循环变量迭代 {
循环操作语句
}
*/
用法二
package main
import "fmt"
func main() {
j := 1
for j <= 10 {
fmt.Println("你好")
j++
}
}
用法三
package main
import "fmt"
func main() {
j := 1
for {
if j <= 10 {
fmt.Println("你好")
} else {
break
}
j++
}
}
用法四-字符串遍历
package main
import "fmt"
func main() {
/*
//字符串遍历方式一:传统方式
var str string = "hello"
for i := 0; i < len(str); i++ {
fmt.Printf("%c \n", str[i])
}
*/
//字符串遍历方式二:for-range
fmt.Println()
var str string
str = "hello,孙"//传统方式字符串不可以含有中文
for index, val := range str {
fmt.Printf("index=%d,val=%c \n", index, val)
}
}
5.while和do while的实现
package main
import "fmt"
func main() {
//GO语言没有while 和 do while 语句 可以用for实现
var i = 1
for {
if i > 10 { //循环条件
break
}
fmt.Println("hello yang", i)
i++
}
fmt.Println("i=", i)
}
6.多重循环控制(重点)
示例代码:
package main
import "fmt"
func main() {
//案例:统计三个班的成绩,每个班级有五人,求出各个班平均分和所有人平均分(学生成绩由键盘输入)
var classnum int = 3
var studentnum int = 5
var totalsum float64 = 0.0
for j := 1; j <= classnum; j++ {
sum := 0.0
for i := 1; i <= studentnum; i++ {
var score float64
fmt.Printf("请输入第%d班 第%d位学生成绩 \n", j, i)
fmt.Scanln(&score)
//总分
sum = sum + score
}
fmt.Printf("第%d班的平均成绩为%v \n", j, sum/float64(studentnum))
totalsum = sum + totalsum
}
fmt.Printf("各个班总成绩为%v 所有班的平均分为%v \n", totalsum, totalsum/float64(studentnum*classnum))
}
7.跳转控制语句-break
1.break用于终止某个语句块的执行,用于中断for循环或者跳出switch语句
2.break出现在多层嵌套的语句块时,可以通过标签指明要终止哪一层语句
3.break默认会跳出最近的for循环,后面指定标签则跳出标签对应的for循环
示例代码:
package main
import "fmt"
func main() {
lable2:
for i := 0; i < 4; i++ {
//lable1: //设置一个标签
for j := 0; j < 10; j++ {
if j == 2 {
break lable2
}
fmt.Println("j=", j)
}
}
}
8.跳转控制语句-continue
continue用于结束本次循环,继续执行下一次循环,也可以像break使用标签
示例代码:
package main
import "fmt"
func main() {
//lable2:
for i := 1; i < 4; i++ {
//lable1:
for j := 0; j < 10; j++ {
if j == 2 {
continue
}
fmt.Println("j=", j)
}
}
}
9.跳转控制语句-goto
goto可以无条件地转移到程序中指定的行。
goto通常和条件语句配合使用,用来实现条件转移,跳出循环体等功能。程序设计中一般不提倡使用,会造成流程混乱。
示例代码:
package main
import "fmt"
func main() {
var n int
n = 30
fmt.Println("ok1")
if n > 20 {
goto label1
}
fmt.Println("ok2")
fmt.Println("ok3")
fmt.Println("ok4")
label1:
fmt.Println("ok5")
}
10.跳转控制语句-return
return使用在方法或者函数中,表示跳出所在的方法或者函数。
示例代码:
package main
import "fmt"
func main() {
//return使用在方法或者函数中,表示跳出所在的方法或者函数
for i := 0; i <= 10; i++ {
if i == 3 {
return
}
fmt.Println("nihao", i)
}
fmt.Println("hello")
}
如果return是在普通函数中,则跳出该函数,即不再执行函数return后的代码。
如果return是在main函数中,表示终止main函数,即终止程序。