matlab学习——程序流程控制

%% 1 顺序结构程序 
%A=input('...') 输入
%disp()          输出
%pause(s)        s为延迟秒数,省略则暂停按任意键继续
%输入平面内两点坐标,计算距离及黄金分割点坐标
a=input('a=');
b=input('b=');
c=a+0.618*(b-a);
s=abs(a-b);
disp(s)
disp(c)
%% 2 if语句选择结构
% 2.1单分支if语句
%   if 条件
%      语句组
%   end
% 条件为标量时:非零条件成立,零条件不成立
% 条件为矩阵时:矩阵非空且不包含零元素条件成立,否则不成立
% 2.2双分支if语句
%   if 条件
%      语句组1
%   else 
%      语句组2
%   end
%例:输入一个整数,若为奇数输出其平方根,否则输出其立方根
x=input('请输入x的值:');
if rem(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)
else
    disp(c)
end
%% 3switch语句实现选择结构
% switch 表达式
%   case 结果表1
%       语句组1
%   case 结果表2
%       语句组2
%      ...
%   case 结果表m
%       语句组m
%   otherwise
%       语句组n
% end
% switch表达式的值应是可列举的(整型表达式、字符串表达式)
% case结果表为switch表达式的取值,取值有多个时,用单元数据表示({...})
x=input('x=?');
switch fix(x)
    case 2
        disp(111);
    case 2
        disp(222);
    case {3,4,5}
        disp(333);
    otherwise
        disp(444);
end
% 例:输入一个英文单词,判断它是否以元音字母开头
clc,clear
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数值,输出空气质量等级)
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
%% 4 for语句实现循环结构
% 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
%% 5 while语句实现循环结构
% 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
%% 流程转向语句breakcontinue
% break语句,跳出循环体
% continue语句,结束本次循环
% 例:求[100,200]之间第一个能被21整除的整数
for n=100:200
    if rem(n,21)~=0
        continue
    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)
%% 6 匿名函数
% 函数句柄变量=@(匿名函数输入参数)匿名函数表达式
f=@(x,y) x^2+y^2;
f(3,4)
% 函数句柄变量=@函数名
h=@sin;
h(pi/2)
% 例:求y=f(40)/(f(30)+f(20)),f(n)=n+10ln(n^2+5)
clc,clear
f1=@(n) n+10*log(n^2+5);
y=f1(40)/(f1(30)+f1(20))
%% 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)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值