%%2if语句选择结构
%2.1单分支if语句
%if 条件
% 语句组
% end
% 条件为标量时:非零条件成立,零条件不成立
% 条件为矩阵时:矩阵非空且不包含零元素条件成立,否则不成立
%2.2双分支if语句
%if 条件
% 语句组1%else% 语句组2% end
%例:输入一个整数,若为奇数输出其平方根,否则输出其立方根
x=input('请输入x的值:');ifrem(x,2)%或rem(x,2)==1
y=sqrt(x);else
y=x^(1/3);%或power(x,1/3)
end
y
%2.3多分支if语句
%if 条件1% 语句组1% elseif 条件2% 语句组2%...% elseif 条件m
% 语句组m
%else% 语句组n
% end
%例:输入一个字符,大写字母->小写字母,小写字母->大写字母,数字字符->平方,其他->不变
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)elsedisp(c)
end
%%3 用switch语句实现选择结构
%switch 表达式
%case 结果表1% 语句组1%case 结果表2% 语句组2%...%case 结果表m
% 语句组m
% otherwise
% 语句组n
% end
%switch表达式的值应是可列举的(整型表达式、字符串表达式)
%case结果表为switch表达式的取值,取值有多个时,用单元数据表示({...})
x=input('x=?');switchfix(x)case2disp(111);case2disp(222);case{3,4,5}disp(333);
otherwise
disp(444);
end
% 例:输入一个英文单词,判断它是否以元音字母开头
clc,clear
c=input('请输入一个单词:','s');switchc(1)case{'A','E','I','O','U','a','e','i','o','u'}disp([c,'以元音字母开头']);
otherwise
disp([c,'以辅音字母开头']);
end
% 或
c=input('请输入一个单词:','s');iffindstr(c(1),'AEIOUaeiou')>0disp([c,'以元音字母开头']);elsedisp([c,'以辅音字母开头']);
end
% 例:整数分级(输入PM2.5数值,输出空气质量等级)
g=input('请输入PM2.5值:');switchfix(g)casenum2cell(0:34)disp('空气质量优');casenum2cell(35:74)disp('空气质量良好');casenum2cell(75:114)disp('空气质量轻度污染');casenum2cell(115:149)disp('空气质量重度污染');casenum2cell(150:249)disp('空气质量重度污染');
otherwise
disp('空气质量严重污染');
end
%%4for语句实现循环结构
%for 循环变量=表达式1(初值):表达式2(步长):表达式3(终值)/行向量/矩阵表达式
% 循环体语句
% end
%for语句针对向量的每一个元素执行一次循环体(向量为空时,循环体一次也不执行)% 退出循环之后,循环变量的值就是向量中最后的元素值
for i=[1,3,2,5]
i
end
for j=[1;3;2;5]
j
end
i,j
% 例:计算圆周率π
% 利用无穷级数展开式求
y=0;g=-1;
n=input('n=?');for i=1:n
g=-g;
y=y+g*1/(2*i-1);
end
pai=4*y
% 向量求和方法
n=input('n=?');
x=1:2:(2*n-1);
y=(-1).^(2:n+1)./x;
pai=sum(y)*4% 利用定积分的近似值求pi的近似值
a=0;b=1;
n=input('n=?');
h=(b-a)/n;
x=a:h:b;
f=sqrt(1-x.*x);
s=[];for k=1:n
s1=(f(k)+f(k+1))*h/2;
s=[s,s1];
end
pai=4*sum(s)% 蒙特卡洛法求pi
s=0;
n=input('n=?');for i=1:n
x=rand(1);
y=rand(1);if x*x+y*y<=1
s=s+1;
end
end
pai=s/n*4
%%5while语句实现循环结构
%while 条件
% 循环体语句
% end
% 例:从键盘输入若干数、输入0时结束,计算这些数的平均值和它们的和
msum=0;
n=0;
x=input('Enter a number (end in 0):');while x~=0
msum=msum+x;
n=n+1;
x=input('Enter a number (end in 0):');
end
if n>0
msum
mean=msum/n
end
%% 流程转向语句break和continue%break语句,跳出循环体
%continue语句,结束本次循环
% 例:求[100,200]之间第一个能被21整除的整数
for n=100:200ifrem(n,21)~=0continue
end
n
break
end
%% 循环的嵌套
% 例:筛选法求[2,m]内全部素数
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)
%%7 函数的递归调用
% 例:求n!
fact(10)
function f=fact(n)if n<=1
f=1;else
f=fact(n-1)*n;
end
end
% 例:验证fibonacci数列性质
clc,clear
F=[];for k=1:20
F=[F,ffib(k)*ffib(k)];
end
sum(F)ffib(20)*ffib(21)
function f=ffib(n)if n>2
f=ffib(n-1)+ffib(n-2);else
f=1;
end
end
```c
```c
%%8 函数参数与变量的作用域
% nargin 调用函数时输入实参的个数
% nargout 调用函数时输出实参的个数
function fout=test1(a,b,c)if nargin==1
fout=a;
elseif nargin==2
fout=a+b;
elseif nargin==3
fout=(a*b*c)/2
end
end
% 局部变量:函数文件中的变量为局部变量
% 全局变量:global 全局变量名
function f=wad(x,y)
global ALPHA BETA
f=ALPHA*x+BETA*y;
end
global ALPHA BETA
ALPHA=1;
BETA=2;
s=wad(1,2)