当前位置: 首页>后端>正文

rust学习-3.1.0-习题前置知识点、循环练习题

字符串切割

fn main() {
    let input = "12 34 25 67";
    let words: Vec<&str> = input.trim().split_whitespace().collect();
    println!("fisrt is {}",words[0]);
    for (i, word) in words.iter().enumerate() {
        println!("input index {} is {}" ,i ,word);
    }
}
  • split_whitespace().collect();通过空格切割字符串,然后转换为Vec<&str>
  • Vec可以理解为一个按顺序存储元素的表,之后再详细讲解,这里只要记住就行
  • words[0],取第一个元素,编程里的顺序是从0开始的。
  • (i, word)这个是元组,enumerate()集合里元素的特别表现形式,包含Vec序号和Vec元素值。

代码运行结果如下:

fisrt is 12
input index 0 is 12
input index 1 is 34
input index 2 is 25
input index 3 is 67

随机数

在Rust中,生成随机数通常涉及使用rand crate。这是一个广泛使用的、社区维护的库,用于生成随机数。首先,你需要在Cargo.toml文件中添加rand依赖项,然后你可以在你的代码中使用它来生成随机数。
以下是如何在Rust程序中使用rand crate生成随机数的步骤:

  1. Cargo.toml中添加rand依赖项:
[dependencies]
rand = "0.8"
  1. 在你的 Rust 代码中导入rand模块并使用它来生成随机数:
use rand::Rng; // 导入Rng trait,它提供了生成随机数的方法
fn main() {
    let mut rng = rand::thread_rng(); // 获取一个随机数生成器
    let number: u32 = rng.gen(); // 生成一个随机u32数字
    println!("Random number: {}", number);
    let number_between_1_and_100: u32 = rng.gen_range(1..=100); // 生成一个1到100之间的随机u32数字
    println!("Random number between 1 and 100: {}", number_between_1_and_100);
}

在这个例子中,rand::thread_rng()函数提供了一个随机数生成器,它是线程局部的,意味着它是安全的并发使用。gen()方法用于生成一个随机u32数字。gen_range()方法允许你指定一个范围,生成该范围内的随机数。

字符串的遍历

在Rust中,无论是String还是&str(字符串切片),都可以使用相同的方法来遍历字符和字节。这里是如何对这两种类型进行遍历的示例:
遍历String中的字符:

fn main() {
    let mut s = String::from("hello world");
    // 遍历字符串中的字符
    for c in s.chars() {
        println!("{}", c);
    }
}

遍历&str(字符串切片)中的字符:

fn main() {
    let s: &str = "hello world";
    // 遍历字符串切片中的字符
    for c in s.chars() {
        println!("{}", c);
    }
}

循环 练习题

  1. 打印1到10的整数:
    使用 for 循环打印从1到10的整数。
  2. 计算阶乘:
    用户输入一个正整数,计算其阶乘。使用 for 循环进行累乘。
  3. 偶数和奇数:
    使用 for 循环遍历1到20的整数,对于每个数,判断它是偶数还是奇数,并打印出来。
  4. 生成斐波那契数列:
    编写一个程序,使用 for 循环生成并打印前20个斐波那契数。
  5. 逆序打印字符串:
    用户输入一个字符串,使用 for 循环逆序打印出它的每个字符。
  6. 寻找最大值:
    使用 for 循环遍历一系列用户输入的整数,并找到最大值。
  7. 简单的猜数字游戏:
    编写一个程序,程序随机生成一个1到100之间的整数,用户有10次机会猜测这个数。对于每次猜测,程序会告诉用户猜的数是太高、太低还是正确。使用 while 循环实现。
  8. 九九乘法表:
    使用嵌套的 for 循环打印九九乘法表。
  9. 质数检测器:
    用户输入一个树,判断它是否是质数。使用 for 循环和 break 语句进行优化。
  10. 生成100以内的素数列表:
    使用 for 循环和 while 循环生成并打印100以内的所有质数。

习题答案

