【GO语言卵细胞级别教程】03.条件与循环语句

注意:以下演示所用的项目,在第一章节已经介绍了,这里不做赘述

目录:

  • 【GO语言卵细胞级别教程】03.条件与循环语句
  • 1.条件语句
    • 1.1 if语句
      • 1.1.1 单层if语句
      • 1.1.2 if-else语句
      • 1.1.3 if-else-if 语句
      • 1.1.4 if 嵌套
    • 1.2 switch 语句
      • 1.1.1 switch-case
      • 1.1.2 总结
    • 1.3 常见错误
  • 2.循环语句
    • 2.1 循环语句for
    • 2.2 For循环功能
    • 2.3 for range遍历函数
  • 3.关键词
    • 3.1 关键词break
    • 3.2 continue关键字
    • 3.3 goto关键字
    • 3.4 return关键词
  • 4.题目
    • 4.1 99乘法表

【GO语言卵细胞级别教程】03.条件与循环语句

1.条件语句

1.1 if语句

1.1.1 单层if语句

  1. 语法
if 布尔表达式 {/* 在布尔表达式为 true 时执行 */
}
  1. 案例
package tiaojian// if单层
import "fmt"func OneIf(){var num intfmt.Print("请输入一个数字:")fmt.Scan(&num)if num == 100{fmt.Println("满分100!")}fmt.Println("程序执行完!")}
// 输出结果
开始运行:
当前机器状态: 正常
请输入一个数字:100
满分100!
程序执行完!

1.1.2 if-else语句

  1. 语法
if 布尔表达式 {/* 在布尔表达式为 true 时执行 */
} else {/* 在布尔表达式为 false 时执行 */
}
  1. 案例
package tiaojian
// if-else 语句
import "fmt"func IfElse(){var num intfmt.Println("请输入一个数字:")fmt.Scan(&num)if num > 2023 {fmt.Println("恭喜您!2024新年好")}else{fmt.Println("2023辞旧迎新!")}
}

1.1.3 if-else-if 语句

  1. 语法
if 布尔表达式1 {}else if 布尔表达式{}
  1. 实战
package tiaojian
// if-else 语句
import "fmt"func IfElse(){var num intfmt.Println("请输入一个数字:")fmt.Scan(&num)if num > 2023 {fmt.Println("恭喜您!2024新年好")}else if num == 2024{fmt.Println("2023辞旧迎新!")}else {fmt.Println("读懂《遥远的救世主》:不去讨好生活,生活有时候会反")}
}

1.1.4 if 嵌套

  1. 语法: 用户输入值有两个方法
    (1)使用fmt.Scanf(“%d”, &age)
    (2)使用fmt.Scan(&age)
if 布尔表达式1 {/* 在布尔表达式 1 为 true 时执行 */if 布尔表达式2 {/* 在布尔表达式 2 为 true 时执行 */}
}
  1. 实战
package tiaojian
// if-else 语句
import "fmt"func IfElse(){var num intfmt.Println("请输入一个数字:")fmt.Scan(&num)if num > 2023 {fmt.Println("恭喜您!2024新年好")}else if num == 2024{fmt.Println("2023辞旧迎新!")}else {if num == 1{fmt.Println("袈裟本无清静,红尘不染性空,幽幽古刹千年钟,都是痴人说梦")}fmt.Println("读懂《遥远的救世主》:不去讨好生活,生活有时候会反")}
}
// 运行结果
开始运行:
当前机器状态: 正常
请输入一个数字:1
程序执行完!
请输入一个数字:
1
袈裟本无清静,红尘不染性空,幽幽古刹千年钟,都是痴人说梦
读懂《遥远的救世主》:不去讨好生活,生活有时候会反
  1. 实战
package tiaojian// 条件语句import "fmt"func Tiaojian(){var a1 int = 1var a2 int = 2fmt.Printf("a1=%v, a2=%v\n", a1, a2)if a1 < a2 {fmt.Println("a1 < a2")}else{fmt.Println("a1 > a2")	}// 使用scanf 输入一个值var pwd string = ""fmt.Print("请输入密码:")fmt.Scanf("%v", &pwd)fmt.Println(a1)if pwd == "001"{fmt.Println("密码输入正确!!")fmt.Println("获取新的技能:重锤火花")fmt.Println("经验提升:88")fmt.Println("获取金钱:88888888")}else{fmt.Println("密码输入错误!!")fmt.Println("金钱扣除:80")}// 使用fmt.Print("请再输入一个:")fmt.Scan(&a1)fmt.Println(a1)
}
// 执行结果
运行结果:
当前状态: 19
a1=1, a2=2
a1 < a2
请输入密码:001
1
密码输入正确!!
获取新的技能:重锤火花
经验提升:88
获取金钱:88888888
请再输入一个:20
20

