在平常对于实际应用中,我们有时候需要输出较多的命令,直接用命令行就显得很麻烦,我们就可以利用M文件来实现。在实际运行这些命令时,只需要其他M文件或者命令行调用文件名,系统就会运行所写M文件里面的命令。
M文件可以在任何编辑器上进行编辑,MATLAB也自带了相应的M文件编辑器。

MATLAB的编辑器
(1)计算阶乘的 实例
首先我们就可以新建立一个M文件(点击编辑器的新建),保存为Factorial.m文件
Factorial.m
function y=f(x)%MATLAB阶乘设计实验%用来求阶乘的函数%参数为任何大于0的数 if x<0 error('你输入了小于0的数'); return ;else if x==0 y=1; else y=1; for x=1:x y=y*x; end end end 之后我们就使用所写的阶乘计算函数。
y=input('请你输入要计算的阶乘数');s=Factorial(y);fprintf('你所做的阶乘结果为s=%d\n',s);
输出的结果
函数文件第一行都是以function开始的,我们上面所举的例子就是,他也是函数文件的标志。所谓函数文件是实现某些特定的功能而编写的,例如MATLAB里面提供的各种函数,其实就是函数文件。他就是如果C语言里面我们函数一样,可以自己编写,自己调用。
(2)分段函数实例
%%f.m%计算某个分段函数function y=f(x)if x<3 y=2*x;elseif x>=3&&x<8 y=x^2;else y=x+2;end任何的程序都大概可以分为顺序结构,循环结构,分支结构三种。
顺序结构最为简单,是最容易学的一种结构。
%顺序结构例子%计算两个矩阵的差disp('To calculate the difference between the two matrices')A_1=[1,2;3,4];B_1=[3,4;5,6];disp(A_1);disp(B_1);disp('The difference between A_1 and B_1')C_1=B_1-A_1
对应的输出结果
循环结构也是MATLAB里面一个重要的结构之一。他与C语言的区别在于,每一个循环结尾需要加一个end。如for -end ;while -end。具体下面介绍两种用法。
% for 变量=表达式% 可执行语句1% .........% 可执行语句N% endfunction y=f(x) for i=1:length(x)-1 for j=1:length(x)-1 if(x(j)>x(j+1)) temp=x(j); x(j)=x(j+1); x(j+1)=temp; end end end disp('排好的顺序是');x
排序结果图
MATLAB语言作为一种编程语言,自然也有语言所具备的选择结构。MATLAB提供了三种选择结构
if—else-end结构;swtich-case-end结构;try-catch-end结构
%此函数是用来计分的function jifen(Name,Score)%其中name和SCore为参数%name为学生姓名%Score中元素为学生分数n=length(Name);% %----------------% 优秀| 85-100|% 良好| 70-84 |% 及格| 60-69|% 不及格| 0-60 |% -----------------for i=0:15 A_level{i+1}=85+i; if i<=14 B_level{i+1}=70+i; if i<=9 C_level{i+1}=60+i; end endend%创建存贮成绩等级的单元数组level=cell(1,n);%创建结构体变量S=struct('Name',Name,'Score',Score,'level',level);%根据学生成绩得出相应的等级for i=1:n switch S(i).Score case A_level S(i).level='优秀'; case B_level S(i).level='良好'; case C_level S(i).level='及格'; otherwise S(i).level='不及格'; endendfprintf('你所输入的学生等级如下\n');disp(['学生姓名',blanks(4),'得分',blanks(4),'等级']);for i=1:n r=length(S(i).Name); % fprintf('%s %d %s\n',S(i).Name,S(i).Score,S(i).level) disp([S(i).Name,blanks(10-r),num2str(S(i).Score),blanks(7-r),S(i).level]); end我们命令行输入以下时候会出现如下结果
>> Name={'马伟','易烊千玺','李嘉欣','boret','Lisa','weiwei'};>> Score={99,99,77,77,65,45};>> jifen(Name,Score)你所输入的学生等级如下学生姓名 得分 等级马伟 99 优秀易烊千玺 99 优秀李嘉欣 77 良好boret 77 良好Lisa 65 及格weiwei 45 不及格最后我们把今天所写的代码总结一下吧,加入成绩排序系统,做一个小小的成绩录入系统。
附录(大家可以尝试一下try—catch-end)
try
语句组1
catch
语句组2
end
%此函数是用来计分的function jifen(Name,Score)%其中name和SCore为参数%name为学生姓名%Score中元素为学生分数n=length(Name);% %----------------% 优秀| 85-100|% 良好| 70-84 |% 及格| 60-69|% 不及格| 0-60 |% -----------------for i=0:15 A_level{i+1}=85+i; if i<=14 B_level{i+1}=70+i; if i<=9 C_level{i+1}=60+i; end endend%创建存贮成绩等级的单元数组level=cell(1,n);%创建结构体变量S=struct('Name',Name,'Score',Score,'level',level);%根据学生成绩得出相应的等级for i=1:n switch S(i).Score case A_level S(i).level='优秀'; case B_level S(i).level='良好'; case C_level S(i).level='及格'; otherwise S(i).level='不及格'; endendfprintf('你所输入的学生等级如下\n');disp(['学生姓名',blanks(4),'得分',blanks(4),'等级']);for i=1:n r=length(S(i).Name); % fprintf('%s %d %s\n',S(i).Name,S(i).Score,S(i).level) disp([S(i).Name,blanks(10-r),num2str(S(i).Score),blanks(7-r),S(i).level]); end%对成绩进行排序,重新输出排序好的结果for i=1:n-1 for i=1:n-1 if(S(i).Score>S(i+1).Score) temp=S(i); S(i)=S(i+1); S(i+1)=temp; end endend fprintf('排好的顺序是\n'); disp(['学生姓名',blanks(4),'得分',blanks(4),'等级',blanks(5),'排名']); for i=1:n disp([S(i).Name,blanks(6),num2str(S(i).Score),blanks(7),S(i).level,blanks(5),num2str(i)]); end
运行结果
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删