暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

第4章 MATLAB编程基础——4.4 控制程序流的其他常用指令

软件开发架构 2023-05-08
2236


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  inputkeyboard指令


1input指令将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会暂停执行,进入调试模式,允许用户检查和调试代码。用户可以查看和修改变量xyz的值,并执行其他调试操作,然后通过输入dbcont命令继续执行剩余的代码。


inputkeyboard指令的不同之处在于:keyboard指令允许输入任意多个MATLAB指令,而input指令只允许用户输入赋值给变量的,即数组、字符串或元胞数组等。


4.4.3  yesinput指令


yesinput指令是一个只能输入的指令,它提供的输入值是一个默认量,并可以对输入范围进行检查,其调用格式如下。

● Value=yesinput('Prompt',Default,Possib)

说明:

1yesinput指令涉及用户和MATLAB之间的交互,因此无法在notebook程序中运行。

2Prompt为文字提示,Default为默认的设置值,Possib为可选值。

3)当yesinput指令运行后,如果用户不输入任何值,则变量Value将接收默认值。


4.4.4  pause指令


pause指令的功能为控制执行文件的暂停与恢复,其调用格式如下。

● pause:暂停执行文件,等待用户按任意键继续。

● pause(n):在继续执行文件之前,暂停n秒。

需要注意的是,"pause" 会阻塞程序的执行,直到暂停时间到达或用户按下任意键,因此在使用 "pause" 时需要谨慎,以避免程序执行过长的等待时间。在实际应用中,可以根据需要使用 "pause" 来控制程序的流程和交互,例如添加程序执行中的等待时间或等待用户输入确认等。


4.4.5  continue指令


continue语句把控制权传给下一个在其中出现的ifwhile循环的迭代,忽略任何循环体中保留的语句。在嵌套循环中,continue语句把控制权传给下一个forwhile循环所嵌套的迭代。


4-13continue指令使用示例。

本例使用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-14for循环的中途终止。

创建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  errorwarning指令


在编写M文件时,常用的错误或警告指令的调用格式有以下几种。

● error('message'):显示出错信息message,终止程序。

● errortrap:错误发生后,控制程序继续执行与否的开关。

● lasterr:显示MATLAB系统判断的最新出错原因,并终止程序。

● warning('message'):显示警告信息message,继续运行程序。

● lastwarn:显示MATLAB系统给出的最新警告程序,并继续运行。


如果大家需要这个文档,可以在我的公众号(软件开发架构)中回复20230508,免费获取。




文章转载自软件开发架构,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论