首页 > 其他分享 >rust学习四、控制语句

rust学习四、控制语句

时间:2024-11-04 09:08:29浏览次数:1  
标签:语句 mut age 学习 u32 println total rust

rust的控制语句和大部分语言没有什么区别,都是熟悉的for,while,loop,if。

比较不同的是,在绝大部分非常流行的语言中都有的switch,rust是没有的。

诸如c/c++,java,javascript,c#。连PL/SQL都有case when语句。

 

一、基本的for、while、if,loop

示例-for,while,loop,if

/**
  学习控制流
  条件  if
  循环  for,loop,while
       注意:for有各种各样的实现方式
*/
use std::io;

fn main() {
    println!("请输入你的年龄");
    let mut age = String::new();
    io::stdin().read_line(&mut age).expect("读取失败");
    let age: u32 = age.trim().parse().expect("请输入一个数字");

    let mut desc = String::new();
    let mut total: u32 = 0;

    //1.0 测试 if ,else if
    if (age < 20) {
        println!("你是{}岁,还年轻", age);
        total = cal_young(age);
    } else if (age < 70) {
        println!("你是{}岁,正当壮年,是国家和家庭栋梁", age);
        total = cal_strong(age);
    } else {
        println!("你是{}岁!老骥伏枥,志在千里;壮士暮年,烈心不已", age);
        total = cal_old(age);
    }

    //1.1 测试if 条件表达式赋值
    //rust的函数和许多语句中,如果最后一个语句不带分号,往往表示返回值

    desc = if age < 70 {
        "壮年".to_string()
    } else {
        "老年".to_string()
    };
    println!("{}岁,属于{}", age, desc);

    println!("总数={}", total);

    //for 循环比较多实现方式
    // a. in [] array  ,例如  in [1,2,3]
    // b. in range   ,例如  in (1..10),但10不在内
    if (age <= 50) {
        let fib: u32 = calFb(age);
        println!("{}的斐波那契值={}", age, fib);
    }

    test_for_with_array();
    test_for_with_tuple();
}

//for循环-数组
fn test_for_with_array() {
    println!("for遍历数组");
    for i in [1, 2, 3, 10] {
        println!("数组元素:{}", i);
    }
}

//for循环-元组,..
//使用..的时候,两边带不带()都是一样的。带()主要是为了构建一个对象,便于左其它操作
fn test_for_with_tuple() {
    for i in (1..5) {
        println!("{}", i);
    }
    for i in 6..10 {
        println!("{}", i);
    }
    //倒数
    //
    for i in (1..10).rev() {
        println!("倒数:{}", i);
    }
}

fn cal_young(a: u32) -> u32 {
    let mut total: u32 = 0;
    //测试for循环
    //注意 写成 n..m 那么上限是不会计算在内的
    for i in 1..a + 1 {
        total += i;
    }
    return total;
}

fn cal_strong(a: u32) -> u32 {
    let mut i = 0;
    let mut total: u32 = 0;
    //测试loop,必须内部加break;
    loop {
        i = i + 1;
        total = total + i;
        if (i == a) {
            break;
        }
    }
    return total;
}

fn cal_old(a: u32) -> u32 {
    let mut total: u32 = 0;
    let mut i = 0;
    //测试while
    while i < a {
        i = i + 1;
        total = total + i;
    }
    return total;
}
/**
 计算斐波那契,但是这个不要用于计算太大的值,因为这个递归算法极其低效
 计算50以内还马马虎虎
 注意:如果有错误,那么非蛇形的命名方式会被编译器提示出来
*/
fn calFb(n: u32) -> u32 {
    if (n == 1) {
        return 1;
    } else if (n == 2) {
        return 1;
    } else {
        return calFb(n - 1) + calFb(n - 2);
    }
}

 这其中for的格式比较多,许多语言都有这种现象,例如JAVA。

二、rust的for可以的格式

for i in n.m   使用它使用 std::iter::Rangestd::iter::RangeInclusive 迭代器

for i in (n..m).rev()

for i in [x,y,z]

其它还有基于map,向量,枚举的便捷方式这些对象元素的方式

对于map,向量、枚举的,后续补充例子。

三、match而不是switch

在有关书籍中,第一个例子就有match。

match guess.cmp(&secret_str){
            Ordering::Less => println!("偏小"),
            Ordering::Greater => println!("偏大"),
            Ordering::Equal => {println!("恭喜,你赢了!你总共花费了{}次",try_times);is_ok=true;}
};

按照文档的描述,rust的match是一个比较奇特的东西。

match和JAVA17以上的switch还是有一定相似度的,也不知道谁抄谁。

