《MATLAB图像处理超级学习手册》一一2.9 MATLAB程序设计

本节书摘来自异步社区出版社《MATLAB图像处理超级学习手册》一书中的第2章,第2.9节,作者:MATLAB技术联盟 , 张岩 更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.9 MATLAB程序设计

MATLAB图像处理超级学习手册
在MATLAB中,提供了很多程序流程控制语句,如数据的输入输出、顺序结构、判断语句、分支语句、循环语句以及其他流程控制函数。

2.9.1 数据的输入和输出
MATLAB中提供的用于数据输入和输出的函数分别为input函数和disp函数,下面将对其进行介绍。

1.数据的输入
在MATLAB中,input函数用于实现数据的输入,该函数的调用格式为:

A=input (提示信息,选项)

其中,提示信息是一个字符串,用于提示用户输入什么样的数据。

A=input('A= ')

如果在input函数调用时采用's'选项,则允许用户输入一个字符串。例如,想输入一个人的姓名,可采用如下命令:

question = input ('What's your name?', 's')

2.数据的输出
在MATLAB中,disp函数用于实现数据的输出,该函数的调用格式为:

disp(输出项)

其中输出项既可以为字符串,也可以为矩阵。

当用disp函数显示矩阵时,将不显示矩阵的名字,而且其格式更紧密,且不留任何没有意义的空行。

【例2-26】求一元二次方程ax2+bx+c=0的根。

a=input('a=');
b=input('b=');
c=input('c=');
d=b*b-4*a*c;
x=[(-b+sqrt(d))/(2*a), (-b-sqrt(d))/(2*a)]
disp(['x1=',num2str(x(1)),',x2=',num2str(x(2))]);

2.9.2 顺序结构
顺序结构是最简单的程序结构,系统在编译程序时,按照程序的物理位置顺序执行。这种程序的优点是容易编制,缺点是结构单一、能够实现的功能有限。例如:

>>r=1;   
h=1; 
s=2*r*pi*h + 2*pi*r^2; 
v=pi*r^2*h;  
disp('The surface area of the colume is:'),disp(s);
disp('The volume of the colume is:'),disp(v);
运行结果如下:

The surface area of the colume is:
  12.5664
The volume of the colume is:
  3.1416

2.9.3 判断语句
在MATLAB中,判断语句可以使程序中的一段代码只在满足一定条件时才执行。if与else或elseif连用,偏向于是非选择,当某个逻辑条件满足时执行if后的语句,否则执行else语句。

1.结构为if…end
当程序只有一个判断语句时,可以选择if…end结构,此时程序结构为:

if 表达式
  执行程序块
end

只有一个判断语句,其中的表达式为逻辑表达式,当表达式为真时,执行相应的语句,否则,直接跳到下一段语句。语句中的end是决不可少的,没有它,在逻辑表达式为0时,就找不到继续执行程序的入口。

【例2-27】判断输入的两个参数a和b是否都大于0,是则返回“a和b都大于0”,否则不返回,程序最后返回“否”。

>>a=input('a=');
b=input('b=');
if a > 0 & b>0
  disp(' a和b都大于0');
end

disp('否');
2.结构为if…else…end
当程序有两个选择时,可以选择 if…else…end 结构, 此时程序结构为:

if 表达式
  执行程序块1
else
  执行程序块2
end

当判断表达式为真时,执行程序块1,否则执行程序块2。

【例2-28】判断输入的两个参数a和b是否都大于0,是则返回“a和b都大于0”,如果不全大于0,则显示“a和b不全都大于0”。

>>a=input('a=');
b=input('b=');
if a > 0 & b>0
  disp(' a和b都大于0');
else
  disp(' a和b不全都大于0');
end

下面的例子为分段函数值的计算。

>>x=input('请输入x的值:');
if x<=0
  y= (x+sqrt(pi))/exp(3);
else
  y=log(x+sqrt(1+x*x))/3;
end

3.结构为if…elseif…else…end
当程序的判断包含多个选择时,可以采用if…elseif…else…end结构,此时程序结构为:

if 表达式1
  执行程序块1
elseif 表达式2
  执行程序块2
elseif ...
...
...
else
  执行程序块
end

其中,可以包含任意多个 elseif 语句。

【例2-29】判断输入学生成绩的所属等级:60以下不合格,60~70中等,70~89良好,90以上优秀。

>>n=input('input the score:')
if n>=0 & n<60 
  A='不合格'
elseif n>=60 & n<70
  A='中等'
elseif n>=70 & n<89
  A='良好'
elseif n>=90 &n<100  
  A='优秀'
else
  A='输入错误'
end

2.9.4 分支语句
在MATLAB 中,还提供了的另一种多选择语句,即分支语句。分支语句的结构为:

switch 分支语句
 case 条件语句
  执行程序块
 case {条件语句1, 条件语句2, 条件语句3, ...}
  执行程序块
 otherwise
  执行程序块
end

其中,分支语句为一个变量(数值或者字符串变量),如果该变量的值与某一条件相符,则执行相应的语句,否则,执行 otherwise 后面的语句。在每一个条件中,可以包含一个条件语句,也可以包含多个条件,当包含多个条件时,以单元数组的形式表示条件。

【例2-30】任意底的对数的实现。

>>A=input('底');
B=input('对数值');
switch a
    case exp(1)
      y = log(B);
    case 2
      y = log2(B);
    case 10
      y = log10(B);
    otherwise
      y = log(B)/log(A);
end

【例2-31】某商场对顾客所购买的商品实行打折销售,标准为:小于200(没有折扣),200~500(5%折扣),500~1 000(8%折扣),1 000~2 500(15%折扣),2 500~5 000(20%折扣),大于等于5 000(25%折扣)。输入所售商品的价格,求其实际销售价格。

>>p=input('输入商品价格');
switch fix(p/100) 
  case {0,1}           %小于200
   r=0;
  case {2,3,4}          %200 ~500
   r=5/100;
  case num2cell(5:9)      % 500~1 000
   r=8/100;
  case num2cell(10:24)     % 1 000~2 500
   r=15/100;
  case num2cell(25:49)     % 2 500~5 000
   r=20/100;
  otherwise            %大于等于5 000
   r=25/100;
end
p=p*(1-r)              %输出商品实际销售价格

2.9.5 for循环语句
在MATLAB中,for语句调用的基本格式如下:

for index=初值:增量:终值
  语句组A
end

其中,A为循环体。

此语句表示把语句组A反复执行N次。循环次数N(需要预先指定)为:N=1+(终值-初值)/增量。在每次执行时程序中的index的值按“增量”增加。

【例2-32】用循环求解 1+2+…+99+100。

>>s=0;
for k=1:100 
    s=s+k;
end

《MATLAB图像处理超级学习手册》一一2.9 MATLAB程序设计

>>s=0;
for k=1:100 
  s=s+1/2^(k+2);
end

2.9.6 for语句的嵌套
for语句的嵌套也称为循环的嵌套,或称为多重循环结构,是指一个循环结构的循环体又包括一个循环结构。

【例2-33】建立一个100阶数组,数组中的每一个元素A(k, n)满足A(k, n)=1/(k+n-1)。

>>for k=1:100
   for n=1:100
     A(k, n)=1/(k+n-1);
   end
end

2.9.7 while循环语句
在MATLAB中,while 语句用于将相同的程序块执行多次(次数不需要预先指定),当条件表达式为真时,执行程序块,直到条件表达式为假。

while 语句的结构为:

while 表达式
   执行程序块
end

【例2-34】用循环求解最小的m,使其满足sumlimits_{i = 1}^m {i > 100} 。

>>s=0; 
 m=0;
 while (s<=100)
   m=m+1; 
   s=s+m; 
 end
上一篇:2.kotlin安卓实践课程-ApiComponent(Api注射器)


下一篇:Docker和宿主机操作系统文件目录互相隔离的实现原理