1.2 switch 语句

  1. switch 后是一个表达式(变量、常量、一个有返回值的函数等都可以)
  2. case后面的表达式如果是常量值(字面量)则要求不能重复
  3. case后面的各个值得数据类型必须和switch一致
  4. case后面可以多个值使用逗号分割,比如case 值1,值2……
  5. case后面不需要带break go语言不需要,想要无条件执行下一句需要使用fallthrough
  6. default 语句不是必须的,位置也是可以在任何地方
  7. switch后也可以不带表达式,当作if分支来使用
  8. switch后也可以直接声明/定义一个变量,分号结束,需要使用num:=xxx得方式声明;
  9. switch 穿透利用fallthrough 关键字,如果在case 语句块后增加fallthrough,则会继续执行下一个case

1.1.1 switch-case

  1. 语法
    其中表达式可以是:一个常量值、变量或者有返回值的函数都可以
switch 表达式 {case1,2:语句1case1,2:语句2case1,2:语句3default:语句4
}
  1. 实战:switch后面直接大括号
package tiaojian
// switch 语句
import "fmt"func DemoSwitch(){var num intfmt.Print("请输入一个num:")fmt.Scan(&num)switch {case num >= 0 && num < 60:fmt.Println("还得继续加油!:", num)fallthroughcase num >= 60 && num < 70:fmt.Println("恭喜您,及格了!:", num)case num >= 70 && num < 80:fmt.Println("恭喜您,良好了!:", num)case num >= 80 && num < 90:fmt.Println("恭喜您,优秀了!:", num)default:fmt.Println("满分?", num)}
}
// 输出结果
开始运行:
当前机器状态: 正常
请输入一个num:12
还得继续加油!: 12
恭喜您,及格了!: 12

注意,其中fallthrough 表示无条件执行下一个case,也就是无论下一条语句执行的是true还是false都会执行。
2. 实战:switch 后面跟变量

package tiaiojian
import "fmt"
func SwitchVar{var num int fmt.Scan(&num)switch num{case 60:fmt.Println("及格了", num)case 80:fmt.Println("良好了", num)default:fmt.Println("还能满分么!", num)}
}// 直接固定一个值也是也可以,直接固定60比如
package tiaojianimport "fmt"func SwitchVar(){var num intfmt.Scan(&num)switch 60{case 60:fmt.Println("恭喜您,及格了!")case 80:fmt.Println("恭喜您,良好了!")default:fmt.Println("恭喜您,满分了?")}
}
  1. 实战:switch 后是一个表达式(变量、常量、一个有返回值的函数等都可以)
package tiaojianimport "fmt"func SwitchVar(){var num intfmt.Scan(&num)fmt.Println("测试固定得值")switch 60{case 60:fmt.Println("固定的值60")default:fmt.Println("没有值")}const STATUS int = 100switch STATUS{case 100:fmt.Println("满分100!")default:fmt.Println("没有值")}
}
// 结果
测试固定得值
固定的值60// 定义一个带有返回值的函数
package tiaojianimport "fmt"func returnInt() int {return 70
}func SwitchVar(){var num intfmt.Scan(&num)switch returnInt(){case 70:fmt.Println("函数返回值70")default:fmt.Println("没有值")}
}
  1. 实战: case后面的表达式如果是常量值(字面量)则要求不能重复
    在这里插入图片描述

  2. 实战: case后面的表达式如果是常量值(字面量)则要求不能重复
    在这里插入图片描述

  3. 实战:case后面可以多个值使用逗号分割,比如case 值1,值2……

switch 70 {case 60, 70, 8:fmt.Println("固定的值60")default:fmt.Println("没有值")}
  1. 实战:switch后也可以不带表达式,当作if分支来使用
switch {case num ==1:fmt.Println("这是可以当作if语句使用")
}
  1. 实战:switch后也可以直接声明/定义一个变量,分号结束,需要使用num:=xxx得方式声明;
switch test :=12; {case test == 12:fmt.Println("这是一个变量值等于12")case test > 12:fmt.Println("这个变量大于12")
}

1.1.2 总结

  1. switch {} 括号里需要是布尔类型
  2. switch test {}case后面需要是常量
  3. 无条件执行下一步使用fallthrough即可
