《MATLAB图像处理375例》——1.8 MATLAB程序流程控制结构
本节书摘来自异步社区《MATLAB图像处理375例》一书中的第1章,第1.8节,作者:MATLAB技术联盟著,更多章节内容可以访问云栖社区“异步社区”公众号查看
1.8 MATLAB程序流程控制结构
MATLAB图像处理375例
作为计算机语言,编程是必需的,编程靠的是程序控制语句。计算机语言程序控制模式主要有三大类:顺序结构、选择结构和循环结构。这一点MATLAB与其他编程语言完全一致。
1.8.1 顺序结构
顺序结构是指所有组成程序源代码的语句按照由上至下的次序依次执行,直到程序的最后一个语句。这种程序的优点是容易编制;缺点是结构单一,能够实现的功能有限。
在MATLAB语言的函数中,变量主要有输入变量、输出变量及函数内所使用的变量。
(1)数据输入。
从键盘输入数据,可以使用input函数来进行,该函数的调用格式为:
A=input(提示信息,选项);
其中提示信息为一个字符串,用于提示用户输入什么样的数据。
如果在input函数调用时采用's'选项,则允许用户输入一个字符串。例如,想输入一个人的姓名,可采用命令:
xm=input('hello world','s');
(2)数据输出。
MATLAB提供的命令窗口输出函数主要有disp函数,其调用格式为:
disp(输出项)
其中输出项既可以为字符串,也可以为矩阵。
【例1-64】数据输出示例。
A='MATLAB';
disp(A)
运行结果如下:
MATLAB
【例1-65】输入x,y的值,并将它们的值互换后输出。
x=input('Input x.');
y=input('Input y.');
z=x;
x=y;
y=z;
disp(x);
disp(y);
运行结果如下:
Input x.1
Input y.221
【例1-66】对任一自然数n,按如下法则进行运算:若n为偶数,则将n除2;若n为奇数,则将n乘2加1。将运算结果按上面法则继续运算,重复若干次后计算结果最终是1。
n=input('input n='); %输入数据
while n~=1 r=rem(n,2); %求n/2的余数if r ==0n=n/2 %第一种操作elsen=2*n+1 %第二种操作end
end
运行结果如下:
input n=5
n =32
n =16
n =8
n =4
n =2
n =1
(3)程序的暂停。
暂停程序的执行可以使用pause函数,其调用格式为:
pause(延迟秒数)
如果省略延迟时间,直接使用pause,则将暂停程序,直到用户按任一键后程序继续执行。若要强行中止程序的运行,则可使用Ctrl+C命令。
1.8.2 选择结构
在MATLAB中,选择结构依照不同的判断条件进行判断,然后根据判断的结果选择某一种方法来解决某一个问题。
在MATLAB中,if语句有3种格式。
(1)单分支if语句。
if 条件语句组end
当条件成立时,则执行语句组,执行完之后继续执行if语句的后继语句,若条件不成立,则直接执行if语句的后继语句。
(2)条件判断语句也是程序设计语言中流程控制语句之一。使用该语句,可以选择执行指定的命令,MATLAB语言中的条件判断语句是if-else-end语句。
双分支if语句:
if 条件语句组1else语句组2end
当条件成立时,执行语句组1,否则执行语句组2,语句组1或语句组2执行后,再执行if语句的后继语句。
在程序设计中,也经常碰到需要进行多重逻辑选择的问题,这时可以采用if-else-end语句的嵌套形式:
if〈逻辑判断语句1〉逻辑值1为“真”时的执行语句
elseif〈逻辑判断语句2〉逻辑值2为“真”时的执行语句
elseif〈逻辑判断语句3〉
……
else
当以上所有的逻辑值均为假时的执行语句
end
(3)多分支if语句。
if 条件1语句组1elseif 条件2语句组2……elseif 条件m语句组melse语句组nend
用于实现多分支选择结构。
(4)if-else-end语句所对应的是多重判断选择,而有时也会遇到多分支判断选择的问题。MATLAB语言为解决多分支判断选择提供了switch-case语句。
switch语句根据表达式的取值不同,分别执行不同的语句,其语句格式为:
switch 表达式case 表达式1语句组1case 表达式2语句组2……case 表达式m语句组motherwise语句组nend
与其他的程序设计语言的switch-case语句不同的是,在MATLAB语言中,当其中一个case语句后的条件为真时,switch-case语句不对其后的case语句进行判断,也就是说在MATLAB语言中,即使有多条case判断语句为真,也只执行所遇到的第一条为真的语句。这样就不必像C语言那样,在每条case语句后加上break语句以防止继续执行后面为真的case条件语句。
【例1-67】计算分段函数的值。
程序如下:
x=input('请输入x的值:');
if x<=0y= (x+sqrt(pi))/exp(2)
elsey=sin(x+sqrt(1+x*x))/2
end
运行结果如下:
请输入x的值:1
y =0.3325
【例1-68】输入三角形的三条边,求面积。
程序如下:
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);elsedisp('不能构成一个三角形。')end
运行结果如下:
请输入三角形的三条边:[6 8 10]24
请输入三角形的三条边:[1 1 2]
不能构成一个三角形。
【例1-69】输入一个字符,若为大写字母,则输出其后继字符,若为小写字母,则输出其前导字符,若为其他字符则原样输出。
程序如下:
E=input('','s');If E>='A' & E<='Z'disp(setstr(abs(E)+1));elseif E>='a'& E<='z'disp(setstr(abs(E)-1));elsedisp(c);end
运行结果如下:
A
B
b
a
a
`
*
*
【例1-70】switch语句示例。
程序如下:
a=input('a=?');
switch a case 1 disp('a=1');case {2,3,4} disp('a=2or3or4');case 5disp('a=5');otherwise disp('other value');
end;
运行结果如下:
a=?3
a=2or3or4
a=?6
other value
1.8.3 循环结构
在MATLAB中,循环结构就是在程序中某一条语句或多条语句重复多次的运行。
在MATLAB中,包含两种循环结构:循环次数不确定的while循环,循环次数确定的for循环。这两种不完全相同,各有特色。
(1)for循环结构。
for循环语句是流程控制语句中的基础,使用该循环语句可以以指定的次数重复执行循环体内的语句,其格式为:
for 循环变量=表达式1:表达式2:表达式3
循环体语句
end
其中,表达式1的值为循环变量的初值,表达式2的值为步长,表达式3的值为循环变量的终值。步长为1时,表达式2可以省略。
(2)while循环结构。
while语句可以实现“当”型的循环结构,格式为:
while(表达式)MATLAB语句end
其中,循环判断语句为某种形式的逻辑判断表达式,当该表达式的值为真时,就执行循环体内的语句;当表达式的逻辑值为假时,就退出当前的循环体。
在while循环语句中,必须有可以修改循环控制变量的命令,否则该循环语言将陷入死循环,除非循环语句中有控制退出循环的命令,如break语句、continue命令。当程序流程运行至该命令时,不论循环控制变量是否满足循环判断语句均将退出当前循环,执行循环后的其他语句。
【例1-71】水仙花数是指一个n位数(n≥3),它每个位上的数字的n次幂之和等于它本身。输出全部水仙花数。
程序如下:
for m=100:999
m1=fix(m/100); %求m的百位数字
m2=rem(fix(m/10),10); %求m的十位数字
m3=rem(m,10); %求m的个位数字
if m==m1*m1*m1+m2*m2*m2+m3*m3*m3
disp(m)
end
end
运行结果如下:
153370371407
【例1-72】输入若干个数,当输入0时结束输入,求这些数的平均值和它们的和。
程序如下:
sum=0;
n=0;
val=input('请输入数字 (输入0结束):');
while (val~=0)sum=sum+val;n=n+1;val=input('请输入数字 (输入0结束):');
end
if (n > 0)summean=sum/n
end
运行结果如下:
请输入数字 (输入0结束):1
请输入数字 (输入0结束):2
请输入数字 (输入0结束):3
请输入数字 (输入0结束):4
请输入数字 (输入0结束):5
请输入数字 (输入0结束):0
sum =15
mean =3
1.8.4 程序流程控制语句及其他常用命令
1.break命令
在MATLAB中,break命令通常用于for或while循环语句中,与if语句一起使用,中止本次循环,跳出最内层循环。
【例1-73】break命令示例。
a=5;b=8;
for i=1:4b=b+1;if i>2break %当if条件满足时不再执行循环enda=a+2
end
运行结果如下:
a =7
a =9
2.continue命令
通常用于for或while循环语句中,与if语句一起使用,达到跳过本次循环,去执行下一轮循环的目的。
【例1-74】continue命令示例。
a=5;b=8;
for i=1:4b=b+1;if i<2continue %当if条件满足时不再执行后面语句enda=a+2 %当i<2时不执行该语句
end
运行结果如下:
a =7
a =9
a =11
3.try指令
try语句是MATLAB特有的语句,先试探性地执行语句1,如果出错,就将错误信息存入系统保留变量lasterr中;然后再执行语句2,如果不出错,就转向执行end后面的语句。此语句可以提高程序的容错能力,增加编程的灵活性。该指令的一般结构是:
try
语句1
catch
语句2
end
【例1-75】已知某图像文件,但不知其存储格式为.bmp还是.jpg,试编程正确读取该图像文件。
trypicture=imread('tire.bmp','bmp');filename='tire.bmp';
catchpicture=imread('tire.tif','tif');filename='tire. tif ';
end
filename
运行结果如下:
filename
filename =
tire.bmp
【例1-76】先求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘。
A=magic(2); B=[7,8;10,11];
tryC=A*B;
catchC=A.*B;
end
C
lasterr %显示出错原因
运行结果如下:
C =37 4148 54
ans =
SWITCH 表达式必须为标量或字符串常量
《MATLAB图像处理375例》——1.8 MATLAB程序流程控制结构相关推荐
- 已锁定最新绘图 matlab,《MATLAB图像处理375例》——2.2 三维绘图
本节书摘来自异步社区<MATLAB图像处理375例>一书中的第2章,第2.2节,作者:MATLAB技术联盟著,更多章节内容可以访问云栖社区"异步社区"公众号查看 2.2 ...
- matlab图像处理代码实例,MATLAB图像处理375例-程序代码
[实例简介] [实例截图] [核心代码] 2015图像处理代码 ├── chapter1 │ ├── ex1_1.m │ ├── ex1_13.m │ ├── ex1_14.m │ ├ ...
- python 程序流程控制结构-【笔记】《python语言程序设计》——程序的控制结构...
一.前言 学习就是一个不断的自下而上,自上而下的过程. 前段时间,学着用python实现网站的数据爬取,隐约get到python的一些语法和用法,感觉就是语法不难,关键在于解决问题的思维. 这是需求驱 ...
- matlab 图像处理 新浪 应变,[转载]Matlab图像处理小结
经常做做图像处理的东西,时间长了,有些函数就忘了,看到网上有人总结,收藏了. 1. 图像和图像数据 缺省情况下,MATLAB将图像中的数据存储为双精度类型(double),64位浮点数,所需存储量很大 ...
- matlab 图像处理 ppt,第五章 matlab在数字图像处理中的应用.ppt
1.第五章 matlab在数字图像处理中的应用,数字图像的读入,A=imread(filename,fmt): 将文件名为filename,扩展名为fmt(图像文件格式)表示的图像文件中的数据读到矩阵 ...
- 高斯金字塔matlab,图像处理之高斯金字塔(matlab)
高斯金字塔可以作为 图像特征提取 的预处理步骤 ---------------------------------------------------------------------------- ...
- python 程序流程控制结构-Python基础—程序控制结构
程序控制结构 1.条件判断语句if...else 根据条件选择执行方向 单分支结构 if <条件>: <语句块> 二分支结构 if <条件>: <语句块> ...
- python 程序流程控制结构-python之流程控制语句
通常情况下,python脚本总是安顺序执行的, 不过对于一些复杂的程序,可能需要根据执行过程中出现的不同的情况选择执行一部分语句而跳过另外一部分语句,或者重复执行某一部分语句,这时候就需要python ...
- Matlab 图像处理的一些杂记
图像直方图均衡- - Tag: matlab 图像处理 直方图均衡 % 数字图像处理程序作业 % 本程序能将JPG格式的彩色图像文件灰度化并进行直方图均衡 % % 输入文件:Pic ...
最新文章
- c语言函数传参时候的类型强制装换
- 修改表格字体颜色_CAD表格文字样式失灵?不,你错了
- let/var的使用详解
- sobel算子原理以及运用
- 通用后台管理系统(ExtJS 4.2 + Spring MVC 3.2 + Hibernate)
- 华农计算机学院院长,华农大生命科学技术学院副院长到武生院任职
- すぬけ君の塗り絵 / Snuke's Coloring(AtCoder-2068)
- c c 语言编程项目实例,实例分享cmake编译一个简单c++项目(demo)
- python debug工具_极简Python DeBug工具——PySnooper
- react-native相机
- python ui自动化测试仪器_python UI自动化测试
- Android AsyncTask源码解析
- IP地址 0.0.0.0 是什么意思?
- ajax更换内容执行函数,在ajax成功调用另一个ajax函数
- 极品飞车ol服务器连接不稳定,极品飞车OL常见客户端问题有哪些_客户端问题解决方法_3DM网游...
- 【编码-纠错码】通信编码中的R-S编码方式
- linux下cpp文件,linux怎么编译cpp文件?
- hp linux 禁用u盘启动项,惠普台式机UEFI BIOS设置U盘启动
- 60个有趣的经济学定律!
- 利用谷歌地图模拟地图坐标数据
热门文章
- java中输出时间12小时制转换为24小时制显示
- keystore文件_如何手动给APK文件签名
- 操作系统饥饿现象_操作系统常见面试题
- 思科怎么隐藏端口_这些著名商标下的隐藏设计,你能发现吗?
- 南昌理工学院的计算机科学与技术专业怎么样,南昌理工学院有哪些专业及什么专业好...
- 语言里怎么防误输_育儿知识|我们的孩子为什么会怕输?
- java 数据排序需求分析_java 实现数组全排序
- python数字倒序
- oracle 11g 忘记了sys,system,scott密码
- 《Python程序设计》教学大纲