题目

编写程序,给定一个 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]