package tiaojianimport "fmt"func SwitchVar(){fmt.Println("------总结------")var num1 int =12// switch后面不跟值switch {case num1 == 12:fmt.Println("这是12")case num1 == 13:fmt.Println("这是13")default:fmt.Println("这是default")}// switch后面跟变量switch num1{case 12:fmt.Println("这是12")case 13:fmt.Println("这是13")default:fmt.Println("这是default")}// switch后面跟声明变量 相当于 var num2 int 13; switch {}switch num2:=13; {case num1 == 12:fmt.Println("这是12")case num2 == 12:fmt.Println("这是13")default:fmt.Println("这是default")}
}

1.3 常见错误

  1. else必须要和中括号的反括号在一行
    在这里插入图片描述

2.循环语句

2.1 循环语句for

  1. 解决的问题
    如果有重复的值不断累加计算的话,比如 从1+100 那么我要么写100个变量,相加。所以对这种循环可以使用for解决
var a1 int 1
var a2 int 2 
……
var a100 int 100
var sum int = a1+a2+……+a100
  1. for语法
    for 循环是一个循环控制结构,可以执行指定次数的循环。
// Like a C for
for init; condition; post { }// Like a C while
for condition { }// Like a C for(;;)
for { }
---------
翻译成中文就是
for 初始化语句;循环条件;后置语句{}
  1. 实战测试
package tiaojian
// for循环语句
import "fmt"func DemoFor(){for i:=0; i < 10 ;i++{fmt.Println(i)}
}
输出结果:0 1 2 3 4 5 6 7 8 9
或者package tiaojian
// for循环语句
import "fmt"func DemoFor(){for i:=0; i < 10 ;i+=2{fmt.Println(i)}}
输出结果:0 2 4 6 8

2.2 For循环功能

  1. for 在Go语言中可以当作while使用,因为Go语言中没有while关键词
for {fmt.Println("无限循环")
}
或者
for ;;{xxx
}
  1. 实战测试
package tiaojian
// for循环语句
import ("fmt""time"
)func DemoFor(){var count int = 0for i:=0; i < 10 ;i+=2{fmt.Println(i)}// 无限循环方法1fmt.Println("无限循环方法!")for {time.Sleep(1 * time.Second)fmt.Println("无限循环!1")count ++if count >=3 {break}}// 无限循环方法2for ;; {time.Sleep(1 * time.Second)fmt.Println("无限循环!2")}
}

2.3 for range遍历函数

  1. 简介
    range关键字用于迭代数组(Array)、切片(Slice)、字符串(String)、映射(Map)、通道(Channel)等数据结构。它提供了一种简洁的方式来遍历这些数据结构的元素。如果不使用range for就是按照那个字节输出,如果遇到中文就会有问题,因为中英文字节不一样。所以会乱码,使用range就是可以遍历完成的。
    可以直接理解为
    range xxx 返回值是一个下标和值
    index,value = range xxx
  2. 实战
package tiaojianimport "fmt"func DemoForRange(){var str string = "hello golang 你好"// 这里是按照字节遍历输出的for i :=0; i < len(str) ; i++{fmt.Printf("%c\n", str[i])}// 使用range函数for index, value := range str{fmt.Printf("index:%v, value=%c\n ", index, value)}
}
//输出结果
h
e
l
l
og
o
l
a
n
gä
½å
¥
½
index:0, value=hindex:1, value=eindex:2, value=lindex:3, value=lindex:4, value=oindex:5, value=index:6, value=gindex:7, value=oindex:8, value=lindex:9, value=aindex:10, value=nindex:11, value=gindex:12, value=index:13, value=你index:16, value=

3.关键词

3.1 关键词break

  1. 简介
    break的作用就是跳过循环
  2. 实战:实现一个累加,大于等于100就跳出循环
package tiaojianimport "fmt"func DemoBreak(){sum := 0for i :=0; i < 100; i++{sum += i if sum >= 100{fmt.Println("i=", i, "sum=", sum)break}else{fmt.Println("sum=", sum)}}
}

3.2 continue关键字

  1. 简介跳出本次循环,不影响下一次循环
  2. 实战
package tiaojian
// continue作用
import "fmt"func DemoContinue(){for i:=0; i < 5; i ++{if i == 3 {fmt.Println("跳出本次循环:", i)continue}fmt.Println("i=",i)}
}
// 输出结果
开始运行:
当前机器状态: 正常
i= 0
i= 1
i= 2
跳出本次循环: 3
i= 4

