feat(main): 添加复合类型、函数和控制流示例

- 在ex2_scalar_types中添加布尔类型变量
- 在ex3_compound_types中添加数组遍历示例
- 实现ex4_functions中的数学运算函数(加法、阶乘、奇偶判断)
- 添加ex5_control_flow中的条件判断和fizzbuzz逻辑
- 实现ex6_loops中的各种循环结构(loop、while、for)
- 添加mini_guessing_game猜数字小游戏
- 实现count_letters字母统计功能
- 注释掉部分练习函数,启用新的练习内容
This commit is contained in:
Yuhang Wu 2026-07-10 15:39:12 +08:00
parent 73e25a8e12
commit e70182aaee
2 changed files with 112 additions and 11 deletions

View File

@ -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);
}

7
part3/Cargo.lock generated Normal file
View File

@ -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"