Rust编程的if选择语句

news2024/12/23 13:50:58

【图书介绍】《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可以整除2

        println!("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.coloradmin.cn/o/2168872.html

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

相关文章

【Kubernetes】日志平台EFK+Logstash+Kafka【实战】

一&#xff0c;环境准备 &#xff08;1&#xff09;下载镜像包&#xff08;共3个&#xff09;&#xff1a; elasticsearch-7-12-1.tar.gz fluentd-containerd.tar.gz kibana-7-12-1.tar.gz &#xff08;2&#xff09;在node节点导入镜像&#xff1a; ctr -nk8s.io images i…

解决sortablejs+el-table表格内限制回撤和拖拽回撤失败问题

应用场景&#xff1a; table内同一类型可拖拽&#xff0c;不支持不同类型拖拽&#xff08;主演可拖拽交换位置&#xff0c;非主演和主演不可交换位置&#xff09;,类型不同拖拽效果需还原&#xff0c;试了好几次el-table数据更新了&#xff0c;但是表格样式和数据不能及时保持…

Java面试题之JVM面试题

JVM 的主要作用是什么&#xff1f; JVM 就是 Java Virtual Machine&#xff08;Java虚拟机&#xff09;的缩写&#xff0c;JVM 屏蔽了与具体操作系统平台相关的信息&#xff0c;使 Java 程序只需生成在 Java 虚拟机上运行的目标代码 &#xff08;字节码&#xff09;&#xff0…

uniapp 常用高度状态栏,导航栏,tab栏,底部安全高度

实际效果 使用 //使用 let posConfig this.getPosConfig(); // 传false返回值为 px大小 console.log(posConfig.safeBottomH) // 入参 是否转换为rpxgetPosConfig(toRpx true) {const systemInfo uni.getSystemInfoSync();// #ifdef MPconst menuButtonInfo uni.getMenuBu…

Hello Algorithm:Capture 1,2 初识算法

大家好 :) 自学完sklearn的基本使用后&#xff0c;颇感无趣。虽有阅文几篇&#xff0c;却无所获。遂于24年9月26日决习hello algorithm。 &#xff1a;&#xff09; 好了&#xff0c;不开玩笑了。其实开设这篇专栏我也不知道有没有什么意义。其实是因为最近在读TaskWeaver&…

关于最小二乘法

最小二乘法的核心思想简单而优雅&#xff1a;我们希望找到一条最佳的曲线&#xff0c;使其尽可能贴近所有的数据点。想象一下&#xff0c;当你在画布上描绘一条线&#xff0c;目标是让这条线与点的距离最小。数学上&#xff0c;这可以表示为&#xff1a; 在这个公式中&#xff…

Eclipse Memory Analyzer (MAT)提示No java virtual machine was found ...解决办法

1&#xff0c;下载mat后安装&#xff0c;打开时提示 jdk版本低&#xff0c;需要升级到jdk17及以上版本&#xff0c;无奈就下载了jdk17&#xff0c;结果安装后提示没有jre环境&#xff0c;然后手动生成jre目录&#xff0c;命令如下&#xff1a; 进入jdk17目录&#xff1a;执行&…

SpringBoot的基础(自动配置)

SpringBootApplication注解 是一个组合注解&#xff0c;其中EnableAutoConfiguration让SpringBoot根据类路径中的jar包依赖为当前项目进行自动配置 例如&#xff1a;添加了spring-boot-starter-web依赖&#xff0c;会自动添加Tomcat和SpringMVC的依赖 添加了spring-boot-start…

【UE5】将2D切片图渲染为体积纹理,最终实现使用RT实时绘制体积纹理【第四篇-着色器投影-接收阴影部分】

上一章中实现了体积渲染的光照与自阴影&#xff0c;那我们这篇来实现投影 回顾 勘误 在开始本篇内容之前&#xff0c;我已经对上一章中的内容的错误进行了修改。为了确保不会错过这些更正&#xff0c;同时也避免大家重新阅读一遍&#xff0c;我将在这里为大家演示一下修改的…

