96 lines
2.0 KiB
Plaintext
96 lines
2.0 KiB
Plaintext
/* ===== 模块8:综合 =====
|
||
* test17_integration — 综合测试
|
||
* 难度:3/5
|
||
* 验证点:多特性组合——指针 + 结构体 + 函数 + 循环 + 数组 + 切片
|
||
*/
|
||
#[extern("vm")] fn vm_printf(fmt: *u8, ...) void;
|
||
|
||
type Point = struct {
|
||
x: i32,
|
||
y: i32,
|
||
}
|
||
|
||
/* 计算点积 */
|
||
fn dot(a: *Point, b: *Point) i32 {
|
||
ret a.x * b.x + a.y * b.y;
|
||
}
|
||
|
||
/* 递归斐波那契 */
|
||
fn fib(n: i32) i32 {
|
||
if n <= 1 { ret n; }
|
||
ret fib(n - 1) + fib(n - 2);
|
||
}
|
||
|
||
fn main() i32 {
|
||
/* 综合:指针 + 结构体 + 函数 */
|
||
var p1: Point;
|
||
p1.x = 3;
|
||
p1.y = 4;
|
||
|
||
var p2: Point;
|
||
p2.x = 5;
|
||
p2.y = 6;
|
||
|
||
var d := dot(&p1, &p2);
|
||
/* 3*5 + 4*6 = 15 + 24 = 39 */
|
||
if d != 39 { ret 1; }
|
||
|
||
/* 综合:数组 + while 循环 */
|
||
var arr: [5]i32 = [5]i32{1, 2, 3, 4, 5};
|
||
var sum: i32 = 0;
|
||
var i: i32 = 0;
|
||
while i < 5 {
|
||
sum = sum + arr[i];
|
||
i = i + 1;
|
||
}
|
||
if sum != 15 { ret 2; }
|
||
|
||
/* 综合:切片 + for */
|
||
var sl: []i32 = arr[1..4];
|
||
var sl_sum: i32 = 0;
|
||
for sl as val {
|
||
sl_sum = sl_sum + val;
|
||
}
|
||
if sl_sum != 9 { ret 3; } /* 2+3+4 */
|
||
|
||
/* 综合:递归 */
|
||
var f := fib(10);
|
||
if f != 55 { ret 4; }
|
||
|
||
/* 综合:loop/break/continue */
|
||
var n: i32 = 0;
|
||
var count: i32 = 0;
|
||
loop {
|
||
n = n + 1;
|
||
if n == 2 { continue; }
|
||
count = count + 1;
|
||
if n >= 5 { break; }
|
||
}
|
||
/* 执行 n=1,3,4,5 共 4 次 (n=2 被 continue) */
|
||
if count != 4 { ret 5; }
|
||
|
||
/* 综合:指针修改结构体 */
|
||
var pp: *Point = &p1;
|
||
pp.x = 10;
|
||
pp.y = 20;
|
||
if p1.x != 10 { ret 6; }
|
||
if p1.y != 20 { ret 7; }
|
||
|
||
/* 综合:嵌套控制流 */
|
||
var mat: [3]i32 = [3]i32{1, 2, 3};
|
||
var outer_sum: i32 = 0;
|
||
var j: i32 = 0;
|
||
while j < 3 {
|
||
var k: i32 = 0;
|
||
while k < 3 {
|
||
if mat[j] > mat[k] {
|
||
outer_sum = outer_sum + 1;
|
||
}
|
||
k = k + 1;
|
||
}
|
||
j = j + 1;
|
||
}
|
||
if outer_sum != 3 { ret 8; }
|
||
ret 0;
|
||
}
|