diff --git a/part2/src/main.rs b/part2/src/main.rs index e89a31a..70c4144 100644 --- a/part2/src/main.rs +++ b/part2/src/main.rs @@ -8,7 +8,12 @@ fn main() { println!("Hello, world!"); // ex1_variables(); // ex2_scalar_types(); - ex3_compound_types(); + // ex3_compound_types(); + // ex4_functions(); + // ex5_control_flow(); + // ex6_loops(); + mini_guessing_game(); + // ex8_stats(); } // ============================================================ @@ -52,6 +57,7 @@ fn ex2_scalar_types() { let u8_var: u8 = 42; let i32_var: i32 = 128; let f64_var: f64 = 3.14; + let bool_var: bool = true; let char_var = '2'; println!("u8 as i32: {}", u8_var as i32); @@ -83,6 +89,12 @@ fn ex3_compound_types() { let b1 = tup.1; let c1 = tup.2; println!("tup: {}, {}, {}", a1, b1, c1); + let arr: [i32; 5] = [1, 2, 3, 4, 5]; + for i in 0..arr.len() { + println!("arr[{}]: {}", i, arr[i]); + } + println!("arr length: {}", arr.len()); + // arr[10]; error: index out of bounds: the len is 5 but the index is 10 } // ============================================================ @@ -95,29 +107,35 @@ fn ex3_compound_types() { // 4. 写一个无返回值的函数 greet(name: &str),打印 "你好,{name}!"。 #[allow(dead_code)] fn add(a: i32, b: i32) -> i32 { - // TODO - 0 + a + b } #[allow(dead_code)] fn factorial(n: u32) -> u32 { - // TODO - 0 + let mut result = 1; + for i in 1..=n { + result *= i; + } + result } #[allow(dead_code)] fn is_even(n: i32) -> bool { - // TODO - false + n % 2 == 0 } #[allow(dead_code)] fn greet(name: &str) { // TODO + println!("你好,{}!", name) } fn ex4_functions() { // 在这里调用上面四个函数进行测试 + println!("add(1, 2): {}", add(1, 2)); + println!("factorial(5): {}", factorial(5)); + println!("is_even(5): {}", is_even(5)); + greet("Rust"); } // ============================================================ @@ -132,17 +150,43 @@ fn ex4_functions() { // 根据一个 bool 变量给另一个变量赋不同的值。 #[allow(dead_code)] fn grade(score: u32) -> &'static str { - // TODO - "F" + let mut x = ""; + if score >= 90 && score <= 100 { + x = "A"; + } else if score >= 80 && score < 90 { + x = "B"; + } else if score >= 70 && score < 80 { + x = "C"; + } else if score >= 60 && score < 70 { + x = "D"; + } else { + x = "F"; + }; + return x; } #[allow(dead_code)] fn fizzbuzz(n: u32) { - // TODO + for i in (1..=n) { + if i % 3 == 0 && i % 5 == 0 { + println!("FizzBuzz") + } else if i % 3 == 0 { + println!("Fizz") + } else if i % 5 == 0 { + println!("Buzz") + } else { + println!("{}", i) + } + } } fn ex5_control_flow() { // 在这里测试 + let score = 89; + let condition = true; + let n = if condition { 100 } else { 50 }; + println!("grade:{}", grade(score)); + fizzbuzz(n); } // ============================================================ @@ -157,6 +201,31 @@ fn ex5_control_flow() { #[allow(dead_code)] fn ex6_loops() { // TODO: 在这里写你的代码 + let mut sum = 0; + let mut i = 1; + let result = loop { + sum += i; + if i == 100 { + break sum; + }; + i += 1; + }; + println!("sum: {}", result); + + let mut i = 10; + while i > 0 { + println!("倒数: {}", i); + i -= 1; + } + + let arr = [10, 20, 30, 40, 50]; + for (i, item) in arr.iter().enumerate() { + println!("index: {}, value: {}", i, item); + } + + for i in 1..=5 { + println!("{} 的平方是 {}", i, i * i); + } } // ============================================================ @@ -173,6 +242,19 @@ fn ex6_loops() { #[allow(dead_code)] fn mini_guessing_game() { // TODO: 在这里写你的代码 + let secret_number = 62; + let guesses: [i32; 5] = [10, 50, 35, 60, 42]; + + for (i, guess) in guesses.iter().enumerate() { + if guess < &secret_number { + println!("第{}次猜测,{} 太小了!", i + 1, guess); + } else if guess > &secret_number { + println!("第{}次猜测,{} 太大了!", i + 1, guess); + } else { + println!("第{}次猜测,{} 猜对了!", i + 1, guess); + break; + }; + } } // ============================================================ @@ -186,9 +268,21 @@ fn mini_guessing_game() { #[allow(dead_code)] fn count_letters(s: &str) -> (u32, u32) { // TODO - (0, 0) + let chars = s.chars(); + let tup: (u32, u32) = (0, 0); + let (mut upper, mut lower) = tup; + for c in chars { + if c.is_uppercase() { + upper += 1; + } else if c.is_lowercase() { + lower += 1; + } + } + (upper, lower) } fn ex8_stats() { // 在这里测试 count_letters + let (upper, lower) = count_letters("Hello, World!"); + println!("大写字母数量:{},小写字母数量:{}", upper, lower); } diff --git a/part3/Cargo.lock b/part3/Cargo.lock new file mode 100644 index 0000000..83d5e4e --- /dev/null +++ b/part3/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "part3" +version = "0.1.0"