MATLAB程序设计之循环结构入门详解 您所在的位置:网站首页 matlab循环结构语句有哪些 MATLAB程序设计之循环结构入门详解

MATLAB程序设计之循环结构入门详解

2024-06-06 07:11| 来源: 网络整理| 查看: 265

一、引言

Matlab可以类似C/C++语言或者Python语言一样可以编写程序以完成某些功能。Matlab程序包含三大程序结构,分别是顺序结构、选择结构和循环结构。本文主要给出了Matlab程序的循环结构的语法规则及相关的Demo。Matlab程序结构之循环结构主要包括for循环和while循环。下面将逐一进行讲解。

二、for…end循环结构

1.语法: for…end循环用于事先已知循环次数的情形,其语法如下:

for 循环变量 = 起始值:步长:终止值 循环体 end

2.注意事项 (1)步长的缺省值是1。步长可以在正实数或负实数范围内任意指定,对于正数,循环变量的值大于终止值时,循环结束;对于负数,循环变量的值小于终止值时,循环结束; (2)for和end语句中间的所有语句会自动缩进; (3)for循环可以嵌套使用; (4)不能通过内部对循环变量重新赋值而进行反复的循环或停止循环; (5)循环中可以使用break或者continue中断或改变循环,其中 – break用来实现:跳出本层循环体 – continue用来实现:结束本次循环而进入当前层循环的下一次循环 3.for循环示例程序 Demo 1:一个三位整数各位数字的立方和等于该数本身则称该数为水仙花数。输出全部水仙花数。 参考代码:

clear all clc tic%开始计时 for m = 100 : 999 m1 = fix( m / 100 ); m2 = rem( fix( m / 10 ), 10 ); m3 = rem( m, 10 ); if m == m1^3 + m2^3 + m3^3 disp( [ num2str( m ) ] ) end end toc%计时结束,显示程序的运行时间

运行结果:

153 370 371 407 时间已过 0.038234 秒。

也可以使用如下代码来实现,即通过数组来实现,并使用了数组元素过滤的手段从数组中提取水仙花数。避免了使用循环。

clear all clc tic%开始计时 Arr = [ 100 : 999 ]; Arr100 = fix( Arr / 100); Arr10 = rem( fix( Arr / 10), 10 ); Arr1 = rem( Arr, 10 ); ArrN = Arr100.^3 + Arr10.^3 + Arr1.^3; data = Arr .* ( Arr == ArrN );%获取数组Arr中的水仙花数,非水仙花数设置为0 Arr( find( data > 0 ) )%把水仙花数单独显示出来 toc%计时结束,显示程序的运行时间 format compact

运行结果:

ans = 153 370 371 407 时间已过 0.004718 秒。

提示:通过本例可以发现,有些循环也可以通过数组来实现。而且通过数组来实现可以有效提高运行速度。另外运行时间会根据系统的状态而得到不同的数据!!!

Demo 2:若一个数等于它的各个真因子之和,则称该数为完数,如6=1+2+3,所以6是完数。求1到10000之间的全部完数。 参考代码:

clear all clc for m = 1 : 10000 s = 0; for k = 1 : m/2 if rem( m, k ) == 0 s = s + k; end end if m == s disp( [ '完数:', num2str( m ) ] ); end end

运行结果: 完数:6 完数:28 完数:496 完数:8128

**Demo 3**:把一个矩阵中各列元素改成列元素乘以列编号的平方。 此例子涉及了循环变量为矩阵的情形。如果循环变量等于一个矩阵,执行过程是依次将矩阵的各列元素赋给循环变量,然后执行循环体语句,直至各列元素处理完毕。 参考代码: ```matlab clear all clc Arr = [ 1 : 2 : 6; 3 : 5; 1 : 3 ] A = zeros( size(Arr) ); k = 1; for i = Arr A( :, k ) = i * k^2; k = k + 1; end A

运行结果:

Arr = 1 3 5 3 4 5 1 2 3 A = 1 12 45 3 16 45 1 8 27 ``` **Demo 4**:在1到1000之间找前两个完数(break的例子)。 break的功能是结束本层循环。 参考代码: ```matlab clear all clc count = 0;%计算器,记录完数的个数 for m = 1 : 10000 s = 0; for k = 1 : m/2 if rem( m, k ) == 0 s = s + k; end end if m == s disp( [ '完数:', num2str( m ) ] ); count = count + 1; if count == 2 %当计数器等于2的时候,结束循环 break; end end end

Demo5: 把一个数组中的负数改成其平方,正数保持不变。(continue的例子) continue的用法与C/C++语言类似,即满足给定的条件后,跳过continue后面的代码而进入下一次循环。 参考代码:

clear all clc Arr = [ 1, -5, -3, 6, 9 ] for i = 1 : length( Arr ) if Arr( i ) > 0 continue; end Arr( i ) = Arr( i )^2; end Arr

运行结果:

Arr = 1 -5 -3 6 9 Arr = 1 25 9 6 9

提示:本题按上述方法实现,是为了演示continue的用法。也可以使用其它的实现方法,即判断元素是否小于0。

三、while…end循环结构

1.语法: while…end循环用于事先已知循环次数的情形,其语法如下:

while 条件表达式 循环体语句组 end

若表达式为真,则执行循环体的内容,执行后再判断表达式是否为真,若为假则跳出循环体,否则继续执行循环体。 2.while循环示例程序 Demo 6:从键盘输入若干个正整数,当输入0时结束输入,求这些数的平均值和它们之和。 参考代码:

clear all clc sum = 0; count = 0; val = input('Enter a number (end in 0):'); while ( val ~= 0 ) sum = sum + val; count = count + 1; val = input('Enter a number (end in 0):'); end if ( count > 0 ) disp( [ '和:', num2str( sum ) ] ); disp( [ '平均值:', num2str( sum/count ) ] ); end

运行结果:

Enter a number (end in 0):1 Enter a number (end in 0):5 Enter a number (end in 0):8 Enter a number (end in 0):6 Enter a number (end in 0):9 Enter a number (end in 0):0 和:29 平均值:5.8

注意: 对于for循环,很多时候都可以使用数组的运算替代循环,这样能够有效提高运行速度,例如Demo 1中的例子。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有