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;endy //法一 n=input('n=?');x=1:n;y=(-1).^(0:n-1).*x;sum(y) //法二 利用矩阵的方法下面在命令行窗口进行一些解释>> x=1:5x = 1 2 3 4 5>> y=(-1).^(0:4)y = 1 -1 1 -1 1例2:
将该脚本文件命名为getSum3,在命令行窗口进行测试:
>> getSum3n=?1000pai = 3.1416例3:
按照 Matlab的定义,
for语句的循环变量也可以是一个列向量,其格式为:
for 循环变量=矩阵表达式
循环体语句
end
在Matlab中,二维数组是以列优先的,在前面一维数组中,一列只有一个元素,所以依次向后走,如果是一个二维数组,也是有几列循环几次,不过二维数组中循环一次中变量中的元素有多个。
A=[1,2,3,4]; //一维数组B=[1;2;3;4]; //二维数组for i=A disp('test'); disp(i);endfor i=B disp('test'); disp(i);end脚本文件test.m如上,下面在命令行窗口进行测试:
>> testtest 1test 2test 3test 4test 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('');endif n>0 sum ave=sum/nend脚本文件while1.m如上,下面在命令行窗口进行测试:
>> while1请依次输入数据,直到输入0时为止:1 23560sum = 17ave = 3.4000 break语句和continue语句例5:求[100,200]之间第一个能被21整除的整数。
for n=100:200 if rem(n,21)~=0 continue end n breakend这里只是为了演示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; endendn=find(p~=0);p(n)脚本文件while3.m如上,下面在命令行窗口进行测试:
>> while3m=?20ans = 2 3 5 7 11 13 17 19