3.3 goto关键字

  1. 可以转到程序中的指定的行
  2. 通常与条件语句搭配使用,可以来实现条件转移
  3. 在Go或者c语言程序设计中一般其实是不建议使用goto语句,以免造成程序流程的混乱,曾经在C中出现过goto危机
package tiaojian// goto语句import "fmt"func DemoGoto(){fmt.Println("goto01")goto title1fmt.Println("goto02")fmt.Println("goto03")title1:fmt.Println("goto04")fmt.Println("goto05")fmt.Println("goto06")
}

3.4 return关键词

  1. 用于提前结束函数
func divide(a, b float64) (float64, error) {if b == 0 {return 0, fmt.Errorf("division by zero")}return a / b, nil
}
  1. 返回结果,可以将函数的返回值给调用者
func add(a, b int) int {return a + b
}

4.题目

4.1 99乘法表

  1. 实现99乘法表
package tiaojian
// 99乘法表
import "fmt"func Demo99(){for i := 1; i <=9; i++{for j:=1; j <=i; j++{fmt.Printf("%dx%d=%d ", j, i, i*j)if i == j{println()				}}}
}// 输出结果
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
1x4=4 2x4=8 3x4=12 4x4=16
1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/676640.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用CICFlowMeter 实现对pcap文件的特征提取【教程】

使用CICFlowMeter 实现对pcap文件的特征提取【教程】 针对现有的关于CICFlowMeter 的使用教程不够全面&#xff0c;一些细节没有展示&#xff0c;我将结合网络上的相关资料和实际的经历&#xff0c;提供一些经验和建议。 configuration information --------------- Windows…

C++入门学习(二十六)for循环