LeetCode - 850 矩形面积 II

题目来源 850. 矩形面积 II - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你一个轴对齐的二维数组 rectangles 。 对于 rectangle[i] [x1, y1, x2, y2]&#xff0c;其中&#xff08;x1&#xff0c;y1&#xff09;是矩形 i 左下角的坐标&#xff0c; (xi1, yi1) 是该…

灵当CRM index.php接口SQL注入漏洞复现 [附POC]

文章目录 灵当CRM index.php接口SQL注入漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 灵当CRM index.php接口SQL注入漏洞复现 [附POC] 0x01 前言 免责声明&#xff1a;请勿利用文章内的相关技…

数据治理003-数据域

数据仓库是面向主题&#xff08;数据综合、归类并进行分析利用的抽象&#xff09;的应用。 数据仓库模型设计除横向的分层外&#xff0c;通常也需要根据业务情况进行纵向划分数据域。数据域是联系较为紧密的数据主题的集合&#xff0c;通常是根据业务类别、数据来源、数据用途…

001、视频添加字幕

1. 腾讯智影 (可用) https://zenvideo.qq.com/ 1.1 操作步骤 https://zenvideo.qq.com/ https://zenvideo.qq.com/my/material?typeexport 上传资源 自动字幕识别 修改字幕 下载字幕 上传字幕 https://zenvideo.qq.com/my/material?typeexport 2. 秒剪–手机版app &a…

【Python-GUI图形化界面-PyQt5模块(3)】——Qwidget核心模块

本文旨在带大家学习Python中的一种GUI图形化界面模块——PyQt5模块&#xff0c;将为大家详细了解PyQt5模块中函数的参数和使用&#xff1a; 一、PyQt5简介 PyQt是Qt框架的Python语言实现&#xff0c;由Riverbank Computing开发&#xff0c;是最强大的GUI库之一。 官方网站&a…

Win32打开UWP应用

最近无意间发现Windows里一个神奇的文件夹。 shell:appsfolder 运行打开 这个文件夹后&#xff0c;你可以看到本机安装的所有应用程序。 我觉得这个挺方便的&#xff0c;所以做了一个简单的appFolderDialog包给C#用 项目地址&#xff1a;https://github.com/TianXiaTech/App…

大数据毕业设计选题推荐-内蒙古旅游景点数据分析系统-Hive-Hadoop-Spark

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

【有啥问啥】深度理解主动学习:机器学习的高效策略

深度理解主动学习&#xff1a;机器学习的高效策略 在大数据时代&#xff0c;数据量的爆炸性增长与有限的标注资源之间的矛盾日益凸显。如何高效地利用标注资源来训练高质量的模型&#xff0c;成为了机器学习领域亟待解决的问题。主动学习&#xff08;Active Learning, AL&…

Oracle RMAN 无敌备份脚本

1 说明 上一篇文章&#xff1a;Oracle逻辑备份脚本&#xff0c;介绍了如何部署Oracle数据库的逻辑备份脚本&#xff0c;在数据迁移场景下十分好用&#xff0c;但是作为备份来说有点牵强。仅仅有逻辑备份时&#xff0c;当故障发生后&#xff0c;逻辑备份恢复只能恢复到某一时刻…

网络资源模板--Android Studio 飞机大战游戏

目录 一、项目演示 二、项目测试环境 三、项目详情 四、完整的项目源码 一、项目演示 网络资源模板--飞机大战 二、项目测试环境 三、项目详情 首页 1. **继承 Activity**: - SecondActivity 类继承自 Activity&#xff0c;表示一个新的屏幕或界面。 2. **重写 onCrea…

FLUX.1图像生成模型:AI工程师的实践与探索

文章目录 1 FLUX.1系列模型2 AI工程师的视角3 ComfyUI部署4 FLUX.1部署5 工作流6 面向未来 黑森林实验室&#xff08;Black Forest Labs&#xff09;研发的FLUX.1图像生成模型&#xff0c;以其120亿参数的庞大规模&#xff0c;正在重新定义图像生成技术的新标准。FLUX.1系列模型…