Golang 学习之旅------第五章 程序流程控制

一、基本介绍

1.分类,三大流程控制语句
(1).顺序控制
(2).分支控制
(3).循环控制

2.顺序控制
(1).基本介绍:程序从上到下逐行的执行,中间没有任何判断和跳转
一个案例说明:下面的代码中,没有判断,也没有跳转,因此程序按照默认的流程执行,即顺序控制
在这里插入图片描述
(2).顺序控制的流程图
在这里插入图片描述
(3).顺序控制举例和注意事项
Golang中定义变量时采用合法的前向引用:
在这里插入图片描述
3.分支控制
3.1 分支控制的基本介绍
分支控制就算让程序有选择的执行,有下面的三种形式:
(1).单分支
(2).双分支
(3).多分支

3.2 单分支控制语句
(1).基本语法
在这里插入图片描述
(2).应用举例
在这里插入图片描述
(3).单分支的流程图
流程图可以用图形方式来更加清晰的描述程序的执行流程

在这里插入图片描述
(4).单分支的细节说明
在这里插入图片描述
3.3 双分支控制语句
(1).基本语法
在这里插入图片描述
(2).应用案例
在这里插入图片描述
(3).双分支的流程图
在这里插入图片描述
总结:
a.从上图看,条件表达式就是age > 18
b. 执行代码块 1 ===> fmt.Println(“你的年龄大于 18”) …
c. 执行代码块 2 ===> fmt.Println(“你的年龄不大…”) .
d. 强调一下 双分支只会执行其中的一个分支。

3.4 单分支与双分支的应用实例
(1).在这里插入图片描述
(2).在这里插入图片描述
(3).在这里插入图片描述
(4).
在这里插入图片描述
(5).编写程序,声明 2 个 int32 型变量并赋值。判断两数之和,如果大于等于 50,打印“hello world!“
在这里插入图片描述
(6).编写程序,声明 2 个 float64 型变量并赋值。判断第一个数大于 10.0,且第 2 个数小于 20.0,打印两数之和。
在这里插入图片描述
(7).定义两个变量 int32,判断二者的和,是否能被 3 又能被 5 整除,打印提示信息
在这里插入图片描述
(8).判断一个年份是否是闰年,闰年的条件是符合下面二者之一:

a.年份能被 4 整除,但不能被 100整除;
b.能被 400 整除
在这里插入图片描述
3.5 多分支控制
(1).基本语法
在这里插入图片描述
说明:
a.多分支的判断流程如下:

a1.先判断条件表达式1是否成立,如果为真,就执行代码块1
a2.如果条件表达式1为假,就去判断条件表达式2是否成立,如果条件表达式2为真,就执行代码块2
a3.依次类推
a4.如果所有的条件表达式不成立,则执行else的语句块

b.else不是必须的
c.多分支只能有一个执行入口

(2).多分支的流程图
在这里插入图片描述
(3).示例1
a.要求:
岳小鹏参加 Golang 考试,他和父亲岳不群达成承诺:
如果:
成绩为 100 分时,奖励一辆 BMW;
成绩为(80,99]时,奖励一台 iphone7plus;
当成绩为[60,80]时,奖励一个 iPad;
其它时,什么奖励也没有。
请从键盘输入岳小鹏的期末成绩,并加以判断

b.代码如下:
在这里插入图片描述
(4).示例2
对初学者而言,有一个使用陷阱
在这里插入图片描述
(5).练习题
a.案例1
在这里插入图片描述
b. 案例2
b1.要求
在这里插入图片描述
b2.代码示例
在这里插入图片描述
c.案例3
c1.要求
在这里插入图片描述
c2.代码示例
在这里插入图片描述

二、嵌套分支

1.基本介绍
在一个分支结构中又完整的嵌套了另外一个完整的分支结构,里面的分支结构称为内层分支,外面的分支结构称为外层分支

2.基本语法
在这里插入图片描述
3.应用案例1
3.1 要求
参加百米运动会,如果用时 8 秒以内进入决赛,否则提示淘汰。并且根据性别提示进入男子组或女子组
3.2 代码示例
在这里插入图片描述
4.应用案例2
4.1 要求
出票系统:根据淡旺季的月份和年龄,打印票价
在这里插入图片描述
4.2 代码示例
在这里插入图片描述

三、switch分支控制

1.基本介绍
(1).switch语句用于基于不同条件执行不同动作,每一个case分支都是唯一的,从上到下逐一测试,知道匹配为止
(2).匹配项后面也不需要加break

2.基本语法
在这里插入图片描述
3.switch的流程图
在这里插入图片描述
说明和总结:
a.switch的执行流程是,先执行表达式,得到值,然后再和case的表达式进行比较,如果相等,就匹配到,然后执行对应的case的语句块,然后就退出switch控制
b.如果switch的表达式的值没有合任何的case的表达式匹配成功,则执行default的语句块,执行后就退出switch的控制
c.golang的case后的表达式可以有多个,使用逗号隔开
d.golang中的case语句块不需要写break,因为默认就会有,即在默认情况下,当程序执行完case语句块后,就直接退出该switch控制结构

