Rust编程的if选择语句

【图书介绍】《Rust编程与项目实战》-CSDN博客

《Rust编程与项目实战》(朱文伟,李建英)【摘要 书评 试读】- 京东图书 (jd.com)

Rust编程与项目实战_夏天又到了的博客-CSDN博客

Rust语言实现选择结构时,根据某种条件的成立与否而采用不同的程序段进行处理的程序结构称为选择结构。通常选择结构有两个分支,条件为“真”,执行甲程序段,否则执行乙程序段。有时,两个分支还不能完全描述实际问题。例如,判断学生的成绩属于哪个等级(A:90~100,B:80~89,C:60~79,D:0~59),根据学生的成绩的条件分成4个分支,分别处理各等级的情况。这样的程序结构称为多分支选择结构。

Rust语言中的if选择语句分为3种:单分支结构(if语句)、双分支结构(if…else语句) 和多分支结构(if…else if语句)。通过使用关键字if或if…else、if…else if…else加上条件语句来实现。

5.1.1  单分支if语句

if语句是最简单的选择语句,它实现程序的单分支执行路径。其语法格式如下:

if 条件表达式 {代码段}

它表示“条件表达式”为true时执行花括号内的“代码段”内容,否则将跳过“代码段”,执行if语句的下一条语句。代码段可以是一条语句,也可以是多条语句,但都必须用花括号括起来。

注意:if后面的“条件表达式”是不需要圆括号的。另外,即使“代码段”仅有一条语句,也需要用花括号括起来。也就是说,花括号不能省略。这两点和C/C++不同。

另外需要注意的是,代码中的条件表达式必须产生一个 bool 类型的值,否则会触发变异错误。与C/C++或JavaScript等语言不同,Rust不会自动尝试将非布尔类型的值转换为布尔类型,必须显式地在 if 表达式中提供一个布尔类型作为条件。

下面的代码当输入为偶数时输出even:

