程序流程控制
顺序结构程序
- 基本步骤:
- 分析问题,确定求解问题的数学模型或方法
- 设计算法,并画出流程图
- 选择编程工具,根据算法编写程序
- 调试程序,分析程序输出结果
-
三种基本结构:顺序、选择、循环
程序文件拓展名:.m吧
脚本文件(也叫命令文件)、函数文件
-
脚本文件
调用: 在命令行窗口输入文件名
-
函数文件
调用:直接在命令行窗口调用函数,函数文件名与函数名要一致
工作的目录必须一致
cd命令查询目前所在文件夹,cd E:\文件夹修改所在文件夹
-
-
文件的建立
-
用命令按钮创建文件 新建脚本
%建立脚本文件f1.m A=[1,2,3;4,5,6;]; B=[1,2;3,4;5,6;]; C=A*B; %在命令行窗口运行脚本文件 >>f1 C= 22 28 49 64
-
用edit命令创建文件
>>edit test %建立函数文件f2.m function C=f2(A,B) C=A*B; %在命令行窗口调用函数文件 >>A=[1,2,3;4,5,6;]; >>B=[1,2;3,4;5,6;]; >>C=f2(A,B) C= 22 28 49 64
-
顺序结构
-
数据的输入
A=input(提示信息,选项);
>>A=input('请输入变量A的值:');
-
数据的输出
disp
>>s='ddd'; >>disp(s) ddd >>a=[1,2,3;4,5,6;]; >>disp(a) 1 2 3 4 5 6
-
-
程序的暂停
pause(延迟秒数)
若要强制中止程序:Ctrl+C
用if语句实现选择结构
-
单分支if语句
if 条件
语句组
end
条件结果为 标量,非零表示条件成立
结果为矩阵,如矩阵非空,且不包含零元素,则条件成立
-
双分支if语句
if 条件
语句组1
else
语句组2
end
例 输入一个整数,若为奇数则输出其平方根,否则输出其立方根
x=input('x='); if rem(x,2)==1 %可写为 rem(x,2) y=sqrt(x); else y=x^(1/3); %power(x,1/3) end y
-
多分支if语句
elseif
例
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语句实现选择结构
x=input('x=')
switch fix(x)
case 2
disp(111);
case 2
disp(222);
case {3,4,5}
disp(333);
otherwise
disp(444);
end
%输入一个英文字母,判断是否以元音字母开头
c=input('请输入一个单词:');
switch c(1)
case{'A','E','I','O','U','a','e','i','o','u'}
disp('以元音字母开头')
otherwise
disp('以辅音字母开头')
end
if findstr(c(1),'AEIOUaeiou')>0
disp('以元音字母开头')
else
disp('以辅音字母开头')
end
用for语句实现循环结构
格式:
for 循环变量=表达式1:表达式2:表达式3
循环体语句
end
说明
- for针对向量的每一个元素执行一次循环体
- 退出循环后,循环变量的值就是向量中最后元素值
- 向量为空时,循环体一次也不执行
%利用无穷级数展开式求Π的近似值
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
- 利用定积分的近似值
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)
-
蒙特卡洛法计算
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
for 循环变量必须是一个标量,也可以是一个列向量
while语句实现循环结构
-
格式: while 条件
循环体语句
end
-
break和continue语句
-
循环的嵌套
函数文件的定义与调用
-
函数文件的基本结构: function 输出形参表=函数名(输入形参表)
注释说明部分
函数体语句
有多个形参时,用括号分隔,组成形参表。
输出形参多于一个时,应该用方括号括起来
函数文件名 函数名
return 语句
-
调用格式
[输出实参表]=函数名(输入实参表)
-
匿名函数
函数句柄变量=@(匿名函数输入参数) 匿名函数表达式
函数句柄变量=@函数名
f=@(x,y)x^2+y^2 f = 包含以下值的 function_handle: @(x,y)x^2+y^2 >> f(3,4) ans = 25
函数的递归调用
-
函数的嵌套调用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-svJzCkya-1611460693010)(E:%5C%E5%AD%A6%E4%B9%A0%5C%E5%9B%BE%E7%89%87%E7%AC%94%E8%AE%B0%5C%E5%B5%8C%E5%A5%97%E8%B0%83%E7%94%A8.png)]
-
递归调用:一个函数调用它自身
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0tbJnUgo-1611460693012)(E:%5C%E5%AD%A6%E4%B9%A0%5C%E5%9B%BE%E7%89%87%E7%AC%94%E8%AE%B0%5C%E9%80%92%E5%BD%92%E8%B0%83%E7%94%A8.png)]
%函数文件 function f=ffib(n) if n>2 f=ffib(n-1)+ffib(n-2); else f=1; end %脚本文件 F=[]; for k=1:20 F=[F,ffib(k)*ffib(k)]; end sum(F) ffib(20)*ffib(21)
函数参数与变量的作用域
-
函数参数的可调性
nargin 输入实参的个数
nargout 输出实参的个数
function fout=test(a,b,c) if nargin==1 fout=a; elseif nargin==2 fout=a+b; elseif nargin==3 fout=(a*b*c)/2; end
-
局部变量 只在特定过程或函数中可以访问的变量
-
全局变量 整个MTLAB工作空间中都可用
定义格式:global 变量名
%函数文件 function f=wad(x,y) global ALPHA BETA %定义两个全局变量 f=ALPHA*x+BETA*y; %命令行窗口 global ALPHA BETA >> ALPHA =1; %命令行窗口可直接改变全局变量的值 >> BETA=2; >> s=wad(1,2) s = 5
bc)/2;
end
2. 局部变量 只在特定过程或函数中可以访问的变量
3. 全局变量 整个MTLAB工作空间中都可用
定义格式:global 变量名
```matlab
%函数文件
function f=wad(x,y)
global ALPHA BETA %定义两个全局变量
f=ALPHA*x+BETA*y;
%命令行窗口
global ALPHA BETA
>> ALPHA =1; %命令行窗口可直接改变全局变量的值
>> BETA=2;
>> s=wad(1,2)
s =
5