for (初始化; 条件; 递增/递减) { // 代码块 } 打印1~10&#xff1a; #include <iostream> using namespace std; int main() { for (int i 1; i < 10; i) { cout <<i<<endl; } return 0; } 打印九九乘法表&#xff1a; #include <iostream…

uniapp的配置和使用

①安装环境和编辑器 注册小程序账号 微信开发者工具下载 uniapp 官网 HbuilderX 下载 首先先下载Hbuilder和微信开发者工具 &#xff08;都是傻瓜式安装&#xff09;&#xff0c;然后注册小程序账号&#xff1a; 拿到appid&#xff1a; ②简单通过demo使用微信开发者工具和…

在Linux系统中设置全局HTTP代理的步骤与技巧

在Linux系统中&#xff0c;设置全局HTTP代理可以方便我们统一管理和控制网络请求。这不仅可以帮助我们加速网络访问&#xff0c;还可以在某些情况下绕过网络限制或实现匿名上网。下面&#xff0c;我将为你详细介绍在Linux系统中设置全局HTTP代理的步骤与技巧。 步骤一&#xf…

windows10安装配置nvm以达到切换nodejs的目的

前言 各种各样的项目&#xff0c;各种node环境&#xff0c;还有node_modules这个庞然大物。。想想都觉得恐怖。 所以现在有了&#xff1a;nvm-切换node环境&#xff0c;pnpm–解决重复下载同样类库的问题。 下面将就如何在win10下配置进行说明 nvm下载配置 nvm的github下载地…

【开源】JAVA+Vue+SpringBoot实现班级考勤管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统基础支持模块2.2 班级学生教师支持模块2.3 考勤签到管理2.4 学生请假管理 三、系统设计3.1 功能设计3.1.1 系统基础支持模块3.1.2 班级学生教师档案模块3.1.3 考勤签到管理模块3.1.4 学生请假管理模块 3.2 数据库设…

OpenCV 图像处理六(傅里叶变换、模板匹配与霍夫变换)

文章目录 一、傅里叶变换1.1 NumPy实现和逆实现1.1.1 NumPy实现傅里叶变换Demo 1.1.2 NumPy实现逆傅里叶变换Demo 1.2 OpenCV实现和逆实现1.2.1 OpenCV实现傅里叶变换Demo 1.2.2 OpenCV实现逆傅里叶变换Demo 1.3 频域滤波1.3.1低频、高频1.3.2 高通滤波器构造高通滤波器Demo 1.…

Django前后端分离之后端实践

django-admin startproject djweb 生成djweb项目 django-admin startapp news 生成news应用 配置models文件 class NewInfo(models.Model):title models.CharField(max_length30)content models.TextField()b_date models.DateField()read models.IntegerFie…

Blazor Wasm Gitee 码云登录

目录: OpenID 与 OAuth2 基础知识Blazor wasm Google 登录Blazor wasm Gitee 码云登录Blazor SSR/WASM IDS/OIDC 单点登录授权实例1-建立和配置IDS身份验证服务Blazor SSR/WASM IDS/OIDC 单点登录授权实例2-登录信息组件wasmBlazor SSR/WASM IDS/OIDC 单点登录授权实例3-服务端…

ClickHouse--01--简介

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1. ClickHouse 简介1.1 大数据处理场景1.2 什么是 ClickHouse1.3 OLAP 场景的特征 2. ClickHouse 特性2.1 完备的 DBMS 功能2.2 列式存储行式存储: 在数据写入和修改…

OpenEuler20.03LTS SP2 上安装 OpenGauss3.0.0 单机部署过程(二)

开始安装 OpenGauss 数据库 3.1.7 安装依赖包 (说明:如果可以联网,可以通过网络 yum 安装所需依赖包,既可以跳过本步骤。如果网络无法连通,请把本文档所在目录下的依赖包上传到服务器上,手工安装后,即无需通过网络进行 Yum 安装了): 上传:libaio-0.3.111-5.oe1.x8…

三、搜索与图论

DFS 排列数字 #include<iostream> using namespace std; const int N 10; int a[N], b[N]; int n;void dfs(int u){if(u > n){for(int i 1; i < n; i)cout<<a[i]<<" ";cout<<endl;return;}for(int i 1; i < n; i){if(!b[i]){b[…

自己DIY制作耳机壳一般用哪种材料比较好,性价比比较高

在选择耳机壳的材料时&#xff0c;除了考虑材料本身的性能外&#xff0c;还需要考虑成本、加工难度、耐用性、环保性等方面的因素。 从性能方面来看&#xff1a; 制作耳机壳的UV树脂和塑料材质各有其优缺点。UV树脂具有高硬度、耐磨、耐高温、环保等优点&#xff0c;能够提供更…

【FFmpeg】ffplay 命令行参数 ⑤ ( 设置音频滤镜 -af 参数 | 设置统计信息 -stats 参数 | 设置同步时钟类型 -sync 参数 )

文章目录 一、ffplay 命令行参数 - 音频滤镜1、设置音频滤镜 -af 参数2、常用的 音频滤镜 参数3、音频滤镜链 示例 二、ffplay 命令行参数 - 统计信息1、设置统计信息 -stats 参数2、关闭统计信息 -nostats 参数 三、ffplay 命令行参数 - 同步时钟类型1、设置同步时钟类型 -syn…

【前沿技术杂谈:多模态文档基础模型】使用多模态文档基础模型彻底改变文档 AI

【前沿技术杂谈&#xff1a;多模态文档基础模型】使用多模态文档基础模型彻底改变文档 AI 从文本到多模态模型&#xff1a;文档 AI 逐渐发展新技能。行业领先的型号Document AI 的下一步&#xff1a;开发通用和统一框架 您是否曾经被包含不同信息&#xff08;如应付账款、日期、…

Web后端开发:事务与AOP

事务管理 在学习数据库时&#xff0c;讲到&#xff1a;事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位。事务会把所有的操作作为一个整体&#xff0c;一起向数据库提交或者是撤销操作请求&#xff0c;要么同时成功&#xff0c;要么同时失败。 事务的操作主要有三…

C#向数组指定索引位置插入新的元素值:自定义插入方法 vs List<T>.Add(T) 方法

目录 一、使用的方法 1.自定义插入方法 2.使用List.Add(T) 方法 二、实例 1.示例1&#xff1a;List.Add(T) 方法 2.示例&#xff1a;自定义插入方法 一、使用的方法 1.自定义插入方法 首先需要定义一个一维数组&#xff0c;然后修改数组的长度(这里使用Length属性获取…

网关中全局过滤器实现jwt校验

意味着有很多相同接口的实现类&#xff0c;那么必定会有优先级的问题。于是Spring就提供了Ordered这个接口&#xff0c;来处理相同接口实现类的优先级问题。 public class AuthorizeFilter implements Ordered, GlobalFilter {Overridepublic Mono<Void> filter(ServerW…

Linux应用程序几种参数传递方式

大家好&#xff0c;今天给大家介绍Linux应用程序几种参数传递方式&#xff0c;文章末尾附有分享大家一个资料包&#xff0c;差不多150多G。里面学习内容、面经、项目都比较新也比较全&#xff01;可进群免费领取。 在Linux中&#xff0c;应用程序可以通过多种方式接收参数。以下…

栈的基本操作

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…