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

一、引言

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中的例子。

  • 13
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值