M文件
M 文件根据调用方式的不同可以分为两类
Script:脚本文件/命令文件
直接输入文件名即可运行
Function:函数文件
供其它M文件调用,通常带输入参数和输出参数
函数文件
函数文件由 function 语句引导
function 输出形参列表=函数名(输入形参列表)
% 注释说明部分(可选)
函数体语句(必须)
第一行为引导行,表示该 M文件是函数文件
函数名的命名规则与变量名相同 ( 必须以字母开头 )
当输出形参多于一个时,用方括号括起来
函数必须是一个单独的 M文件
函数文件名必须与函数名一致
以百分号开始的语句为注释语句
举例:
函数调用
函数调用的一般格式:
输出实参列表=函数名(输入实参列表)
函数调用时,实参的顺序应与函数定义时的形参的顺序一致。
函数可以嵌套调用,即一个函数可以被其它函数调用,甚至可以被它自身调用,此时称为递归调用。
函数所传递的参数具有可调性,Matlab 用两个永久变量 nargin 和 nargout 分别记录调用该函数时的输入实参和输出实参的个数。只要在函数文件中包含这两个变量,就可以准确地知道该函数文件被调用时的输入输出参数个数,从而决定函数如何进行处理。
递归函数举例:
参数的可调性举例:
M文件控制流
程序控制结构有三种:顺序结构、选择结构和循环结构。任何复杂的程序都由这三种基本结构组成
数据输入Input
A=input('Please input A:')
其中提示信息是字符串
该命令要求用户输入A的值(数或者字符串)
如果是输入字符串,也可以使用一下的方法
A=input('what''s your name?','s')
数据输出disp
disp(x)
数据输出fprintf
fprintf(fid,format,variables)
fid为文件句柄,若缺省,则将变量的值输出到屏幕上
format用来指定数据输出时采用的格式,常见的有
%d | 整数 |
---|---|
%e | 实数(采用科学计数法的方式) |
%f | 实数(采用浮点数形式) |
%g | 由系统自动选取上述两种格式之一 |
%s | 输出字符串 |
format中还可以使用一些特殊格式,如
\n | 换行 |
---|---|
\b | 退格 |
\ | 反斜杠 |
%% | 百分号 |
a='hello';b=2.4;c=100*pi;
fprintf('a=%s,b=%f,c=%e\n',a,b,c)
程序的暂停
pause或者pause(n)
其中n是延迟时间,以秒为单位
若缺省,则将暂停程序,知道用户按任意键后继续
pause on 屏蔽程序中所有pause的作用
pause off 打开pause的作用
选择结构
选择结构是根据给定的条件或不成立,分别执行不同的语句,Matlab用于实现选择结构的语句有if和switch
if条件语句
if expression(条件)
statements(语句组)
end
双分支结构
if expression (条件)
statements1(语句组1)
else
statement2(语句组2)
end
多分支结构
if expression1 (条件1)
statements1(语句组1)
elseif expression2 (条件2)
statements2(语句组2)
... ...
elseif expressionm (条件m)
statementsm(语句组m)
else
statements(语句组)
end
例子
A=input("请输入三角形的三边:");
if A(1)+A(2)>A(3) & A(1)+A(3)>A(2) & A(2)+A(3)>A(1)
p=(A(1)+A(2)+A(3))/2;
s=sqrt(p*(p-A(1))*(p-A(2))*(p-A(3)));
disp(s);
else
disp('不能构成一个三角形')
end
switch语句
switch expression (表达式)
case value1 (表达式1)
statement1 (语句组1)
case value2 (表达式2)
statement2 (语句组2)
......
case valuem(表达式m)
statementm(语句组m)
otherwise
statement(语句组)
end
Matlab 首先计算 expression 的值,然后将它依次与各个 case 指令后的检测值进行比较,当比较结果为真时,就执行相应的语句组,然后跳出 switch 结构。
如果所有的比较结果都为假,则执行 otherwise 后面的语句组,然后跳出 switch 结构。
otherwise 指令可以不出现
switch 后面的表达式 expression 的值可以是一个标量或字符串。
循环结构
按照给定的条件,重复执行指定的语句,Matlab用于实现循环结构的语句有for语句和while语句
for循环
for variable=expression
statement(循环体)
end
例子
while循环
while expression (条件)
statements(循环体)
end
例子
从键盘输入若干个数,当输入0时结束输入,求这些数的平均值和它们之和。
循环的嵌套
若一个数等于它的各个真因子之和,则称该数为完数,如6=1+2+3,所以6是完数。求[1,500]之间的全部完数
for m=1:500
s=0;
for k=1:m/2
if rem(m,k)==0
s=s+k;
end
end
if m==s
disp(m);
end
end
求[100,1000]以内的全部素数
n=0;
for m=100:1000
flag=1;
j=m/2;
i=2;
while i<=j &flag
if rem(m,i)==0
flag=0;
end
i=i+1;
end
if flag
n=n+1;
prime(n)=m;
end
end
其他控制语句
break语句用于终止循环的执行,即跳出内层循环
continue 语句用于结束本次循环,进行下一次循环
break 和 continue 一般与 if 语句配合使用
return 语句用于退出正在运行的脚本或函数,通常用在函数文件中
try语句
try
statements 1(语句组1)
catch
statements 2(语句组2)
end
try的作用是尝试执行一些语句, 执行过程中如果出错, 则执行catch后面的语句,再出错则执行终止。
try后面的语句没有出错,就不执行catch后面的语句。
可以使用 lasterr 显示出错原因
例子
n=input('Please enter positive integer n:');
while n<=0|fix(n)~=n
n=input('Please enter positive integer n:');
end
nt=n;
while n>1
if rem(n,2)==0
n=n/2;
else
n=3*n+1;
end
fprintf('\n n=%d',n);
end
fprintf('\n n=%d is not we need! \n', nt);
num = rand(1)*100;%产生(0,100)随机数,服从均匀分布
num = ceil(num);%向上取最近的整数,落在[1,100]之间
i=1; flag=0; %i记录猜测次数,flag记录是否猜对
while i<=7
a=input('请输入一个1-100的整数');
if a<num
disp('LOW');
elseif a>num
disp('HIGH');
else
disp('YOU WIN'); flag=1; break;
end
i=i+1;
end
if flag==0
disp('YOU LOST');
end