use std::io;
use rand::Rng;
fn main() {
    let number: i32 = get_number_from_input("选择要查看的题目,从1到10:");
    match number {
        1 => practice_loop_statement_01(),
        2 => practice_loop_statement_02(),
        3 => practice_loop_statement_03(),
        4 => practice_loop_statement_04(),
        5 => practice_loop_statement_05(),
        6 => practice_loop_statement_06(),
        7 => practice_loop_statement_07(),
        8 => practice_loop_statement_08(),
        9 => practice_loop_statement_09(),
        10 => practice_loop_statement_10(),
        _ => println!("未知的题目"),
    }
}
/*
1打印1到10的整数:
使用 for 循环打印从1到10的整数。
*/
fn practice_loop_statement_01(){
    println!("1到10的整数。");
    for i in 1..=10{
        println!("{}",i);
    }
}
//  用户输入一个正整数,计算其阶乘。使用 `for` 循环进行累乘。
fn practice_loop_statement_02(){
    let number: i32 = get_number_from_input("请输入一个正整数,我将计算阶乘");
    if number > 0{
        let mut result = 1;
        for i in 1..=number {
            result*=i;
        }
        println!("1*2*3*...{} = {}",number,result );
    }else {
        println!("非法输入");
    }
}
//使用 for 循环遍历1到20的整数,对于每个数,判断它是偶数还是奇数,并打印出来。
fn practice_loop_statement_03(){
    for i in 1..=20 {
        if i%2==1{
            println!("{}是奇数", i);
        }else{
            println!("{}是偶数", i);
        }
    }
}
//编写一个程序,使用 for 循环生成并打印前20个斐波那契数。
fn practice_loop_statement_04(){
    let mut first = 1;
    let mut second = 1;
    println!("{}", first);
    println!("{}", second);
    let mut temp ;
    for _i in 3..=20 {
        temp = first + second;
        first = second;
        second = temp;
        println!("{}",second );
    }
}
//接受一个字符串,并使用 for 循环逆序打印出它的每个字符。
fn practice_loop_statement_05(){
    let str: String = get_input_str("请输入一个串字符");
    let trimed = str.trim();
    let mut index:usize = trimed.len()  -1;
    loop {
        println!("{}", &trimed[index..index+1]);
        if index == 0{
            break;
        }
        index -=1;
    }
    
}
//从一系列用户输入的整数,并找到最大值。
fn practice_loop_statement_06(){
    println!("请连续输入一系列的整数,用空格隔开");
    let input  = get_input_str("格式如:`12 23 34`");  
    let words: Vec<&str> = input.trim().split_whitespace().collect();
    let mut max = words[0].parse::<i32>().expect("不是整数");
    for  word in words.iter(){
        let num = word.parse::<i32>().expect("不是整数");
        if num > max {
            max = num;
        }
    }
    println!("最大值是 {}", max);
    

}
//编写一个程序,程序随机生成一个1到100之间的整数,用户有10次机会猜测这个数。
//对于每次猜测,程序会告诉用户猜的数是太高、太低还是正确。
fn practice_loop_statement_07(){
    let mut rng = rand::thread_rng(); // 获取一个随机数生成器
    let rand_num: u32 = rng.gen_range(1..=100); 
    for _i in 1..=10{
        let str = get_input_str("请输入一个1-100之间的整数");
        let number = str.trim().parse::<u32>().expect("不是正整数");
        if number <1 || number >100{
            println!("不是1-100之间,结束游戏");
            break;
        }
        if rand_num > number{
            println!("小了");
        }else if rand_num < number{
            println!("大了");
        }else {
            println!("恭喜,猜中了");
            break;
        }

    }
}
//使用嵌套的 for 循环打印九九乘法表。
fn practice_loop_statement_08(){
    let mut result = String::new();
    for i in 1..=9 {
        for j in 1..=9 {
            if j > i{
                continue;
            }
            result += &format!("{} * {} = {}  ", j,i,i*j);
        }
        result += "\n";
    }
    println!("{}",result );
}
//用户输入一个正整数,并判断它是否是质数。
fn practice_loop_statement_09(){
    let number: i32 = get_number_from_input("请输入一个正整数");
    if number<=0 {
        println!("不是正整数");
        return;
    }
    for i in 2..number{
        if number % i == 0{
            println!("不是质数");
            return;
        }
    }
    println!("是质数");
}
// 100以内所有的质数
fn practice_loop_statement_10 (){
    for i in 2..100 {
        let mut is_prime =true;
        for j in 2..i{
            if i % j == 0{
                is_prime = false;
                break ;
            }
        }
        if is_prime {
            println!("{}是质数",i);
        }
    }
}

https://www.xamrdz.com/backend/38z1926059.html

相关文章: