Matlab中的循环结构:for语句、while语句、break与continue语句,以及用Matlab求不超过m的全部素数

for语句

当步长为1时,步长可以省略。和前面学的矩阵的初始化类似。

1.for语句针对向量的每一个元素执行一次循环体。
2.退出循环之后,循环变量的值就是向量中最后的元素值。
3.当向量为空时,循环体一次也不执行。

例1:求 1-2+3-4+…+(-1)n-1n

y=0;
g=-1;
n=input('n=?');
for i=1:n
    g=-g;
    y=y+g*i;
end
y      //法一
n=input('n=?');
x=1:n;
y=(-1).^(0:n-1).*x;
sum(y)  //法二   利用矩阵的方法

下面在命令行窗口进行一些解释
>> x=1:5
x =
     1     2     3     4     5
>> y=(-1).^(0:4)
y =
     1    -1     1    -1     1

例2:

a=0;
b=1;
n=input('n=?');
h=(b-a)/n;    //自己输入的n,将区间(0,1)均匀分成n份
x=a:h:b;
f=sqrt(1-x.*x);  //求每个题型的上底和下底
s=[];         //先建立一个空矩阵
for k=1:n
    t=(f(k)+f(k+1))*h/2;  //求每个小梯形的面积
    s=[s,t];              //将每个小梯形的面积t加在矩阵s中
end
pai=4*sum(s)

将该脚本文件命名为getSum3,在命令行窗口进行测试:

>> getSum3
n=?1000
pai =
    3.1416

例3:

s=0;
n=input('n=?');
for i=1:n
    x=rand(1);
    y=rand(1);
    if x^2+y^2<=1
        s=s+1;
    end
end
pai=s/n*4

按照 Matlab的定义,
for语句的循环变量也可以是一个列向量,其格式为:
for 循环变量=矩阵表达式
   循环体语句
end

在Matlab中,二维数组是以列优先的,在前面一维数组中,一列只有一个元素,所以依次向后走,如果是一个二维数组,也是有几列循环几次,不过二维数组中循环一次中变量中的元素有多个。

A=[1,2,3,4];  //一维数组
B=[1;2;3;4];  //二维数组
for i=A   
    disp('test');
    disp(i);
end
for i=B
    disp('test');
    disp(i);
end

脚本文件test.m如上,下面在命令行窗口进行测试:

>> test
test
     1

test
     2

test
     3

test
     4

test
     1
     2
     3
     4

while循环

格式:
while 条件
   循环体语句
end

例4:从键盘输入若干个数,当输入0时结束输入,求这些数的平均值和它们之和。

sum=0;
n=0;
disp('请依次输入数据,直到输入0时为止:');
x=input('');    //input函数的是两个,可以省去数据类型的限制参数而省去一个参数,但必须要有一个
while x~=0      //如果输入不需要有任何提示信息,单引号之间不输入内容就行。
    sum=sum+x;
    n=n+1;
    x=input('');
end
if n>0
    sum
    ave=sum/n
end

脚本文件while1.m如上,下面在命令行窗口进行测试:

>> while1
请依次输入数据,直到输入0时为止:
1 
2
3
5
6
0
sum =
    17
ave =
    3.4000

break语句和continue语句

例5:求[100,200]之间第一个能被21整除的整数。

for n=100:200
    if rem(n,21)~=0
        continue
    end
    n
    break
end

这里只是为了演示continue和break的写法,当然有更简单的实现。
这里和C的用法是一样的,注意在switch里面是不需要break的。

循环的嵌套

例6:用筛选法求某自然数范围内的全部素数。
即,输入一个自然数m,求不大于m的全部素数。

筛选法求素数的基本思想:要找出2到m之间的全部素数,首先在2~m中划去2的倍数(不包括2),然后划去3的倍数(不包括3),由于4已被划去,再找5的倍数(不包括5),…,直到再划去不超过根号m的倍数,剩下的就都是素数。

m=input('m=?');
p=1:m;
p(1)=0;
t=fix(sqrt(m));  //其实这里不写也行
for i=2:t       //直接写for i=2:sqrt(m),因为默认步长为1,如果sqrt(m)为小数的话就到不了
    for j=2*i:i:m
        p(j)=0;
    end
end
n=find(p~=0);
p(n)

脚本文件while3.m如上,下面在命令行窗口进行测试:

>> while3
m=?20
ans =
     2     3     5     7    11    13    17    19

猜你喜欢

转载自blog.csdn.net/HangHug_L/article/details/107985329
今日推荐