题目
编写程序,给定一个 10 元素的数值向量,提取其第 1 个元素、第 3 个元素、前 4 个元素子集,以及利用关键字 <code>end</code> 提取倒数第 2 个元素与末尾 3 个元素。
输入格式:无需外部输入。
输出格式:依次打印各个提取的子集结果。
数据范围与约定:基础向量索引。
思路与算法
1. 1 起始索引
C/Python 用户极易犯错:Octave / MATLAB 下标严格从 1 开始计起,访问 v(0) 会直接抛出 `Subscript indices must either be real positive integers or logicals` 语法错误。
2. end 动态占位符
索引中 end 表示当前维度的最大长度,end-1 即倒数第二个元素,end-2:end 提取最后三个元素。避免写死常量长度。
3. 切片语法
传入索引向量即可批量取数,如 v([1, 3, 5]) 同时提取离散位置。
完整程序
% Octave / MATLAB 第14题:向量切片与 end 索引
v = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100];
fprintf("原向量 v:\n");
disp(v);
e_first = v(1); % 第 1 个元素
e_third = v(3); % 第 3 个元素
v_head4 = v(1:4); % 前 4 个连续元素
e_penult = v(end - 1); % 倒数第 2 个元素
v_tail3 = v(end-2 : end); % 末尾 3 个元素
fprintf("首元素 v(1) = %d\n", e_first);
fprintf("第3元素 v(3) = %d\n", e_third);
fprintf("前4元素 v(1:4) = %s\n", mat2str(v_head4));
fprintf("倒数第2元素 v(end-1) = %d\n", e_penult);
fprintf("尾部3元素 v(end-2:end) = %s\n", mat2str(v_tail3));运行示例
输出:
原向量 v:
10 20 30 40 50 60 70 80 90 100
首元素 v(1) = 10
第3元素 v(3) = 30
前4元素 v(1:4) = [10 20 30 40]
倒数第2元素 v(end-1) = 90
尾部3元素 v(end-2:end) = [80 90 100]