题目
编写程序,创建一个容纳不同数据类型(浮点数、文本字符串、3×3矩阵)的元胞数组(Cell Array)。深入对比使用圆括号 <code>()</code>(取容器子元胞)与大括号 <code>{}</code>(取容器内实际数据内容)的根本差异。
输入格式:无需外部输入。
输出格式:展示元胞定义、两种索引方式返回的变量类型与内容。
数据范围与约定:元胞数组索引。
思路与算法
1. 元胞数组(Cell Array)的价值
普通矩阵要求所有元素数据类型与形状必须完全一致;而 cell 相当于杂物箱,每个格子可以装不同类型、不同尺寸的对象。
2. 圆括号与花括号的核心区别C(1) 返回的是一个 $1 \times 1$ 的元胞子集(包装盒依然在);C{1} 则拆开包装盒,直接拿出里面存放的真实数据对象。
3. 赋值规则
存入数据用 C{i} = data。
完整程序
% Octave / MATLAB 第74题:元胞数组与花括号索引
% 构造包含不同类型的元胞
C = {42, "Signal_A", eye(2)};
fprintf("元胞数组整体结构:\n");
disp(C);
% 1. 圆括号索引 (依然是元胞)
cell_box = C(2);
fprintf("C(2) 的数据类型: %s (依然是元胞容器)\n", class(cell_box));
% 2. 花括号索引 (拆包拿到里面的真实数据)
str_content = C{2};
fprintf("C{2} 的数据类型: %s (真实字符串)\n", class(str_content));
% 3. 提取第 3 个格子里的矩阵并做运算
mat_content = C{3};
fprintf("\n提取 C{3} 中的 2x2 矩阵并乘以 5:\n");
disp(mat_content * 5);运行示例
输出:
元胞数组整体结构:
{
[1,1] = 42
[1,2] = Signal_A
[1,3] =
Diagonal Matrix
1 0
0 1
}
C(2) 的数据类型: cell (依然是元胞容器)
C{2} 的数据类型: char (真实字符串)
提取 C{3} 中的 2x2 矩阵并乘以 5:
Diagonal Matrix
5 0
0 5