MATLAB作为工程计算领域的核心工具,输入输出(I/O)是其基础且高频使用的功能。本文详细讲解MATLAB中最常用的input()、disp()、fprintf()三个I/O函数的语法、用法差异及实战场景,内容覆盖新手入门到进阶应用,帮助快速掌握MATLAB数据交互核心技能。
一、input()函数:从控制台获取用户输入
input()是MATLAB中接收用户手动输入的核心函数,能读取数值、字符串、矩阵等多种类型数据,是交互式程序的基础。
1. 基本语法
matlab
变量 = input(提示信息); % 读取数值/矩阵类型输入
变量 = input(提示信息, 's'); % 强制读取字符串类型输入
2. 核心用法示例
示例1:读取数值输入
matlab
% 读取单个数值
age = input('请输入你的年龄:');
disp(['你的年龄是:', num2str(age)]);
% 读取矩阵输入
matrix = input('请输入一个2x2矩阵(如[1 2;3 4]):');
disp('你输入的矩阵是:');
disp(matrix);
运行效果:
css
请输入你的年龄:25
你的年龄是:25
请输入一个2x2矩阵(如[1 2;3 4]):[1 2;3 4]
你输入的矩阵是:
1 2
3 4
示例2:读取字符串输入
若直接使用input()读取字符串(如姓名),不加s参数会报错,需指定s参数:
matlab
% 错误用法(会报错)
% name = input('请输入你的姓名:');
% 正确用法
name = input('请输入你的姓名:', 's');
disp(['你好,', name, '!']);
运行效果:
请输入你的姓名:张三
你好,张三!
3. 注意事项
-
输入数值时,可直接输入整数、小数、科学计数法(如
1.2e3); -
输入矩阵时,需遵循MATLAB矩阵语法(方括号包裹,行内元素用空格/逗号分隔,行之间用分号分隔);
-
若用户仅按回车,
input()会返回空矩阵,可结合isempty()做输入校验:matlabnum = input('请输入一个数字:'); if isempty(num) disp('错误:未输入任何内容!'); end
二、disp()函数:简洁的控制台输出
disp()是MATLAB最基础的输出函数,特点是简洁、无格式符、直接输出内容,适合快速展示变量或文本。
1. 基本语法
matlab
disp(输出内容); % 输出内容可为字符串、数值、矩阵、单元格数组等
2. 核心用法示例
示例1:输出字符串和数值
matlab
% 输出纯文本
disp('MATLAB输入输出教程');
% 输出数值变量
score = 95.5;
disp(score); % 直接输出95.5
% 拼接字符串+数值(需用num2str转换数值)
disp(['数学成绩:', num2str(score)]);
运行效果:
MATLAB输入输出教程
95.5000
数学成绩:95.5
示例2:输出矩阵和单元格数组
matlab
% 输出矩阵
A = [1 2 3;4 5 6];
disp('矩阵A:');
disp(A);
% 输出单元格数组
info = {'姓名', '年龄'; '李四', 30};
disp('个人信息:');
disp(info);
运行效果:
arduino
矩阵A:
1 2 3
4 5 6
个人信息:
{'姓名'} {'年龄'}
{'李四'} {[30]}
3. 优势与局限
- 优势:语法简单、执行速度快,无需记忆格式符,适合快速调试;
- 局限:无法自定义输出格式(如保留小数位数、对齐方式),无法同时输出多个不同类型变量(需手动拼接)。
三、fprintf()函数:格式化输出(进阶核心)
fprintf()是MATLAB功能最强大的输出函数,支持自定义格式(小数位数、对齐、进制转换),既可输出到控制台,也可写入文件,是工程应用中最常用的输出方式。
1. 基本语法
matlab
% 输出到控制台
fprintf(格式字符串, 变量1, 变量2, ...);
% 写入文件(需先打开文件)
fid = fopen('文件名.txt', 'w'); % 打开文件,w=写入模式
fprintf(fid, 格式字符串, 变量1, 变量2, ...);
fclose(fid); % 关闭文件
2. 核心格式符(必背)
| 格式符 | 说明 | 示例 |
|---|---|---|
| %d | 整数(十进制) | fprintf('%d', 123) → 123 |
| %f | 浮点数 | fprintf('%f', 3.14) → 3.140000 |
| %.2f | 保留2位小数的浮点数 | fprintf('%.2f', 3.1415) → 3.14 |
| %s | 字符串 | fprintf('%s', 'MATLAB') → MATLAB |
| %e | 科学计数法 | fprintf('%e', 123) → 1.230000e+02 |
| \n | 换行符 | fprintf('第一行\n第二行') → 分行输出 |
| \t | 制表符(缩进) | fprintf('列1\t列2') → 列1 列2 |
3. 核心用法示例
示例1:基础格式化输出
matlab
% 保留小数位数
pi_val = pi;
fprintf('圆周率π保留3位小数:%.3f\n', pi_val); % 输出:圆周率π保留3位小数:3.142
% 整数+字符串组合输出
id = 1001;
name = '王五';
fprintf('学号:%d,姓名:%s\n', id, name); % 输出:学号:1001,姓名:王五
% 科学计数法输出
num = 12345.6789;
fprintf('科学计数法:%e\n', num); % 输出:科学计数法:1.234568e+04
示例2:输出矩阵(按列遍历)
fprintf()处理矩阵时默认按列遍历,需结合循环控制输出格式:
matlab
B = [1 2 3;4 5 6];
fprintf('矩阵B的元素:\n');
% 按行输出矩阵
for i = 1:size(B,1)
fprintf('%d\t%d\t%d\n', B(i,:));
end
运行效果:
css
矩阵B的元素:
1 2 3
4 5 6
示例3:写入文件
matlab
% 打开文件(不存在则创建,存在则覆盖)
fid = fopen('data.txt', 'w');
if fid == -1 % 校验文件是否成功打开
disp('文件打开失败!');
else
fprintf(fid, '数值\t平方值\n'); % 写入表头
for x = 1:5
fprintf(fid, '%d\t%d\n', x, x^2); % 写入数据
end
fclose(fid); % 必须关闭文件
disp('数据已写入data.txt!');
end
生成的data.txt内容:
数值 平方值
1 1
2 4
3 9
4 16
5 25
4. 注意事项
- 格式符数量需与变量数量匹配,否则会重复输出或报错;
- 输出矩阵时需注意"按列遍历"的特性,避免输出顺序混乱;
- 写入文件后必须用
fclose(fid)关闭文件,否则数据可能丢失; - 追加写入文件可将
fopen的模式改为'a'(append)。
四、三大函数对比与场景选择
| 函数 | 核心优势 | 适用场景 | 缺点 |
|---|---|---|---|
| input() | 接收用户交互式输入 | 需手动输入参数的交互式程序 | 仅用于输入,无输出功能 |
| disp() | 语法简单、输出快速 | 快速调试、简单文本/数值展示 | 无格式化能力,拼接复杂 |
| fprintf() | 自定义格式、支持文件写入 | 工程报告输出、数据保存、格式规整 | 语法稍复杂,需记忆格式符 |
选择建议:
- 快速看变量值 → 用
disp(); - 需自定义格式(保留小数、对齐、写入文件)→ 用
fprintf(); - 需用户手动输入数据 → 用
input(); - 交互式程序 →
input()+fprintf()组合使用。
五、实战案例:综合应用
以下案例实现"输入学生信息 → 计算平均分 → 格式化输出并保存到文件":
matlab
% 1. 接收用户输入
name = input('请输入学生姓名:', 's');
chinese = input('请输入语文成绩:');
math = input('请输入数学成绩:');
english = input('请输入英语成绩:');
% 2. 计算平均分
avg_score = (chinese + math + english)/3;
% 3. 控制台格式化输出
fprintf('\n=== 学生成绩报告 ===\n');
fprintf('姓名:%s\n', name);
fprintf('语文:%.1f\t数学:%.1f\t英语:%.1f\n', chinese, math, english);
fprintf('平均分:%.2f\n', avg_score);
% 4. 保存到文件
fid = fopen('score_report.txt', 'w');
if fid ~= -1
fprintf(fid, '学生成绩报告\n');
fprintf(fid, '姓名:%s\n', name);
fprintf(fid, '语文:%.1f\n数学:%.1f\n英语:%.1f\n', chinese, math, english);
fprintf(fid, '平均分:%.2f\n', avg_score);
fclose(fid);
disp('\n成绩报告已保存到score_report.txt!');
end
运行效果:
ini
请输入学生姓名:赵六
请输入语文成绩:88.5
请输入数学成绩:92
请输入英语成绩:79.5
=== 学生成绩报告 ===
姓名:赵六
语文:88.5 数学:92.0 英语:79.5
平均分:86.67
成绩报告已保存到score_report.txt!