4.switch案例
4.1 要求
请编写一个程序,该程序可以接收一个字符,比如: a,b,c,d,e,f,g a表示星期一,b表示星期二 … 根据用户的输入显示相依的信息.要求使用switch 语句完成

4.2代码示例如下:
在这里插入图片描述
5.switch的使用的注意事项
5.1 switch/case后是一个表达式(即:常量值、变量、一个有返回值的函数等都可以)
5.2 case后的各个表达式的值的数据类型,必须和switch的表达式数据类型一致
在这里插入图片描述
5.3 case后面可以带多个表达式,使用逗号间隔。比如case 表达式1,表达式2…
在这里插入图片描述
5.4 case后面的表达式如果是常量值(字面量),则要求不能重复
在这里插入图片描述
5.5 case后面不需要带break,程序匹配到一个case后就会执行对应的代码块,然后退出switch,如果一个都匹配不到,则执行default
5.6 default语句不是必须的
5.7 switch后也可以不带表达式,类似if–else分支来使用
在这里插入图片描述
5.8 switch 后也可以直接声明/定义一个变量,分号结束,,这种方式不推荐
在这里插入图片描述

5.9 switch 穿透-fallthrough ,如果在case语句块后增加fallthrough,则会继续执行下一个case,也叫switch穿透
在这里插入图片描述

5.10 Type Switch:switch语句还可以被用于type-switch来判断某个interface变量中实际指向的变量类型
在这里插入图片描述

6.switch的练习题
6.1 练习题1
(1).要求
使用 switch 把小写类型的 char 型转为大写(键盘输入)。只转换 a, b, c, d, e. 其它的输出“other”
(2).代码示例
在这里插入图片描述
6.2 练习题2
(1).要求:对学生成绩大于 60 分的,输出“合格”。低于 60 分的,输出“不合格”。(注:输入的成绩不能大于 100)
(2).代码示例
在这里插入图片描述
6.3 练习题3
(1).要求
根据用户指定月份,打印该月份所属的季节。3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12, 1, 2 冬季
(2).代码示例:
在这里插入图片描述
7. switch 和 if的比较
总结了什么情况下使用switch,什么情况下使用if
7.1
如果判断的具体数值不多,而且符合整数、浮点数、字符、字符串这几种类型的,建议使用switch语句,简洁高效
7.2
其它情况:对区间判断和结果为bool类型的判断,使用if,if的使用范围更广

四、for循环控制

1.基本介绍
听其名而知其意。就是让我们的一段代码循环的执行。

2.示例
(1).要求
编写一个程序,可以打印10句“hello,world!”
(2).代码
在这里插入图片描述
3.for循环的基本语法
3.1 语法格式
for循环变量初始话;循环条件;循环变量迭代{
循环操作语句
}

3.2对上面的语法格式说明
(1).对for循环来说,有四个重要的要素
(2).循环变量初始化
(3).循环条件
(4).循环操作语句,有人也叫循环体
(5).循环变量迭代

3.3 for循环执行的顺序说明
(1).执行循环变量初始化,比如i := 1
(2).执行循环条件,比如i <= 10
(3).如果循环条件为真,就执行循环操作:比如fmt.Println(“…”)
(4).执行循环变量迭代,比如i++
(5).反复执行(2)、(3)、(4)步骤,直到循环条件为False,就退出for循环

4.for循环执行流程分析
4.1 for循环的流程图
在这里插入图片描述
5.for循环的使用注意事项和细节讨论
5.1 循环条件是返回一个布尔值的表达式

5.2 for循环的第二种使用方式
(1).基本语法
在这里插入图片描述

(2).案例演示
在这里插入图片描述
5.3 for循环的第三种使用方式
(1).基本语法
在这里插入图片描述

(2).案例演示
在这里插入图片描述
5.4 Golang中提供for-range的方式,可以方便遍历符串串和数组
(注意:数组的遍历,我们放到讲数组的时候再讲解),案例说明如何遍历字符串
(1).字符串遍历方式1----传统方式
(2).字符串遍历方式2----for-range
(3).示例代码
在这里插入图片描述
(4).上面的细节讨论:
a.如果我们的字符串有中文,那么传统的遍历字符串方式就是错误,会出现乱码,原因是传统的对字符串的遍历时按照字节来遍历的,而一个汉字在utf-8编码中对应的是3个字节

b.如何解决需要将str转成[]rune切片
代码示例如图:
在这里插入图片描述
c.对应for-range遍历方式而言,是按照字符方式遍历。因此就算是有中文,也是可以顺利遍历出来
在这里插入图片描述
6.练习题
6.1 案例1
(1).要求:打印 1~100 之间所有是 9 的倍数的整数的个数及总和
(2).代码示例:

6.2 案例2
(1).要求:完成下面的表达式输出 ,6 是可变的
(2).代码示例:
在这里插入图片描述

7.while和do…while的实现
7.1 基本介绍
Go语言没有while和do…while的语法,这一点需要特别注意,如果我们需要使用类似其它语言(比如java/c的while和do…while),可以通过for循环来实现其效果