fn main() {let num: i32 = 8;if num % 2 == 0 {   //8可以整除2println!("even");}}

因为8可以整除2,所以8%2的结果是0,从而执行花括号中的println!("even");。

看个例子,求给定整数的绝对值。

算法设计:求x的绝对值的算法很简单,若x≥0,则x即为所求:若x< 0,则−x为x的绝对值。程序中首先定义整型变量x和y,其中y存放x的绝对值。输入x的值之后,执行y=x;语句,即先假定x≥ 0,然后判断x是否小于0,若x<0,则x的绝对值为−x,将−x赋给y(y中原来的x值被“冲”掉了)后输出结果y。若x≥0,则跳过y=−x;语句,直接输出结果。此时y中的值仍然是原x的值。程序代码如下:

fn main() {let x: i32 = -8;                  //给定一个整数let mut y=x;if x < 0{y=-x;                           //若x< 0,则-x为x的绝对值}print!("|x|={}",y);                //程序输出:|x|=8}

5.1.2  双分支if…else语句

单分支if语句只指出条件为true时做什么,而未指出条件为false时做什么。if…else语句明确指出作为控制条件的表达式为true时做什么,为false时做什么。语法格式如下:

if 条件表达式 {代码段1} else {代码段2}

计算条件表达式的值时,若表达式的值为true,则执行代码段1,并跳过代码段2,然后继续执行if…else语句的下一条语句,若表达式的值为false,则跳过代码段1,执行代码段2,然后继续执行if…else语句的下一条语句。

下面的代码当num为偶数时输出even,当num为奇数时输出odd:

fn main() {let num: i32 = 5;if num % 2 == 0 {println!("even");} else {println!("odd");}}

因为5是奇数,所以整除2的结果不是0,结果输出odd。

我们再来看求两个数中的最大值,代码如下:

fn main() {let x: f32 = 5.6;let y=7.8;if x>y{println!("max={}",x);} else {println!("max={}",y);}}

结果输出:max=7.8。

5.1.3  多分支if语句

多分支语句是对同一个条件表达式的不同结果分别执行不同的代码块。比如判断一个整数是正数、负数还是0,那么就有3种情况:若大于0,则输出正数;若小于0,则输出负数;若等于0,则输出零。这种情况就使用if多分支语句来判断。

if多分支语句的语法格式如下:

if 条件表达式1{代码段1;}else if 条件表达式2{代码段2;}…else if 条件表达式n{代码段n;}

if 多分支结构执行过程的本质就是:若满足则执行,否则不执行。从语法上分析就是:判断条件表达式1的取值,若条件表达式1的值为true,则执行代码段1。若条件表达式1的值为false,则代码段1不会被执行,继续判断条件表达式2的取值,若条件表达式2的值为true,则执行代码段2。若条件表达式n前面所有的条件表达式取值都为false,则会判断表达式n的取值,若条件表达式n的取值为true,则执行语句n;若条件表达式n的取值为false(或不为1),则整个if结构都不会被执行。这种情况下,该结构的存在多半没有意义。如果n个条件都不满足,但还是想让程序执行这n种条件外的其他情况,那么可以在最后加一个else:

if 条件表达式1{代码段1;}else if 条件表达式2{代码段2;}…else if 条件表达式n{代码段n;}else{代码段n+1;}

此时,当前面n个条件都不为false时,则会执行最后else中的“代码段n+1”。看个例子:

fn main() {let number = 6;if number % 4 == 0 {println!("number is divisible by 4");} else if number % 3 == 0 {println!("number is divisible by 3");} else if number % 2 == 0 {printin!("number is divisible by 2");} else {println!("number is not divisible by 4, 3 or 2");}}

number是6,不能被4整除,但可以被3整除,结果输出:number is divisible by 3。然后整个多分支if语句结束。

我们再来看一个例子,用if语句实现计算器程序设计。设计计算器程序使用的是多选择结构,即先判断是否为加法运算,如果是,则执行加法操作,如果不是,继续判断是否为减法运算,如果是,则执行减法操作,如果不是,继续判断是否为乘法运算,如果是,则执行乘法操作,如果不是,则执行除法操作,在执行除法操作时需要进一步判断除数是否为0,若除数为0,则输出data error,若除数不为0,则输出除法运算结果。程序流程图如图5-1所示。

根据程序流程图,我们可以写出计算器的Rust语言程序代码。其代码如下:

fn main() {let op:char='*';let c1:f32=3.14;let c2:f32=2.0;if op=='+' { print!("{}{}{}={}",c1,op,c2,c1+c2);}else if op=='-' { print!("{}{}{}={}",c1,op,c2,c1-c2);}else if op=='*' { print!("{}{}{}={}",c1,op,c2,c1*c2);}else if op=='/' {if c2==0.0 {print!("data error");}else {print!("{}{}{}={}",c1,op,c2,c1/c2)};}}

结果输出:3.14*2=6.28。

5.1.4  在let语句中使用if

因为if是一个表达式,所以可以将它放在let语中等号的右边。比如:

fn main() {let condition = true;let number = if condition { 5 } else { 6 };   // if else必须返回相同的数据类型println!("The value of number is: {}", number);}

结果输出:The value of number is: 5。

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

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

相关文章

基于nodejs+vue的农产品销售管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

FortiGate 无线组网

无线管理与配置 FortiAP 连接 internal 接口之后自动获得 ip 地址&#xff1a;192.168.1.xxx/24在 FortiGate 中创建 SSIDFortiGate 自动发现 FortiAP&#xff0c;将 FortiAP 添加到 FortiGate将 SSID 和 FortiAP 关联创建防火墙策略 下面我们就来一起看看在 FortiGate 中该如…

ModbusTCP通讯错误的排查

Modbus是一种由MODICON公司开发的工业现场总线协议标准&#xff0c;是一项应用层报文传输协议。该协议用于传输数字和模拟变量[1]。有关该协议的报文具体格式&#xff0c;以及一些基本概念&#xff0c;见[1]。 本文以一个例子&#xff0c;阐述当ModbusTCP通讯出现错误的时候&a…

开源鸿蒙OpenHarmony系统更换开机Logo方法,瑞芯微RK3566鸿蒙开发板

本文适用于开源鸿蒙OpenHarmony系统更换开机Logo&#xff0c;本次使用的是触觉智能的Purple Pi OH鸿蒙开源主板&#xff0c;搭载了瑞芯微RK3566芯片&#xff0c;类树莓派设计&#xff0c;是Laval官方社区主荐的一款鸿蒙开发主板。 介绍 OpenHarmony的品牌标志、版本信息、项目…

计算机毕业设计 基于Hadoop的智慧校园数据共享平台的设计与实现 Python 数据分析 可视化大屏 附源码 文档

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

探索EasyCVR视频融合平台:在视频编解码与转码领域的灵活性优势

随着视频监控技术的飞速发展&#xff0c;各类应用场景对视频数据的处理需求日益复杂多样。从公共安全到智慧城市&#xff0c;再到工业监控&#xff0c;高效、灵活的视频处理能力成为衡量视频融合平台性能的重要标准。在众多解决方案中&#xff0c;EasyCVR视频融合平台凭借其在视…

大觅网之自动化部署(Automated Deployment of Da Mi Network)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…

音视频整体解码流程和同步流程

目录 1. 整体解码流程1. 初始化 FFmpeg2. 打开媒体文件3. 查找解码器4. 打开解码器5. 读取和解码数据6. 处理解码后的帧7. 释放资源 2. 音视频同步整体流程1. 解复用媒体流2. 解码3. 以音频为时钟源进行音视频同步的策略4. 缓冲区设计 现在先说大体流程&#xff0c;不分析代码 …

使用python爬取豆瓣网站?如何简单的爬取豆瓣网站?

1.对python爬虫的看法 首先说说我对python的看法&#xff0c;我的专业是大数据&#xff0c;我从事的工作是java开发&#xff0c;但是在工作之余&#xff0c;我对python又很感兴趣&#xff0c;因为我觉得python是一门很好的语言&#xff0c;第一&#xff1a;它可以用来爬取数据…

如何使用 Rust 框架进行 RESTful API 的开发?

一、RESTful API 的开发 使用 Rust 框架进行 RESTful API 开发&#xff0c;你可以选择多种流行的 Rust Web 框架&#xff0c;如 Actix-web、Rocket、Warp 和 Tide 等。以下是使用这些框架进行 RESTful API 开发的基本步骤和概念&#xff1a; 选择框架&#xff1a;根据项…

探索 Snowflake 与 Databend 的云原生数仓技术与应用实践 | Data Infra NO.21 回顾

上周六&#xff0c;第二十一期「Data Infra 研究社」在线上与大家相见。活动邀请到了西门子数据分析师陈砚林与 Databend 联合创始人王吟&#xff0c;为我们带来了一场关于 Snowflake 和 Databend 的技术探索。Snowflake&#xff0c;这个市值曾超过 700 亿美元的云原生数据仓库…

李宏毅机器学习2023-HW10-Adversarial Attack

文章目录 TaskBaselineFGSM (Fast Gradient Sign Method (FGSM)I-FGSM(Iterative Fast Gradient Sign Method)MI-FGSM(Momentum Iterative Fast Gradient Sign Method)M-DI2-FGSM(Diverse Input Momentum Iterative Fast Gradient Sign Method) Reportfgsm attackJepg Compress…

性能优化与资源管理:优化Selenium脚本的执行效率,合理管理浏览器实例和系统资源

目录 引言 一、Selenium基础与常用方法 1.1 Selenium简介 1.2 Selenium基础用法 二、Selenium性能优化技巧 2.1 使用WebDriverWait实现显式等待 2.2 启用无头模式 2.3 设置合理的页面加载策略 2.4 禁用图片和JavaScript加载 2.5 优化元素定位 2.6 合理使用隐式等待和…

从0开始linux(5)——vim

欢迎来到博主的专栏&#xff1a;从0开始linux 博主ID&#xff1a;代码小豪 文章目录 vim的多种模式底行模式命令命令模式视块模式&#xff08;visual block&#xff09; vim的配置 vim是linux系统的文本编辑器。就像windows的记事本一样。 使用vim指令可以使用vim打开一个文本文…

JavaWeb美食推荐管理系统

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 spring-mybatis.xml3.5 spring-mvc.xml3.5 login.jsp 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优…

JavaScript 学习

一、输出 为方便调试可以输出内容&#xff0c;但是用户是看不到的。要在开发者模式中看。 console . log ( "Hello" )&#xff1b; 二、外部文件引用 可以直接在html中写JS <head> <meta charset"utf-8"> <script> console.log("he…

ZYNQ:开发环境搭建

资料下载 http://47.111.11.73/docs/boards/fpga/zdyz_qimxing(V2).html Vivado软件是什么&#xff1f; Vivado软件是Xilinx&#xff08;赛灵思&#xff09;公司推出的一款集成设计环境&#xff08;IDE&#xff09;&#xff0c;主要用于FPGA&#xff08;现场可编程门阵列&am…

零代码构建自己强大的Agent智能体,偷偷甩掉90%的人

转自公众号&#xff1a;渡码 Agent&#xff08;智能体&#xff09;的概念大家应该并不陌生了&#xff0c;今天分享通过可视化的方式构建各种各样强大的智能体。 关于Agent的定义&#xff0c;我并不想引用官方正式的说法。而是按照我的理解通俗地解释一下。 大模型好比是面粉…

第166天:应急响应-拒绝服务钓鱼指南DDOS压力测试邮件反制分析应用日志

案例一&#xff1a;内网应急-日志分析-爆破&横向&数据库 数据库 这里不同数据库日志不一样&#xff0c;我用mysql分析 首先MySQL数据库需要支持远程连接 GRANT ALL PRIVILEGES ON . TO root% IDENTIFIED BY 123.com WITH GRANT OPTION; 其次开启日志 -- 查看general…

Flutter为Android添加签名并打包

前言 我们需要将App进行数字签名才能发布到商店里。在这里就具体描述一下如果给App添加签名 为App签名 创建一个用户上传的秘钥库 如果你已经有一个秘钥库了&#xff0c;可以直接跳到下一步&#xff0c;如果没有则按照下面的指令创建一个 keytool 可能不在我们的系统路径中…