Go语言之流程控制语句,for循环

news2024/11/17 8:29:24

程序是由语句构成,而流程控制语句 是用来控制程序中每条语句执行顺序的语句。可以通过控制语句实现更丰富的逻辑以及更强大的功能。几乎所有编程语言都有流程控制语句,功能也都基本相似。

其流程控制方式有
顺序结构,分支结构,循环结构

1、switch比if else更为简洁
2、执行效率更高。switch…case会生成一个跳转表来指示实际的case分支的地址,而这个跳转表的索引号与switch变量的值是相等的。从而,switch…case不用像if…else那样遍历条件分支直到命中条件,而只需访问对应索引号的表项从而到达定位分支的目的。
3、到底使用哪一个选择语句,代码环境有关,如果是范围取值,则使用if else语句更为快捷;如果是确定取值,则使用switch是更优方案。

在这里插入图片描述

package main

import (
	"fmt"
	"os"
)

func1_流程控制() {
	var username, password string
	fmt.Print("请输入用户名:")
	fmt.Scanln(&username)

	fmt.Print("请输入密码:")
	fmt.Scanln(&password)

	if username == "root" && password == "123" {
		fmt.Println("登录成功")
	} else {
		fmt.Println("登录失败")
	}
}
func2_流程控制() {
	var age int
	fmt.Print("请输入您的年龄:")
	fmt.Scanln(&age)
	if age >= 18 {
		fmt.Print("恭喜你,成年了")
	} else {
		fmt.Print("你还是未成年")
	}
}
func3个_if多分支() {
	//不管多少条分支只能执行一条分支!
	var score int
	fmt.Print("请输入你的分数:")
	fmt.Scanln(&score)
	if score > 100 && score < 0 {
		fmt.Print("请输入一个在0-100之间的数字")
	} else if score >= 90 {
		fmt.Print("成绩优秀")
	} else if score >= 80 {
		fmt.Print("成绩良好")
	} else if score >= 60 {
		fmt.Print("成绩合格")
	} else {
		fmt.Print("不合格")
	}
}
func4_switch() {
	/**
	1、switch比if else更为简洁
	2、执行效率更高。switch…case会生成一个跳转表来指示实际的case分支的地址,
	而这个跳转表的索引号与switch变量的值是相等的。从而,switch…case不用像if…else
	那样遍历条件分支直到命中条件,而只需访问对应索引号的表项从而到达定位分支的目的。
	3、到底使用哪一个选择语句,代码环境有关,如果是范围取值,则使用if else语句更为快捷;
	如果是确定取值,则使用switch是更优方案。
	*/
	var choice int
	fmt.Println("请输入选择")
	fmt.Scan(&choice)
	switch choice {
	case 0:
		fmt.Println("选择0")
		break
	case 1:
		fmt.Println("选择1")
		break
	case 2, 3: //switch同时支持多条件匹配:
		fmt.Println("选择2,3")
		break
	default:
		fmt.Println("选择默认")
		break
	}
}
func5_根据用户输入的生日判断星座() {
	var month, day int
	fmt.Print("请输入你的生日月份和日:")
	fmt.Scan(&month, &day)
	var star string
	if day < 1 || day > 31 {
		fmt.Println("输入参数错误")
		os.Exit(-1)
	}
	switch month {
	case 1:
		if day >= 1 && day <= 19 {
			star = "星座11"
		} else {
			star = "星座12"
		}
		break
	case 2:
		if day >= 1 && day <= 19 {
			star = "星座21"
		} else {
			star = "星座22"
		}
		break
	case 3:
		if day >= 1 && day <= 19 {
			star = "星座31"
		} else {
			star = "星座32"
		}
		break
	case 4:
		if day >= 1 && day <= 19 {
			star = "星座41"
		} else {
			star = "星座42"
		}
		break
	case 5:
		if day >= 1 && day <= 19 {
			star = "星座51"
		} else {
			star = "星座52"
		}
		break
	case 6:
		if day >= 1 && day <= 19 {
			star = "星座61"
		} else {
			star = "星座62"
		}
		break
	case 7:
		if day >= 1 && day <= 19 {
			star = "星座71"
		} else {
			star = "星座72"
		}
		break
	case 8:
		if day >= 1 && day <= 19 {
			star = "星座81"
		} else {
			star = "星座82"
		}
		break
	case 9:
		if day >= 1 && day <= 19 {
			star = "星座91"
		} else {
			star = "星座92"
		}
		break
	case 10:
		if day >= 1 && day <= 19 {
			star = "星座101"
		} else {
			star = "星座102"
		}
		break
	case 11:
		if day >= 1 && day <= 19 {
			star = "星座111"
		} else {
			star = "星座112"
		}
		break
	case 12:
		if day >= 1 && day <= 19 {
			star = "星座121"
		} else {
			star = "星座122"
		}
		break
	default:
		fmt.Println("error")
		break
	}
	fmt.Println("你的星座是:" + star)
}
func main() {5_根据用户输入的生日判断星座()
}

