Rust学习Day3: 3个小demo实现

Rust学习Day3: 3个小demo实现

实操1:相互转换摄氏与华氏温度

转换公式:

摄氏转华氏温度公式: x * 9.0 / 5.0 + 32.0,华氏温度转摄氏反之
用到的功能点:

  1. 函数fn
  2. 定义变量: let mut x = String::new()
  3. 读取输入:
rust 复制代码
use std::io;
// 读取
io:stdin().read_line(&mut x).expect("读取失败");
  1. 字符串转浮点数
rust 复制代码
let x: f64 = match x.trim().parse(){
	Ok(num) => num,
	Err(_) => {
		println!("请输入一个有效的数字!")
		return;
	}
}

实现代码:

rust 复制代码
use std::io; // 标准库导入

fn main() {
    println!("摄氏与华氏温度转换");

    // 输入摄氏温度
    println!("请输入摄氏温度:");
    let mut celsius_input = String::new();
    // 从标准输入读取摄氏温度
    io::stdin()
        .read_line(&mut celsius_input)
        .expect("读取输入失败");
    // 输出读取的值
    println!("您输入的摄氏温度是:{}", celsius_input.trim());

    // 将输入的字符串转换为浮点数
    let celsius: f64 = match celsius_input.trim().parse(){
        Ok(num) => num,
        Err(_) => {
            println!("请输入一个有效的数字!");
            return;
        }
    };
    // 调用转换函数
    let fahrenheit = celsius_to_fahrenheit(celsius);
    // 输出转换结果
    println!("对应的华氏温度是:{:.2}", fahrenheit);


    // 输入华氏温度
    println!("请输入华氏温度:");
    let mut fahrenheit_input = String::new();
    // 从标准输入读取华氏温度
    io::stdin()
        .read_line(&mut fahrenheit_input)
        .expect("读取输入失败");
    // 输出读取的值
    println!("您输入的华氏温度是:{}", fahrenheit_input.trim());
    // 将输入的字符串转换为浮点数
    let fahrenheit: f64 = match fahrenheit_input.trim().parse(){
        Ok(num) => num,
        Err(_) => {
            println!("请输入一个有效的数字!");
            return;
        }
    };
    // 调用转换函数
    let celsius = fahrenheit_to_celsius(fahrenheit);
    // 输出转换结果
    println!("对应的摄氏温度是:{:.2}", celsius);
}

// 摄氏度转华氏度函数
fn celsius_to_fahrenheit(celsius: f64) -> f64 {
    celsius * 9.0 / 5.0 + 32.0
}

// 华氏度转摄氏度函数
fn fahrenheit_to_celsius(fahrenheit: f64) -> f64 {
    (fahrenheit - 32.0) * 5.0 / 9.0
}

实操2:生成第n个的斐波那契数

定义: 斐波那契数列是一列整数,通常定义为:F(0)=0,F(1)=1,对 n>=2,F(n)=F(n-1)+F(n-2)。序列开始为 0,1,1,2,3,5,8,...

实现代码:

rust 复制代码
use std::io; // 标准库

fn main() {
    println!("生成第n个斐波那契数");
    println!("定义:斐波那契数列是一列整数,通常定义为:F(0)=0,F(1)=1,对 n>=2,F(n)=F(n-1)+F(n-2)。序列开始为 0,1,1,2,3,5,8,...");

    println!("请输入n(最大1000):");
    let mut input = String::new(); // 创建一个可变的字符串变量来存

    // 读取输入的数字
    io::stdin()
        .read_line(&mut input)
        .expect("读取输入失败");

    // 将输入的字符串转为整数
    let n: u64 = match input.trim().parse(){
        Ok(num) => num,
        Err(_) => {
            println!("请输入一个有效的整数");
            return;
        }
    };

    // 输出接收到的值
    println!("你输入的n是:{}", n);

    // 调用函数
    let result = fibonacci(n);
    println!("第{}个斐波那契数是: {}", n, result);

}

// 定义处理的方法
fn fibonacci(n: u64) -> u128 {
    if n == 0 {
        return 0;
    } else if n == 1 {
        return 1;
    } else {
        return fibonacci(n - 1) + fibonacci(n - 2);
    }
}

实操3:输出圣诞歌

rust 复制代码
fn main() {
    println!("打印圣诞颂歌");
    // 定义一个数组
    let ordinals = ["first", "second", "third", "fourth", "fifth", "sixth",
        "seventh", "eighth", "ninth", "tenth", "eleventh", "twelfth"];

    let gifts = [
        "a Partridge in a Pear Tree.",
        "Two Turtle Doves,",
        "Three French Hens,",
        "Four Calling Birds,",
        "Five Gold Rings,",
        "Six Geese a-Laying,",
        "Seven Swans a-Swimming,",
        "Eight Maids a-Milking,",
        "Nine Ladies Dancing,",
        "Ten Lords a-Leaping,",
        "Eleven Pipers Piping,",
        "Twelve Drummers Drumming,"
    ];

    // 循环拼接歌词
    for day in 0..12 {
        println!("On the {{ordinals[day]}} day of Christmas my true love sent to me:");
        for i in (0..day).rev(){ // 倒序输出
            if i == 0 && day > 1{
                println!("and {}", gifts[0])
            } else {
                println!("{}", gifts[i])
            }
        }
    }
    println!();
}

本人正在参考官方文档学习这门语言,如果有描述错误的,欢迎各位RUST大神指出;

相关推荐
咩咩啃树皮6 小时前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
鱟鲥鳚7 小时前
Spring Boot 集成 LangChain4j:从模型调用到 Tool Calling(Demo版)
java·spring boot
世人万千丶8 小时前
参数管理_Flutter在鸿蒙平台路由参数最佳实践
学习·flutter·华为·harmonyos·鸿蒙
大模型码小白8 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
腾渊信息科技公司9 小时前
Spring Boot对接MES实战:视觉检测数据自动同步方案
java·人工智能·spring boot·后端·计算机视觉·ai·软件需求
爱笑的源码基地10 小时前
高并发 Redis 缓存门诊HIS系统源码,含财务统计药房进销存
java·程序·门诊系统·诊所系统·云诊所源码
wuqingshun31415910 小时前
TCP超时重传机制是为了解决什么问题?
java
段一凡-华北理工大学10 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
遇乐的果园11 小时前
前端学习笔记-vue加载渲染优化
前端·笔记·学习
遇乐的果园12 小时前
前端学习笔记-vue状态管理优化
前端·笔记·学习