程序结构设计
程序的三种基本结构:顺序结构、选择结构、循环结构。
一、顺序结构的程序设计是最简单的,只要按照解决问题的顺序写出相应的语句就行,它的执行顺序是自上而下,依次执行。
(1)数据的输入:
>> A=input('请输入变量A的值:')
请输入变量A的值:100
A =
100
(2) 数据的输出:
>> s='Hello World';
>> disp(s)
Hello World
>> a=[1 2 3;4 5 6];
>> disp(a)
1 2 3
4 5 6
(3) 程序的暂停
pause(延迟秒数) 若要强行中止程序的运行可使用Ctrl+C命令。
例题:
>> a=input('a=');
b=input('b=');
c=a+0.618*(b-a);
s=abs(a-b);
disp(s)
disp(c)
a=1+i
b=4.5+4.5i
4.9497
3.1630 + 3.1630i
二、用if语句实现选择结构:
1.单分支if语句:当条件结构为标量时,非零表示条件成立,零表示条件不成立;当条件是矩阵时,如果矩阵为非空,且不包含零元素,则条件成立,否则不成立。例如:[1 2;0 4]表示条件时,条件不成立;[1 2;3 4]表示条件时,条件成立。
2.双分支if语句:(if else)
例一:输入一个整数,若为奇数则输出其平方根,否则输出其立方根。
x=input('请输入x的值:')
if rem(x,2)==1
y=sqrt(x);
else
y=x^(1/3);
end
y
3.多分支if语句(if elseif elseif else)
例题:输入一个字符,若为大写字母,则输出其对应的小写字母;若为小写字母,则输出其对应的大写字母;若为数字字符则输出其对应数的平方,若为其他字符则原样输出。
c=input('请输入一个字符:','s');
if c>='A'&&c<='Z'
disp(lower(c))
elseif c>='a'&&c<='z'
disp(upper(c))
elseif c>='0'&&c<='9'
disp(str2double(c)^2)
else
disp(c)
end
二、用switch语句实现选择结构
例题:输入一个英文单词,判断它是否以元音字母开头。
法一:
c=input('请输入一个单词:','s');
switch c(1)
case {'a','e','i','o','u','A','E','I','O','U'}
disp([c,'是以元音字母开头']);
otherwise
disp([c,'不是以元音字母开头']);
end
法二:
c=input('请任意输入一个单词:','s');
if findstr(c(1),'AEIOUaeiou')>0
disp([c,'是以元音字母开头']);
else
disp([c,'不是以元音字母开头']);
end
例二:
PM2.5是指大气中直径小于或等于2.5微米的可入肺颗粒物,是衡量空气**的重要指标。假定空气**等级以PM2.5数值划分为六级。PM2.5数值在[0,35)空气**为优,[35,75)为良,[75,115)为轻度污染,[115,150)为中度污染,[150,250)为重度污染。编写程序,输入PM2.5数值,输出空气**等级。
解答:
g=input('请输入PM2.5数值:');
switch fix(g)
case num2cell(0:34)
disp('空气**为优');
case num2cell(35:74)
disp('空气**为良');
case num2cell(75:114)
disp('空气**为轻度污染');
case num2cell(115:149)
disp('空气**为中度污染');
case num2cell(150:249)
disp('空气**为重度污染');
otherwise
disp('空气**严重污染');
end
三、用for语句实现循环结构:
格式:
for 循环变量=表达式1(初值):表达式2(步长):表达式3(终值)
循环体语句
end
说明:
for语句针对向量的每一个元素执行一次循环体。
退出循环之后,循环变量的值就是向量中最后的元素值。
当向量为空时,循环体一次也不执行。
例题:计算圆周率:
(蒙特卡洛法)
s=0;
n=input('n=');
for n=1:n
x=rand(1);
y=rand(1);
if (x*x+y*y<1)
s=s+1;
end
end
pai=s/n*4
按照MATLAB的定义,for语句的循环变量也可以是一个列向量,其格式为:
for循环变量=矩阵表达式
循环体语句
end
用while语句实现循环结构:
格式:
while条件
循环体语句
end
例一:从键盘输入若干个数,当输入0时结束输入,求这些数的平均值和它们之和。
x=input('请输入数据:');
s=0;
i=1;
while(x~=0)
s=s+x;
p=s/i;
i=i+1;
x=input('请输入数据:');
end
s
p
while语句多用于循环**不确定的情况,而对于循环**确定的情况,使用for语句更为方便。
针对不同情况可以选择不同的循环语句,但从功能上讲两种循环语句可以相互替代。
补充:
break语句和continue语句:
break语句用来跳出循环体,结束整个循环。
continue语句用来结束本次循环,接着进行下一次是否执行循环的判断。
例题:求[100,200]之间第一个能被21整除的整数。
for n=100:200
if rem(n,21)~=0
continue
end
n
break
end
如果一个循环结构的循环体又包含一个循环结构,就称为循环的嵌套,或称为多重循环结构。
例题:用筛选法求某自然数范围内的全部素数。
**:筛选法求素数的基本思想是要找出2~m之间的全部素数,首先在2~m中划去2的倍数(不包括2),然后划去3的倍数(不包括3),由于4已被划去,再找5的倍数(不包括5),……,直到再划去不超过 的倍数,剩下的就都是素数。
m=input('m=');
p=1:m;
p(1)=0;
for i=2:sqrt(m)
for j=2*i:i:m
p(j)=0;
end
end
n=find(p~=0);
p(n)