【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,一经查实,立即删除!

相关文章

Android java基础知识

一.Android java基础知识 第一个java程序Hello Worid&#xff1a; public class Hello {public static void main(String args[]) {System.out.println("Hello, world!");} }运行结果&#xff1a; rootubuntu:/home/topeet/guyilian# javac Hello.java rootubuntu…

使用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…

Java面向对象 访问控制权限

目录 访问控制权限继承多态组合代理向上转型staticfinal 访问控制权限 访问控制权限⼜称为封装 &#xff0c;它是⾯向对象三⼤特性中的⼀种&#xff0c;我之前在学习过程中经常会忽略封装&#xff0c;⼼想这不就是⼀个访问修饰符么&#xff0c;怎么就是三⼤特性的必要条件了&a…

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下载地…

Python DNS操作详解

在网络世界中&#xff0c;DNS&#xff08;Domain Name System&#xff09;扮演着重要的角色&#xff0c;它是一种分布式数据库系统&#xff0c;用于将域名&#xff08;如 google.com&#xff09;转换为相应的 IP 地址&#xff08;如 172.217.7.206&#xff09;。DNS 可以被视为…

【Flink】SQL-CLIENT中出现 Could not find any factory for identifier ‘kafka‘

在Flink的sql-client客户端中执行sql代码时出现如下错误,版本Flink1.13.6 [ERROR] Could not execute SQL statement. Reason: org.apache.flink.table.api.ValidationException: Could not find any factory for identifier kafka that implements org.apache.flink.table.fa…

nginx: [error] invalid PID number ““ in “/usr/local/nginx/logs/nginx.pid“

问题描述 执行nginx -s reload时&#xff0c;出现如下错误 [rootiZuf65h6i43ltlzhqolumyZ conf]# ../sbin/nginx -s reload nginx: [error] invalid PID number "" in "/usr/local/nginx/logs/nginx.pid"解决办法 因为每一个nginx进程都对应一个id&…

配置ARM交叉编译工具的通用步骤

ARM交叉编译工具是用于编译在ARM架构上运行的代码的工具。这些工具允许开发者在一种架构&#xff08;通常是x86或x64&#xff09;上编写和编译代码&#xff0c;然后将其移植到ARM架构上运行。 ARM交叉编译工具链通常包括编译器、链接器、调试器和其他必要的工具&#xff0c;用…

【开源】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.…

JavaScript 涉及模式之外观模式

外观模式 我们为啥要使用外观模式呢&#xff0c;其实我们在使用各种 js 库的时候常常会看到很多的外观者模式&#xff0c;也正是这些库的大量使用&#xff0c;所以使得兼容性更广泛&#xff0c;通过外观者模式来封装多个功能&#xff0c;简化底层操作方法 const A {g: functi…

基金分类

一、按基金运作方式分类 &#xff08;一&#xff09;封闭式基金 是基金份额总额在期限内固定不变&#xff0c;在期限内不可申购和赎回。 &#xff08;二&#xff09;开放式基金 是基金份额总额不固定&#xff0c;在期限内可以申购和赎回。 这里的开放式基金特指传统的开放式基…

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…

linux查看当前连接的IP

linux下查询当前所有连接的ip_linux查看某个ip的连接-CSDN博客 netstat -ntu | grep tcp | awk {print $5} | cut -d: -f1 | sort | uniq -c | sort -nr

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-服务端…

C语言中在main函数之后运行的函数

在 Linux 平台上&#xff0c;atexit 函数同样是一个用于注册终止处理函数的库函数&#xff0c;它是 C 标准库 <stdlib.h> 的一部分。atexit 函数允许你注册一个或多个函数&#xff0c;这些函数会在 main 函数执行结束后&#xff0c;或者在调用 exit 函数时&#xff0c;由…

ClickHouse--01--简介

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