4.4 控制程序流的其他常用指令
4.4.1 return指令
通常,当被调用函数执行完成后,MATLAB会自动将控制权转回主函数或Commands窗口。但是如果在被调用函数中插入return指令,则可以强制MATLAB结束执行该函数并把控制权转出。
在MATLAB中,"return"是用于从函数中返回结果并终止函数执行的指令。它的用法如下:
(1)在函数体内,使用 "return" 后跟要返回的值,可以将该值作为函数的输出返回给调用者。例如:
function result = myFunction(a, b) % 函数体 result = a + b; % 返回 a 和 b 的和 return; % 返回结果并终止函数执行 end
(2)在函数体内,可以使用 "return" 单独作为一个语句,用于提前终止函数的执行,即使函数体中还有其他的代码未执行完。例如:
function myFunction() % 函数体 if some_condition % 条件满足时,提前终止函数执行 return; end % 这里的代码将不会被执行 end
需要注意的是,使用 "return" 语句时,会立即终止函数的执行,并且不会执行 "return" 后面的语句。如果函数体内有多个 "return" 语句,只有第一个 "return" 会被执行,后面的 "return" 语句将不会被执行。另外,如果函数没有输出参数,可以省略 "return" 语句,函数执行结束后会自动返回。
4.4.2 input和keyboard指令
(1)input指令将MATLAB的控制权暂时交给用户,用户通过键盘输入数值、字符串或表达式等,并按Enter键将输入内容传递到工作区,同时把控制权交还给MATLAB。其常用的调用格式如下。
● Value=input('message'):将用户输入的内容赋值给变量Value。
● Value=input('message','s'):将用户输入的内容以字符串的形式赋值给变量Value。
说明:
①指令中的“message”是显示在屏幕上的字符串。
②对于上面第一种调用格式,用户可以输入数值、字符串等各种形式的数据。
③对于上面第二种调用格式,用户无论输入什么内容,均以字符串的形式赋值给变量。
例如,以下代码演示了如何使用input获取用户输入的数字,并将其保存到一个变量中:
% 获取用户输入的数字 num = input('请输入一个数字: '); % 显示用户输入的数字 fprintf('您输入的数字是: %d\n', num);
(2)当执行遇到keyboard指令时,MATLAB将控制权暂时交给键盘,用户可以由键盘输入各种合法的MATLAB指令。只有当用户输入完成,并输入return指令后,控制权才交还给MATLAB。
keyboard指令用于在MATLAB代码中插入一个调试断点,以便在程序执行到该点时停下来,以便用户检查和调试代码。其使用方式如下:
keyboard
当执行到keyboard指令时,MATLAB会暂停代码的执行,进入调试模式,允许用户逐行执行代码,查看和修改变量的值,以及执行其他调试操作。用户可以通过键盘输入命令来与调试器交互,例如查看变量的值、执行MATLAB命令、设置断点等。当用户完成调试操作后,可以通过输入dbcont命令继续执行代码,或者通过输入dbquit命令退出调试模式。
例如,以下代码演示了如何在MATLAB代码中插入一个调试断点:
% 一段需要调试的代码 x = 10; y = 5; z = x + y; % 在这里插入调试断点 keyboard % 继续执行剩余的代码 w = z * 2; fprintf('计算结果为: %d\n', w);
当程序执行到keyboard指令时,MATLAB会暂停执行,进入调试模式,允许用户检查和调试代码。用户可以查看和修改变量x、y、z的值,并执行其他调试操作,然后通过输入dbcont命令继续执行剩余的代码。
input和keyboard指令的不同之处在于:keyboard指令允许输入任意多个MATLAB指令,而input指令只允许用户输入赋值给变量的“值”,即数组、字符串或元胞数组等。
4.4.3 yesinput指令
yesinput指令是一个只能输入的指令,它提供的输入值是一个默认量,并可以对输入范围进行检查,其调用格式如下。
● Value=yesinput('Prompt',Default,Possib)。
说明:
(1)yesinput指令涉及用户和MATLAB之间的交互,因此无法在notebook程序中运行。
(2)Prompt为文字提示,Default为默认的设置值,Possib为可选值。
(3)当yesinput指令运行后,如果用户不输入任何值,则变量Value将接收默认值。
4.4.4 pause指令
pause指令的功能为控制执行文件的暂停与恢复,其调用格式如下。
● pause:暂停执行文件,等待用户按任意键继续。
● pause(n):在继续执行文件之前,暂停n秒。
需要注意的是,"pause" 会阻塞程序的执行,直到暂停时间到达或用户按下任意键,因此在使用 "pause" 时需要谨慎,以避免程序执行过长的等待时间。在实际应用中,可以根据需要使用 "pause" 来控制程序的流程和交互,例如添加程序执行中的等待时间或等待用户输入确认等。
4.4.5 continue指令
continue语句把控制权传给下一个在其中出现的if或while循环的迭代,忽略任何循环体中保留的语句。在嵌套循环中,continue语句把控制权传给下一个for或while循环所嵌套的迭代。
例4-13:continue指令使用示例。
本例使用continue跳过负数,计算正数的平方和立方。
创建M文件并命名为ex4_13.m,利用M文件编辑器在M文件中输入:
% 输入一个数组,输出正数的平方和立方 numbers = [2, -3, 4, -5, 6, 7, -8, 9, 10]; squares = 0; cubes = 0; for i = 1:numel(numbers) if numbers(i) < 0 continue; % 跳过负数 end % 计算正数的平方和立方 squares = squares + numbers(i)^2; cubes = cubes + numbers(i)^3; end disp(['正数的平方和:' num2str(squares)]); disp(['正数的立方和:' num2str(cubes)]); 运行后可得到如下结果: 正数的平方和:286 正数的立方和:2360
4.4.6 break指令
在for循环或while循环结构中,有时并不需要运行到最后一次循环用户就已经得到了所需要的结果,那么后面的循环就变成冗余的了,消耗了运算时间并占用了内存。
break指令可进行对for循环或while循环结构的终止,通过使用break指令,可以不必等待循环的预定结束时刻,而是根据循环内部设置的终止项来判断。
若终止项满足,则可以使用break指令退出循环;若终止项始终未满足,则照常运行至循环的预定结束时刻。
例4-14:for循环的中途终止。
创建M文件并命名为ex4_14.m,利用M文件编辑器在M文件中输入:
a(1) = 1; a(2) = 1; n = 1000; for i = 3 : n a(i) = a(i - 1) + a(i - 2); % 求下一项 if a(i) > 9999 [i a(i)] break % 当元素大于9999时,退出循环 end end
运行M文件可得到如下结果:
ans = 21 10946
4.4.7 error和warning指令
在编写M文件时,常用的错误或警告指令的调用格式有以下几种。
● error('message'):显示出错信息message,终止程序。
● errortrap:错误发生后,控制程序继续执行与否的开关。
● lasterr:显示MATLAB系统判断的最新出错原因,并终止程序。
● warning('message'):显示警告信息message,继续运行程序。
● lastwarn:显示MATLAB系统给出的最新警告程序,并继续运行。