本课目标:掌握 if、for、switch;理解 Go 循环只有 for;能用条件与循环完成猜数字小游戏。
一、知识点速览
- if 条件分支
ifscore>=90{fmt.Println("优秀")}elseifscore>=60{fmt.Println("及格")}else{fmt.Println("不及格")}带初始化语句:
ifx:=10;x>5{fmt.Println(x)}注意:条件不需要括号,但必须有大括号 {}。
- for 循环
Go 只有 for,没有 while、do-while。
// 标准fori:=0;i<5;i++{fmt.Println(i)}// 类似 whilei:=0fori<5{fmt.Println(i)i++}// 无限循环for{// ...}// range 遍历nums:=[]int{10,20,30}fori,v:=rangenums{fmt.Println(i,v)}- switch 分支
switchday{case1,2,3,4,5:fmt.Println("工作日")case6,7:fmt.Println("周末")default:fmt.Println("无效")}无表达式 switch:
switch{casescore>=90:fmt.Println("优秀")casescore>=60:fmt.Println("及格")default:fmt.Println("不及格")}fallthrough:强制执行下一个 case。
- 猜数字小游戏示例
packagemainimport("fmt""math/rand""time")funcmain(){rand.Seed(time.Now().UnixNano())// Go 1.20+ 可省略target:=rand.Intn(100)+1varguessintfor{fmt.Print("猜一个1-100的数字:")fmt.Scanln(&guess)ifguess>target{fmt.Println("大了")}elseifguess<target{fmt.Println("小了")}else{fmt.Println("猜对了!")break}}}二、多元化习题(每题后附答案与解读)
A. 选择题
- Go 中 if 条件是否需要括号?
A. 需要
B. 不需要
C. 可要可不要
D. 必须用括号
答案:B
解读: Go 的 if 条件不需要括号,但必须有大括号 {}。
- Go 中循环关键字有哪些?
A. for、while
B. for、do-while
C. 只有 for
D. loop
答案:C
解读: Go 只有 for 循环,没有 while 和 do-while。
- switch 中用于强制执行下一个 case 的关键字是?
A. break
B. continue
C. fallthrough
D. next
答案:C
解读: fallthrough 会无条件执行下一个 case。
- for range 遍历字符串时,返回什么?
A. 索引和字节
B. 索引和 rune
C. 只有值
D. 只有索引
答案:B
解读: for range 遍历字符串返回索引和 rune(Unicode 码点)。
- 无限循环写法是?
A. for(;😉
B. while(true)
C. for {}
D. loop {}
答案:C
解读: Go 中无限循环用 for {}。
B. 判断题
- if 语句的条件必须用括号括起来。
答案:错
解读: Go 不需要括号,直接写 if x > 0 { … }。
- for 循环可以替代 while 循环。
答案:对
解读: Go 没有 while,用 for 条件 {} 实现。
- switch 的 case 默认不会贯穿,除非使用 fallthrough。
答案:对
解读: Go 的 switch 每个 case 默认自带 break。
- break 可以跳出 switch 和 for。
答案:对
解读: break 用于跳出当前循环或 switch。
- continue 可以用于 switch。
答案:错
解读: continue 只能用于循环,不能用于 switch。
C. 填空题
- if 条件语句:if x > 0 ____ { … }
答案:{
解读: Go 的 if 条件后直接跟大括号。
- 标准 for 循环:for i := 0; i < 10; ____ { }
答案:i++
解读: 后置语句通常为 i++。
- 遍历切片:for ____, v := range nums { }
答案:i 或索引变量名
解读: range 返回索引和值。
- switch 中默认分支:____: fmt.Println(“默认”)
答案:default
解读: default 处理所有未匹配的情况。
- 跳出循环:____
答案:break
解读: break 跳出当前循环。
D. 代码阅读题
- 输出什么?
fori:=0;i<3;i++{fmt.Print(i," ")}答案:0 1 2
解读: i 从 0 到 2。
- 输出什么?
x:=5ifx>3{fmt.Println("A")}else{fmt.Println("B")}答案:A
解读: x > 3 为真。
- 输出什么?
fori:=0;i<5;i++{ifi==2{continue}fmt.Print(i," ")}答案:0 1 3 4
解读: i == 2 时跳过本次循环。
- 输出什么?
switch2{case1:fmt.Print("A")case2:fmt.Print("B")fallthroughcase3:fmt.Print("C")default:fmt.Print("D")}答案:BC
解读: 匹配 case 2 输出 B,fallthrough 继续执行 case 3 输出 C。
- 输出什么?
sum:=0fori:=1;i<=5;i++{sum+=i}fmt.Println(sum)答案:15
解读: 1+2+3+4+5=15。
E. 改错题
- 下面代码错在哪?
ifx>0fmt.Println("正数")答案:缺少大括号。
ifx>0{fmt.Println("正数")}解读: Go 的 if 必须有大括号。
- 下面代码错在哪?
fori:=0;i<5;i++fmt.Println(i)答案:缺少大括号。
fori:=0;i<5;i++{fmt.Println(i)}解读: for 循环体必须用大括号。
- 下面代码错在哪?
ifx=5{fmt.Println("等于5")}答案:应该用 == 比较。
ifx==5{fmt.Println("等于5")}解读: = 是赋值,== 是比较。
- 下面代码错在哪?
switchx{case1:continue}答案:continue 不能用于 switch。
switchx{case1:// 做其他事情}解读: continue 只能用于循环。
F. 编程题
- 判断一个数是正数、负数还是零。
packagemainimport"fmt"funcmain(){varnintfmt.Print("请输入一个整数:")fmt.Scanln(&n)ifn>0{fmt.Println("正数")}elseifn<0{fmt.Println("负数")}else{fmt.Println("零")}}解读: 使用 if-else if-else 完成多分支判断。
- 打印 1 到 100 之间所有偶数。
fori:=1;i<=100;i++{ifi%2==0{fmt.Print(i," ")}}解读: i%2 == 0 判断偶数。
- 使用 switch 判断成绩等级:90-100 优秀,80-89 良好,60-79 及格,0-59 不及格。
varscoreintfmt.Scanln(&score)switch{casescore>=90:fmt.Println("优秀")casescore>=80:fmt.Println("良好")casescore>=60:fmt.Println("及格")default:fmt.Println("不及格")}解读: 使用无表达式 switch,条件写在 case 中。
G. 挑战题
- 猜数字小游戏:随机生成 1-100,循环让用户猜,提示大了小了,猜对后输出次数。
packagemainimport("fmt""math/rand""time")funcmain(){rand.Seed(time.Now().UnixNano())// Go 1.20+ 可省略target:=rand.Intn(100)+1varguessintcount:=0for{fmt.Print("猜一个1-100的数字:")fmt.Scanln(&guess)count++ifguess>target{fmt.Println("大了")}elseifguess<target{fmt.Println("小了")}else{fmt.Printf("猜对了!你用了%d次\n",count)break}}}解读: 使用 for 无限循环,break 跳出。
- 打印九九乘法表。
fori:=1;i<=9;i++{forj:=1;j<=i;j++{fmt.Printf("%d*%d=%d\t",j,i,i*j)}fmt.Println()}解读: 嵌套循环,外层控制行,内层控制列。
H. 拓展思考题
- Go 为什么没有 while 循环?
答案: Go 设计者认为 for 足够灵活,可以用 for 条件 {} 替代 while,减少关键字。
解读: 简化语言,降低学习成本。
- switch 中的 fallthrough 有什么作用?
答案: 强制执行下一个 case,不考虑条件。
解读: 通常用于多个 case 共享逻辑。
下节预告:函数、数组、切片、map,做一个通讯录小练习。