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