2026-03-02 13:39:15

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()做输入校验:

matlab

复制代码

num = 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!