在rust的书本上<<Rust权威指南>>把match吹了一番。

闲话少扯,还是先掌握match的一些基本内容吧。

四、小结

和大部分语言差不多,rust的控制结构没有特别的,这很好,因为它奇怪的语法已经够多了。

和现代大部分的语言语言一样,rust也力图让for循环变得更加方便一些。

 

标签:语句,mut,age,学习,u32,println,total,rust
From: https://www.cnblogs.com/lzfhope/p/18513918

相关文章

  • FFT学习笔记
    $\quad$本人蒟蒻,只能介绍FFT在OI中的应用,如有错误或不当之处还请指出。$\quad$首先先说一下那一堆什么什么\(TT\)的都是什么DET:离散傅里叶变换用于求多项式乘法\(O(n^2)\)FFT:快速傅里叶变换用于求多项式乘法\(O(nlog(n))\)FNTT/NTT:FTT的优化,常数及精度更优FWT......
  • 【开题报告】基于Springboot+vue中华汉字学习平台(程序+源码+论文) 计算机毕业设计
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在全球化日益加深的今天,中华汉字作为中华文化的瑰宝,其学习与研究的重要性愈发凸显。然而,当前汉字学习的方式仍较为传统,主要依赖于纸质教材和教师面授,......
  • 学期 2024-2025-1 学号 20241403 《计算机基础与程序设计》第六周学习总结
    学期(如2024-2025-1)学号(如:20241403)《计算机基础与程序设计》第六周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2024-2025-1计算机基础与程序设计第一周作业)这个作业的目标Polya......
  • 2024-2025-1 20241411王思棋计算机基础与程序设计第6周学习总结
    |这个作业属于哪个课程|https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP||-- |-- ||这个作业要求在哪里|https://www.cnblogs.com/rocedu/p/9577842.html#WEEK06||这个作业的目标|Polya如何解决问题、简单类型与组合类型、复合数据结构、查找与排序算法、算法复杂......
  • matlab学习笔记:第四章程序流程控制(总)
    4.1条件语句 4.1.1if-elseif-else-end语句易错点:elseif关键字中间不能加空格,不能写成elseif,这和C、Java等语言不同。注意:在使用if语句时,if和end这两个关键字是无论如何都不能省略的。而elseif和else可以根据自己的需要来决定是否添加。如果if和elseif后面表达式的计算结......
  • 11.03学习
    一、主函数和exit函数主函数( main 函数)1. 入口点: main 函数是C程序的入口点,程序执行从这里开始。2. 返回类型: main 函数可以返回 int 类型,也可以返回 void 类型。但在现代C语言标准(C99及以后)中,推荐使用 int 类型。3. 参数: main 函数可以接受两个参数,通常......
  • 2024-2025-1 20241304 《计算机基础与程序设计》第6周学习总结
    2024-2025-120241304《计算机基础与程序设计》第6周学习总结作业信息|这个作业属于哪个课程|<[2024-2025-1-计算机基础与程序设计](https://www.cnblogs.com/rocedu/p/9577842.html#WEEK05)|>|-- |-- ||这个作业要求在哪里|<作业要求的链接>(如2024-2025-1计算机基础与程序设......
  • 学期2024-2025-1 学号20241424 《计算机基础与程序设计》第7周学习总结
    学期2024-2025-1学号20241424《计算机基础与程序设计》第7周学习总结作业信息|这个作业属于2024-2025-1-计算机基础与程序设计)||-- |-- ||这个作业要求在哪里|https://www.cnblogs.com/rocedu/p/9577842.html#WEEK01||这个作业的目标|参考上面的学习总结模板,把学习过程通过......
  • 2024-2025-1 20241327 《计算机基础与程序设计》 第六周学习总结
    作业信息|2024-2025-1-计算机基础与程序设计)||--|-|2024-2025-1计算机基础与程序设计第六周作业)||快速浏览一遍教材计算机科学概论(第七版),课本每章提出至少一个自己不懂的或最想解决的问题并在期末回答这些问题|作业正文|https://www.cnblogs.com/shr060414/p/18440575|教......
  • 冲一区!双重分解+粒子群优化+深度学习多元时序预测!CEEMDAN-Kmeans-VMD-PSO-Transformer
    目录效果一览基本介绍程序设计参考资料效果一览基本介绍1.Matlab实现CEEMDAN-Kmeans-VMD-PSO-Transformer融合K均值聚类的数据双重分解+粒子群优化+Transformer多元时间序列预测(完整源码和数据)运行环境Matlab2023b及以上。2.CEEMDAN分解,计算样本......