for循环

原始for循环,通过关系表达式或逻辑表达式控制循环

for  condition { }

简单循环案例:

  count := 0       // 初始化语句
    for count < 10 { // 条件判断
        fmt.Println("hello yuan!")
        count++ //  步进语句
    }
    fmt.Println("end")
count := 10     // 初始化语句
for count > 0 { // 条件判断
        fmt.Println(count)
        count-- //  步进语句
    }
fmt.Println("end")

在这里插入图片描述
三要素for循环(核心)
将初始化语句、条件判断以及步进语句格式固定化的循环方式,本质上和上面的for循环没有区别。

for init;condition;post { 
    // 循环体语句
}

init: 初始化语句,一般为赋值表达式,给控制变量赋初值;
condition:条件判断,一般是关系表达式或逻辑表达式,循环控制条件;
post: 步进语句,一般为赋值表达式,给控制变量增量或减量。

for i := 1; i < 10; i++ {
        fmt.Println(i)
    }

执行流程(关键):

(1)初始语句
(2)条件判断,布尔值为真则执行一次循环体,为假则退出循环
(3)执行一次循环体语句结束后,再执行步进语句,然后回到步骤(2),依次循环

案例1:计算1-100的和

/*  var s = 0
    s += 1
    s += 2
    s += 3
    s += 4
    s += 5
    s += 6
    s += 7
    s += 8
    s += 9
    s += 10
    fmt.Println(s)*/

// 如果是1+2+3+....100呢?如何借助循环语法实现
var s = 0
for i := 1; i <= 100; i++ {
        s += i
    }
fmt.Println(s)

无限循环案例

// 循环中嵌入分支语句
func main() {
    fmt.Printf(`
    1、普通攻击
    2、超级攻击
    3、使用道具
    4、逃跑
`)
    for true {
        var choice int
        fmt.Printf("请输入选择:")
        fmt.Scanln(&choice)
        //fmt.Println(choice,reflect.TypeOf(choice))

        switch choice {
        case 1:
            fmt.Println("普通攻击")
        case 2:
            fmt.Println("超级攻击")
        case 3:
            fmt.Println("使用道具")
        case 4:
            fmt.Println("逃跑")
        default:
            fmt.Println("输入有误!")
        }
    }
}

输入正整数num,大于100,则打印1-num,小于100,则打印num-1?

var num int
    fmt.Scanln(&num)

    if num > 100 {
        for i := 1; i <= num; i++ {
            fmt.Println(i)
        }
    } else {
        for i := num; i > 0; i-- {
            fmt.Println(i)
        }
    }

退出循环

如果想提前结束循环(在不满足结束条件的情况下结束循环),可以使用break或continue关键字。
break 用来跳出整个循环语句,也就是跳出所有的循环次数;
continue 用来跳出当次循环,也就是跳过当前的一次循环。

break语句
当 break 关键字用于 for 循环时,会终止循环而执行整个循环语句后面的代码。break 关键字通常和 if 语句一起使用,即满足某个条件时便跳出循环,继续执行循环语句下面的代码。

for i := 0; i < 10; i++ {
        if i==8{
            break
        }
        fmt.Println(":",i)
}

在这里插入图片描述

continue语句

break 语句使得循环语句还没有完全执行完就提前结束,与之相反,continue 语句并不终止当前的循环语句的执行,仅仅是终止当前循环变量 i 所控制的这一次循环,而继续执行该循环语句。continue 语句的实际含义是“忽略 continue 之后的所有循环体语句,回到循环的顶部并开始下一次循环”