7.2 while循环的实现
(1).基本语法
在这里插入图片描述
(2).说明
a.for循环是一个无限循环
b.break语句就是逃出for循环

(3).案例
在这里插入图片描述
7.3 do…while循环的实现
(1).基本语法
在这里插入图片描述
(2).说明
a.上面的循环是先执行,在判断,因此至少执行一次
b.当循环条件成立后,就会执行break

(3).案例
在这里插入图片描述

8.多重循环控制
8.1 基本介绍
(1).将一个循环放在另一个循环体内,就形成了嵌套循环。在外边的for循环称为外层循环,在里面的for循环称为内层循环

(2).实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为false时,才会完全跳出内层循环,才可结束外层的当次循环,开始下一次的循环

(3).外层循环次数为m次,内层为n次,则内层循环体实际上需要执行m * n次

8.2 应用案例
(1).案例1
a.要求:
统计 3 个班成绩情况,每个班有 5 名同学,求出各个班的平均分和
所有班级的平均分
[学生的成绩从键盘输入]

b.代码示例
第1步:统计一个班的情况
在这里插入图片描述
第2步:统计三个班的情况
在这里插入图片描述
第3步:统计所有班级的平均分
在这里插入图片描述
第4步:做活程序
在这里插入图片描述

第5步:加个需求,统计合格的人数
在这里插入图片描述
(2).案例2
a.要求
打印金字塔经典案例
b.代码示例
在这里插入图片描述
第1步:如图

在这里插入图片描述
第2步:如图
在这里插入图片描述
第3步:如图
在这里插入图片描述
第4步:如图
在这里插入图片描述
第5步:如图
在这里插入图片描述
(3).案例3
a.要求 打印九九乘法表
在这里插入图片描述

b.代码示例
在这里插入图片描述

五、跳转控制语句

1.跳转控制语句----break语句
1.1 具体要求
(1).要求
随机生成 1-100 的一个数,直到生成了 99 这个数,看看你一共用了几次?
分析:编写一个无限循环的控制,然后不停的随机生成数,当生成了99时,就退出整个无限循环----->break
如何随机生成1-100整数:
在这里插入图片描述

(2).示例代码:
在这里插入图片描述
1.2 基本介绍
break 语句用于终止某个语句块的执行,用于中断当前 for 循环或跳出 switch 语句

1.3 基本语法
在这里插入图片描述

1.4 以 for 循环使用 break 为例,画出示意图
在这里插入图片描述
1.5 break的注意事项和使用细节
(1).break语句出现在多层嵌套的语句块中时,可以通过标签指明要终止的时哪一层的语句块,看如下案例:
在这里插入图片描述
(2).上面的案例说明:
a.break默认会跳出最近的for循环
b.break后面可以指定标签,跳出标签对应的for循环

1.6 练习题
(1).案例1
a.要求:100 以内的数求和,求出 当和第一次大于 20 的当前数
b.代码示例
在这里插入图片描述

(2).案例2

a.要求:实现登录验证,有三次机会,如果用户名为”张无忌” ,密码”888”提示登录成功,否则提示还有几次机会.
b.代码示例
在这里插入图片描述

2.跳转控制语句—continue语句
2.1 基本介绍
(1).continue语句用于结束本次循环,继续执行下一次循环

(2).continue语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环,这个和前面的break标签的使用规则一样

2.2 基本语法
在这里插入图片描述
2.3 continue流程图
在这里插入图片描述

2.4 案例分析continue的使用
在这里插入图片描述
2.5 练习
(1).案例1
在这里插入图片描述
(2).案例2
a.要求:continue 实现 打印 1——100 之内的奇数[要求使用 for 循环+continue]
b.代码示例:
在这里插入图片描述
(3).案例3
a.要求:
从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入为 0 时结束程序

b.代码示例:
在这里插入图片描述
(4).案例4
a.要求:
某人有 100,000 元,每经过一次路口,需要交费,规则如下:
当现金>50000 时,每次交 5%
当现金<=50000 时,每次交 1000
编程计算该人可以经过多少次路口,使用 for break 方式完成
b.代码示例:
在这里插入图片描述

3.跳转控制语句—goto语句
3.1 基本介绍
(1).GO语言的goto语句可以无条件地转移到程序中指定的行

(2).goto语句通常与条件语句配合使用。可用来实现条件转移,跳出循环体等功能

(3).在GO程序设计中一般不主张使用goto语句,以免造成程序流程的混乱,使理解和调试程序都产生困难

3.2 goto的基本语法
在这里插入图片描述
3.3 goto的流程图
在这里插入图片描述
3.4 快速入门案例
在这里插入图片描述

4.跳转控制语句—return语句
4.1 基本介绍
return使用在方法或者函数中,表示跳出所在的方法或函数,在讲解函数的时候,会详细的介绍
在这里插入图片描述

4.2 说明:

(1).如果return是在普通的函数,则表示跳出该函数,即不再执行函数中return后面代码,也可以理解成终止函数

(2).如果return是在main函数中,表示终止main函数,也就是说终止程序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值