实验03选择结构程序设计第4章.docx
- 文档编号:18591128
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:25
- 大小:108.71KB
实验03选择结构程序设计第4章.docx
《实验03选择结构程序设计第4章.docx》由会员分享,可在线阅读,更多相关《实验03选择结构程序设计第4章.docx(25页珍藏版)》请在冰点文库上搜索。
实验03选择结构程序设计第4章
、
实验03选择结构程序设计
(第4章MATLAB程序设计)
一、实验目的
1.掌握建立和执行M文件的方法。
2.掌握利用if语句实现选择结构的方法。
`
3.掌握利用switch语句实现多分支选择结构的方法。
4.掌握try语句的使用。
二、实验内容
1.(用if)求分段函数的值
用if语句实现,分别输出x=,,,,,,时的y值。
文本编辑器中的程序:
…
x=input('请输入x的值:
');
ifx<0&&x~=-3
y=x^2+x-6
elseifx<5&&x>=0&&x~=2&&x~=3
y=x^2-5*x+6
else
y=x^2-x-1
end
!
命令窗口中的运行结果:
请输入x的值:
y=
14
请输入x的值:
y=
11
!
请输入x的值:
y=
2
请输入x的值:
y=
1
请输入x的值:
y=
¥
请输入x的值:
y=
5
请输入x的值:
y=
19
2.(用if、switch)输出成绩等级
:
输入一个百分制成绩,要求输出成绩等级A、B、C、D、E。
其中90分~100分为A,80分~89分为B,79分~79分为C,60分~69分为D,60分以下为E。
要求:
(1)分别用if语句和switch语句实现。
(2)要求输入百分制成绩后要判断该成绩的合理性,对不合理的成绩应输出出错信息。
用if语句实现:
文本编辑器窗口中的程序:
x=input('输入一个百分制成绩:
x=');
%
ifx<=100&&x>=90
disp('成绩:
A')
elseifx<=89&&x>=80
disp('成绩:
B')
elseifx>=70&&x<=79
disp('成绩:
C')
elseifx>=60&&x<=69
disp('成绩:
D')
?
elseifx<60
disp('成绩:
E')
else
disp('输入内容不符合规则,请输入100以内的整数!
')
end
命令窗口中的运行结果:
|
输入一个百分制成绩:
x=78
成绩:
C
输入一个百分制成绩:
x=54
成绩:
E
输入一个百分制成绩:
x=83
成绩:
B
输入一个百分制成绩:
x=63
成绩:
D
:
输入一个百分制成绩:
x=209
输入内容不符合规则,请输入100以内的整数!
输入一个百分制成绩:
x=98
成绩:
A
用switch语句实现:
文本编辑器窗口中的程序:
grades=input('请输入百分制成绩:
grades=');
switchfix(grades)
<
casenum2cell(90:
100)
display('A')
casenum2cell(80:
89)
display('B')
casenum2cell(70:
79)
display('C')
casenum2cell(60:
69)
display('D')
!
casenum2cell(0:
59)
display('E')
otherwise
display('输入内容不符合规则,请输入100以内的整数!
')
end
命令窗口中的运行结果:
·
3.工资计算
硅谷公司员工的工资计算方法如下:
(1)工作时数超过120小时者,超过部分加发15%。
(2)工作时数低于60小时者,扣发700元。
(3)其余按每小时84元计发。
试编程按输入的工号和该号员工的工时数,计算应发工资。
文本编辑器窗口中的程序
~
a=input('员工号:
');
b=input('工时数:
');
ifb>=120
c=120*84+(b-120)*84*(1+
elseifb<=60
c=b*84-700
else
c=b*84
#
end
disp(['工号为',num2str(a),'员工应得工资为',num2str(c)])
命令窗口中的运行结果:
员工号:
289
?
工时数:
125
c=
10563
工号为289员工应得工资为10563
员工号:
89
工时数:
98
c=
8232
)
工号为89员工应得工资为8232
员工号:
876
工时数:
57
c=
4088
工号为876员工应得工资为4088
4.两位数的加、减、乘、除四则运算
}
设计程序,完成两位数的加、减、乘、除四则运算,即产生两个两位随机整数,再输入一个运算符号,做相应的运算,并显示相应的结果。
文本编辑器中的程序:
x1=10+(99-10)*rand
(1);
x2=10+(99-10)*rand
(1);
m=fix(x1)
n=fix(x2)
x=input('输入一个运算符:
','s');
#
switchx
case{'+'}
c=m+n;
case{'-'}
c=m-n;
case{'*'}
c=m*n;
case{'/'}
"
c=m/n;
otherwise
c='false';
end
c
命令窗口中运行结果:
m=
》
95
n=
95
输入一个运算符:
+
c=
190
m=
24
《
n=
96
输入一个运算符:
-
c=
-72
m=
95
n=
。
53
输入一个运算符:
*
c=
5035
m=
81
n=
22
《
输入一个运算符:
/
c=
5.(用try…catch)建立5×6矩阵,要求输出矩阵第n行元素
要求:
当n值超过矩阵的行数时,自动转为输出矩阵最后一行元素,并给出出错信息。
程序:
A=input('输入A的值:
')
—
n=input('输入n的值:
')
try
B=A(n,:
);
catch
B=A(5,:
);
end
B
$
lasterr
运行结果:
输入A的值:
rand(5,6)
A=
、
输入n的值:
6
n=
6
B=
ans=
:
AttemptedtoaccessA(6,:
);indexoutofboundsbecausesize(A)=[5,6].
三、实验提示
1.(用if)求分段函数的值
用if语句实现,分别输出x=,,,,,,时的y值。
步骤:
(1)点击MATLAB主窗口的“文本编辑器”按钮
,弹出“文本编辑器”窗口。
$
(2)在其中输入程序。
(3)(建议先将主窗口中的命令窗口提取出来),点击“保存并运行”按钮
,系统提示用何文件名保存该程序,可用默认文件名,或自己起文件名,然后程序运行。
(4)若程序无语法错误,则在命令窗口中显示运行结果;否则显示的是错误信息。
如有错,回到文本编辑器进行修改再运行。
本程序要用到input语句,在运行中输入即时数据。
注意给出提示信息,下面的参考结果中的‘输入:
x=’是提示信息。
用到标量逻辑“与”运算符“&&”。
注意单个“&”是数组逻辑“与”。
本程序要运行7次,因为要输入7个数据,参考结果:
:
本程序中第一行可为:
x=input(‘输入:
x=’);
之后是if…elseif…else…end语句,其中x是自变量,y是因变量。
最后一行简单输入个y即可。
注意其后不加分号,否则不显示y的值。
2.(用if、switch)输出成绩等级
参考例用switch。
用于取整的函数有
)
fix向0方向取整
floor向-∞方向取整
ceil向+∞方向取整
round四舍五入到最邻近的整数
4.两位数的加、减、乘、除四则运算
用switch。
用if语句处理除数为0。
产生两个两位随机整数可参考下例中的相关用法:
例(递归与非递归)任意排列问题p74
?
randperm(n)产生一个从整数1到整数n的任意排列。
编写函数实现randperm(n)的功能,即给出一个由任意数组成的行向量,然后产生这个行向量元素的任意排列。
%非递归,函数文件
functionY=rndprm1(X)
%RNDPRM1用for产生一行向量的任意排列
%RNDPRM1(X)产生行向量X的任意排列
[m,n]=size(X);
ifm>1
;
error('RNDPRM1只接受列向量的输入');
end
Y=[];%从一个空矩阵开始
l=n;%X的元素个数
fori=1:
n
k=1+fix(l*rand);%随机选择Y的下一个元素的位置,rand等价于rand
(1),0 x=X(k);%被选择的元素 Y=[Y,x];%将x添加到Y中 ' X(k)=[];%从X中删除x元素 l=l-1;%更新X的元素个数 end 5.建立5×6矩阵,要求输出矩阵第n行元素 用try…catch…end语句。 可用随机函数rand自动生成矩阵。 四、教程: 第4章MATLAB程序设计(1/3) 4.1M文件p56 ¥ 4.1.1M文件的分类 用MATLAB语言编写的程序,称M文件,扩展名为m。 M文件按调用方式分为: 命令文件(ScriptFile) 函数文件(FunctionFile) 两种文件的主要区别: (1)命令文件无输入参数,无返回输出参数; 函数文件可带输入参数,可返回输出参数。 ~ (2)命令文件对工作空间中的变量操作; 函数文件中定义的变量为局部变量,执行完时,它们被清除。 (3)命令文件直接执行; 函数文件要以函数调用的方式来调用它。 例(命令文件、函数文件)互换变量a,b的值。 %程序1: 建立命令文件,文件名 clc;clear;%清命令窗口,清工作空间 a=1: 10; 】 b=[11,12,13,14;15,16,17,18]; tmp=a;a=b;b=tmp; a b a= 11121314 15161718 b= - 12345678910 %程序2: 建立函数文件,取文件名 function[x,y]=fexch(a,b)%a,b为局部变量 x=b;y=a; %调用函数文件 x=1: 10; y=[11,12,13,14;15,16,17,18]; [x,y]=fexch(x,y) > a= 11121314 15161718 b= 12345678910 4.1.2M文件的建立与打开p57 1.建立新的M文件 启动文本编辑器有3种方法: [ (1)菜单操作 从主窗口的“文件”菜单中选“新建”,再选“空白M-文件”。 (2)命令操作 在命令窗口输入命令edit。 (3)命令按钮操作 单击主窗口工具栏上的“新建M-文件”按钮。 2.打开已有的M文件(4种方法) (1)菜单操作 $ 从“文件”菜单中选“打开”,屏幕出现“打开”对话框,再选要打开的M文件。 (2)命令操作 在命令窗口输入: edit文件名,打开指定的M文件。 (3)命令按钮操作 单击工具栏上的“打开文件”按钮,再从弹出的对话框中选所需的M文件。 (4)在当前目录窗口操作 在当前目录窗口双击要打开的文件名。 程序控制结构p58 。 4.2.1顺序结构 按照程序中语句的排列顺序依次执行,直到程序的最后一个语句。 1.数据的输入(从键盘输入) A=input(提示信息,选项); 采用's'选项,允许用户输入一个字符串。 A=input('输入矩阵A: '); xm=input('输入姓名: ','s'); A … xm 输入矩阵A: [1,2,3;4,5,6] 输入姓名: Lingming A= 123 456 xm= Lingming — 2.数据的输出 disp(输出项) 输出项既可为字符串,也可为矩阵。 例(顺序结构)求一元二次方程ax2+bx+c=0的根p59 %p59 clc; a=input('a='); b=input('b='); ~ c=input('c='); d=b*b-4*a*c; x=[-b+sqrt(d),-b-sqrt(d)]/(2*a); disp(['x1=',num2str(x (1)),... ',x2=',num2str(x (2))]); a=1 b=-5 c=6 】 x1=3,x2=2 3.程序的暂停 pause(延迟秒数) pause暂停程序,按任一键程序继续执行。 Ctrl+c强行中止程序的运行。 4.2.2选择结构p60 1.if语句(3种格式) … (1)单分支if语句 if条件 语句组 end 条件成立,执行语句组;否则不执行语句组。 (2)双分支if语句 if条件 语句组1 ? else 语句组2 end 条件成立,执行语句组1;否则执行语句组2。 例(ifelse)计算分段函数的值p61 clc; x=input('输入x的值: '); * ifx==10 y=cos(x+1)+sqrt(x*x+1); else y=x*sqrt(x+sqrt(x)); end y 输入x的值: 10 y= ( 输入x的值: 5 y= (3)多分支if语句 if条件1 语句组1 elseif条件2 — 语句组2 …… elseif条件m 语句组m else 语句组n end 语句用于实现多分支选择结构。 ! 例(ifelseif)字符转换输出p62 输入一个字符: 若为大写字母,则输出其小写字母; 若为小写字母,则输出其大写字母; 若为数字字符,则输出其对应的数值; 若为其他字符,则原样输出。 c=input('输入一个字符: ','s'); ifc>='A'&&c<='Z'%标量“与”用&& } disp(char(abs('a')+abs(c)-abs('A'))); elseifc>='a'&&c<='z' disp(char(abs('A')+abs(c)-abs('a'))); elseifc>='0'&&c<='9' disp(abs(c)-abs('0')); else disp(c); end%setstr用char代替,setstr将淘汰 > 输入一个字符: a A 输入一个字符: B b 输入一个字符: 5 5 输入一个字符: & & ( 2.switch语句 根据表达式的取值,分别执行不同的语句。 switch表达式 case表达式1 语句组1 case表达式2 语句组2 …… ( case表达式m 语句组m otherwise 语句组n end 当任意一个分支的语句执行完后,直接执行switch语句的下一句。 例(switchcase)打折销售p63 某商场对商品实行打折销售,标准如下(价格用price表示): \ price<200没有折扣 200≤price<5003%折扣 500≤price<10005%折扣 1000≤price<25008%折扣 2500≤price<500010%折扣 5000≤price14%折扣 输入所售商品的价格,求其实际销售价格。 price=input('输入商品价格: '); switchfix(price/100) case{0,1}%价格<200 rate=0; case{2,3,4}%200<=价格<500 rate=3/100; casenum2cell(5: 9)%500<=价格<1000 rate=5/100; casenum2cell(10: 24)%1000<=价格<2500 rate=8/100; casenum2cell(25: 49)%2500<=价格<5000 rate=10/100; otherwise%5000<=价格 rate=14/100; end price=price*(1-rate)%输出商品实际销售价格 输入商品价格: 2300 price= 2116 3.try语句 try 语句组1 catch 语句组2 lasterr end 先试探性执行语句组1; 若语句组1在执行过程中出错,则将错误信息赋给lasterr变量,并转去执行语句组2。 新用法: try 语句组1 catchexception 语句组2 throw(exception); end exception放错误信息,throw(exception)显示exception的内容。 例(trycatch)矩阵乘法和点乘p64 矩阵乘法运算要求两矩阵的维数相容,否则出错。 先求两矩阵乘积,若出错,则转去求两矩阵点乘。 clc; A=[1,2,3;4,5,6];B=[7,8,9;10,11,12]; try C=A*B; catch C=A.*B; lasterr%显示出错原因 end C C= 71627 405572 ans= Errorusing==>mtimes Innermatrixdimensionsmustagree.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 03 选择 结构 程序设计