for i := 0; i < 10; i++ {
        if i==8{
            continue
        }
        fmt.Println(":",i)
    }

在这里插入图片描述

案例: 计算 1 - 2 + 3 - 4 + … + 99 中除了88以外所有数的总和?
在控制台上打印一个五行五列的矩形,如下图所示

for i := 0; i < 5; i++ {
    
    for j:=0;j<5;j++ {
        fmt.Print("*")
    }
    fmt.Print("\n")
}

在控制台上打印一个如下图所示的三角形

for i := 0; i < 5; i++ {
    for j := 0; j <= i; j++ {
        fmt.Printf("*")
    }
    fmt.Println()
}

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

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

相关文章

javaWeb之文件上传和下载

文件上传下载(场景): * 文件上传 * 客户端 * 文件上传页面(form) * 请求方式一定是POST. * 文件上传域(<input typefile>)必须具有name属性. * 表单的enctype属性值设置为"multipart/form-data". * 扩展:浏览器内核产品不同(不建…

剖析C语言字符串函数(超全)

目录 前言&#xff1a; 一、strlen函数 功能&#xff1a; 参数和返回值&#xff1a; 注意事项&#xff1a; 返回值是无符号的易错点&#xff1a; strlen函数的模拟实现 1、计数器算法 2、递归算法 3、指针减去指针 二、strcpy函数 功能&#xff1a; 参数和返回值 …

git使用代码

git init //生成一个.git的子目录&#xff0c;产生一个仓库。 git status //查看当前目录下所有文件的状态。 git aad . //将该目录下所有的文件提交到暂存区 git add文件名/将该目录下指定的文件提交到暂存区 git commit -m v1.0//将暂存区的文件提交到版本库 git log //…

网络协议与攻击模拟-21-HTTP协议

HTTP 协议 1、 HTTP 协议结构 2、在 Windows server 去搭建 web 服务器 3、分析 HTTP 协议流量 一、 HTTP 协议 1、概念 HTTP &#xff08;超文本传输协议&#xff09;是用于在万维网服务器上传输超文本&#xff08; HTML &#xff09;到本地浏览器的传输协议 属于 TCP / …

树与图的(深度 + 广度)优先遍历

目录 一、树与图的存储1.树的特性2.图的分类3.有向图的储存结构 二、树与图的深度优先遍历的运用树的重心题意分析代码实现 三、树与图的广度优先遍历的运用图中点的层次题意分析代码实现 一、树与图的存储 1.树的特性 树是一种特殊的图,具有以下两个重要特性: 无环 树是一个…

Redis数据类型 — Set

目录 Set内部实现 源码片段 Set 类型是一个无序并唯一的键值集合&#xff0c;它的存储顺序不会按照插入的先后顺序进行存储。一个集合最多可以存储 2^32-1 个元素。 Set 类型除了支持集合内的增删改查&#xff0c;同时还支持多个集合取交集、并集、差集。Set 的差集、并集和…

Bean 的作用域和生命周期

目录 一、 Bean 的作用域 1. 安装Lombok插件 1.1 Lombok 简介 1.2 Lombok 安装 2. 创建一个 User 对象&#xff0c;然后将 User 对象 存储到 Spring 容器中 2.1 创建User 对象 2.2 将User 对象存储到 Spring 中 2.3 修改 User 对象中的属性&#xff0c;然后看结果&#…

概率论的学习和整理--番外12:2个概率选择比较的题目

目录 1 题目 2 结论 3 算法 3.1 错误算法 3.2 算法1&#xff0c;用期望的方式解方式 3.3 算法2&#xff0c;直接解方程 3.4 算法3&#xff0c;用递归--等比数列求和来算 4 上述比较的意义-回到问题本身 1 题目 题目 3个A合成1个B 方案1&#xff1a;1/4 几率返还一个A…

【ONE·Linux || 地址空间与进程控制(二)】

总言 进程地址空间和进程控制相关介绍。 文章目录 总言2、进程控制续2.3、进程等待2.3.1、为什么需要进程等待2.3.2、阻塞式等待2.3.2.1、使用wait2.3.2.2、使用waitpid2.3.2.3、参数status基本介绍 2.3.3、一些细节与问题</font>2.3.3.1、进程独立性说明2.3.3.1、父进程…

【网络安全带你练爬虫-100练】第13练:文件的创建、写入

目录 目标&#xff1a;将数据写入到文件中 网络安全O 目标&#xff1a;将数据写入到文件中 开干 &#xff08;始于颜值&#xff09;打开一个&#xff0c;没有就会创建 with open(data.csv, modew, newline) as file: &#xff08;忠于才华&#xff09;开始写入数据 writer cs…

LinuxC/C++开发工具——make/makefile和gdb

linux开发工具 前言Linux项目自动化构建工具&#xff08;make/makefile&#xff09;makefile文件的组成如何使用make.PHONY关键字 项目清理 gdb调试器背景使用list&#xff08;l&#xff09;调试命令break&#xff08;b&#xff09;&#xff1a;设置断点info break&#xff1a;…

[STL] vector 模拟实现详解

目录 一&#xff0c;准备工作 二&#xff0c;push_back 1&#xff0c; 关于引用 2. 参数const 的修饰 补充 三&#xff0c;迭代器实现 四&#xff0c;Pop_back 五&#xff0c;insert 1. 补充——迭代器失效 六&#xff0c; erase 七&#xff0c;构造函数 1. 迭代…

合并当天Log

1.原因&#xff0c; 我们程序运行Log很多时&#xff0c;如果因为要写Log话费很多时间&#xff0c;这时我们可以把log保存按照更短的时间保存&#xff0c;比如一分钟一个Log,一个小时一个log&#xff0c;。。。。但我们查看Log时很麻烦&#xff0c;需要把分散的Log合并起来的工…

移动端深度学习部署:TFlite

1.TFlite介绍 &#xff08;1&#xff09;TFlite概念 tflite是谷歌自己的一个轻量级推理库。主要用于移动端。 tflite使用的思路主要是从预训练的模型转换为tflite模型文件&#xff0c;拿到移动端部署。 tflite的源模型可以来自tensorflow的saved model或者frozen model,也可…

ylb-定时任务task

总览&#xff1a; 在api模块service包&#xff0c;创建IncomeService类&#xff1a;&#xff08;收益计划 和 收益返还&#xff09; package com.bjpowernode.api.service;public interface IncomeService {/*收益计划*/void generateIncomePlan();/*收益返还*/void generate…

基于mysql+java+springboot的福州大学生就业求职系统(含源码+系统演示视频)

1、系统演示视频&#xff1a;基于JavaMySQLspringboot的福州大学生就业求职系统演示视频 2、系统源码&#xff1a;系统源码链接 文章目录 一、需求分析1、公司招聘2、简历管理3、交流咨询 二、福州大学就业求职服务平台简介1.福州大学就业求职服务平台主要功能1.1.个人求职功能…

小黑子—JavaWeb:第一章 - JDBC

JavaWeb入门1.0 1. javaweb介绍2. 数据库设计2.1 约束2.2 表关系2.3 多表查询2.3.1 内连接&#xff08;连接查询&#xff09;2.3.2 外连接&#xff08;连接查询&#xff09;2.3.3 子查询 2.4 事务 3. JDBC3.1 JDBC 快速入门 4 JDBC API详解4.1 DriverManager4.2 Conncetion4.3 …

13_Linux无设备树Platform设备驱动

目录 Linux驱动的分离与分层 驱动的分隔与分离 驱动的分层 platform平台驱动模型简介 platform总线 platform驱动 platform设备 platform设备程序编写 platform驱动程序编写 测试APP编写 运行测试 Linux驱动的分离与分层 像I2C、SPI、LCD 等这些复杂外设的驱动就不…

吴恩达ML2022-用于手写数字识别的神经网络

1 用到的包 导入在这个分配过程中需要的所有包。 Numpy 是使用 Python 进行科学计算的基本软件包。Matplotlib 是在 Python 中绘制图形的流行库。tensorflow是一种流行的机器学习平台。 import numpy as np import tensorflow as tf from tensorflow.keras.models import Se…