admin 管理员组文章数量: 1086019
2024年4月26日发(作者:critical名词形式)
《数学软件》课内实验
27
李倩
王平
13信科
15 3 27
实验03 选择结构程序设计
(第4章 MATLAB程序设计)
一、实验目的
1. 掌握建立和执行M文件的方法。
2. 掌握利用if语句实现选择结构的方法。
3. 掌握利用switch语句实现多分支选择结构的方法。
4. 掌握try语句的使用。
二、实验内容
1.(用if)求分段函数的值
x
2
x6x0且x3
y
x
2
5x60x5且x2及x3
x
2
x1其他
用if语句实现,分别输出x=-5.0,-3.0,1.0,2.0,2.5,3.0,5.0时的y值。
文本编辑器中的程序:
x=input('请输入x的值:');
if x<0&&x~=-3
y=x^2+x-6
1
elseif x<5&&x>=0&&x~=2&&x~=3
y=x^2-5*x+6
else
y=x^2-x-1
end
命令窗口中的运行结果:
请输入x的值:-5.0
y =
14
请输入x的值:-3.0
y =
11
请输入x的值:1.0
y =
2
请输入x的值:2.0
y =
1
请输入x的值:2.5
y =
-0.2500
请输入x的值:3.0
y =
5
请输入x的值:5.0
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=');
if x<=100&&x>=90
disp('成绩:A')
elseif x<=89&&x>=80
disp('成绩:B')
2
elseif x>=70&&x<=79
disp('成绩:C')
elseif x>=60&&x<=69
disp('成绩:D')
elseif x<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=');
switch fix(grades)
case num2cell(90:100)
display('A')
case num2cell(80:89)
display('B')
case num2cell(70:79)
display('C')
case num2cell(60:69)
display('D')
case num2cell(0:59)
display('E')
otherwise
display('输入内容不符合规则,请输入100以内的整数!')
end
命令窗口中的运行结果:
3
3. 工资计算
硅谷公司员工的工资计算方法如下:
(1) 工作时数超过120小时者,超过部分加发15%。
(2) 工作时数低于60小时者,扣发700元。
(3) 其余按每小时84元计发。
试编程按输入的工号和该号员工的工时数,计算应发工资。
文本编辑器窗口中的程序
a=input('员工号: ');
b=input('工时数:');
if b>=120
c=120*84+(b-120)*84*(1+0.15)
elseif b<=60
c=b*84-700
else
c=b*84
end
disp(['工号为',num2str(a),'员工应得工资为',num2str(c)])
命令窗口中的运行结果:
员工号: 289
工时数:125
c =
4
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');
switch x
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
5
输入一个运算符:+
c =
190
m =
24
n =
96
输入一个运算符:-
c =
-72
m =
95
n =
53
输入一个运算符:*
c =
5035
m =
81
n =
22
输入一个运算符:/
c =
3.6818
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 =
6
0.4456 0.6797 0.9597 0.2551 0.5472 0.2543
0.6463 0.6551 0.3404 0.5060 0.1386 0.8143
0.7094 0.1626 0.5853 0.6991 0.1493 0.2435
0.7547 0.1190 0.2238 0.8909 0.2575 0.9293
0.2760 0.4984 0.7513 0.9593 0.8407 0.3500
输入n的值:6
n =
6
B =
0.2760 0.4984 0.7513 0.9593 0.8407 0.3500
ans =
Attempted to access A(6,:); index out of bounds because size(A)=[5,6].
三、实验提示
1.(用if)求分段函数的值
x
2
x6x0且x3
y
x
2
5x60x5且x2及x3
x
2
x1其他
用if语句实现,分别输出x=-5.0,-3.0,1.0,2.0,2.5,3.0,5.0时的y值。
步骤:
(1) 点击MATLAB主窗口的“文本编辑器”按钮,弹出“文本编辑器”窗口。
(2) 在其中输入程序。
(3) (建议先将主窗口中的命令窗口提取出来),点击“保存并运行”按钮
示用何文件名保存该程序,可用默认文件名,或自己起文件名,然后程序运行。
,系统提
7
(4) 若程序无语法错误,则在命令窗口中显示运行结果;否则显示的是错误信息。如有
错,回到文本编辑器进行修改再运行。
本程序要用到input语句,在运行中输入即时数据。注意给出提示信息,下面的参考结
果中的‘输入:x=’是提示信息。
用到标量逻辑“与”运算符 “&&”。注意单个 “&” 是数组逻辑“与”。
本程序要运行7次,因为要输入7个数据,参考结果:
本程序中第一行可为:
x=input(‘输入:x= ’);
之后是if…elseif…else…end语句,其中x是自变量,y是因变量。
最后一行简单输入个y即可。注意其后不加分号,否则不显示y的值。
2.(用if、switch)输出成绩等级
参考例4.5用switch。
用于取整的函数有
fix 向0方向取整
floor 向-∞方向取整
ceil 向+∞方向取整
round 四舍五入到最邻近的整数
8
4. 两位数的加、减、乘、除四则运算
用switch。用if语句处理除数为0。
产生两个两位随机整数可参考下例中的相关用法:
例4.19(递归与非递归)任意排列问题p74
randperm(n) 产生一个从整数1到整数n的任意排列。
编写函数实现randperm(n)的功能,即给出一个由任意数组成的行向量,然后产生这个
行向量元素的任意排列。
%非递归,函数文件
function Y=rndprm1(X)
%RNDPRM1 用for产生一行向量的任意排列
%RNDPRM1(X) 产生行向量X的任意排列
[m,n]=size(X);
if m>1
error(' RNDPRM1只接受列向量的输入');
end
Y=[ ]; %从一个空矩阵开始
l=n; %X的元素个数
for i=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.1 M文件 p56 4.1.1 M文件的分类 用MATLAB语言编写的程序,称M文件,扩展名为m。 M文件按调用方式分为: 命令文件(Script File) 函数文件(Function File) 两种文件的主要区别: 9 (1) 命令文件无输入参数,无返回输出参数; 函数文件可带输入参数,可返回输出参数。 (2) 命令文件对工作空间中的变量操作; 函数文件中定义的变量为局部变量,执行完时,它们被清除。 (3) 命令文件直接执行; 函数文件要以函数调用的方式来调用它。 例4.1(命令文件、函数文件)互换变量a,b的值。 %程序1:建立命令文件,文件名exch.m clc; clear;%清命令窗口,清工作空间 a=1:10; b=[11,12,13,14;15,16,17,18]; tmp=a; a=b; b=tmp; a b a = 11 12 13 14 15 16 17 18 b = 1 2 3 4 5 6 7 8 9 10 %程序2:建立函数文件,取文件名fexch.m 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 = 11 12 13 14 15 16 17 18 b = 1 2 3 4 5 6 7 8 9 10 4.1.2 M文件的建立与打开 p57 1.建立新的M文件 启动文本编辑器有3种方法: (1) 菜单操作 从主窗口的“文件”菜单中选“新建”,再选“空白M-文件”。 10 (2) 命令操作 在命令窗口输入命令edit。 (3) 命令按钮操作 单击主窗口工具栏上的“新建M-文件”按钮。 2.打开已有的M文件(4种方法) (1) 菜单操作 从“文件”菜单中选“打开”,屏幕出现“打开”对话框,再选要打开的M文件。 (2) 命令操作 在命令窗口输入:edit 文件名,打开指定的M文件。 (3) 命令按钮操作 单击工具栏上的“打开文件”按钮,再从弹出的对话框中选所需的M文件。 (4) 在当前目录窗口操作 在当前目录窗口双击要打开的文件名。 4.2 程序控制结构 p58 4.2.1 顺序结构 按照程序中语句的排列顺序依次执行,直到程序的最后一个语句。 1.数据的输入(从键盘输入) A=input(提示信息,选项); 采用's'选项,允许用户输入一个字符串。 A=input('输入矩阵A:'); xm=input('输入姓名:','s'); A xm 输入矩阵A:[1,2,3;4,5,6] 输入姓名:Ling ming A = 1 2 3 4 5 6 xm = Ling ming 2.数据的输出 disp(输出项) 输出项既可为字符串,也可为矩阵。 例4.2(顺序结构)求一元二次方程ax 2 +bx+c=0的根 p59 %p59 clc; a=input('a='); b=input('b='); 11 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。 例4.3(if else)计算分段函数的值p61 2 cos(x1)x1,x10 y x10 xxx, 12 clc; x=input('输入x的值: '); if x==10 y= cos(x+1)+sqrt(x*x+1); else y=x*sqrt(x+sqrt(x)); end y 输入x的值: 10 y = 10.0543 输入x的值: 5 y = 13.4500 (3) 多分支if语句 if 条件1 语句组1 elseif 条件2 语句组2 …… elseif 条件m 语句组m else 语句组n end 语句用于实现多分支选择结构。 例4.4(if elseif)字符转换输出 p62 输入一个字符: 若为大写字母,则输出其小写字母; 若为小写字母,则输出其大写字母; 若为数字字符,则输出其对应的数值; 若为其他字符,则原样输出。 13 c=input('输入一个字符:','s'); if c>='A' && c<='Z'%标量“与”用&& disp(char(abs('a') +abs(c) -abs('A'))); elseif c>='a' && c<='z' disp(char(abs('A') +abs(c)- abs('a'))); elseif c>='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语句的下一句。 例4.5(switch case)打折销售 p63 某商场对商品实行打折销售,标准如下(价格用price表示): price < 200 没有折扣 200 ≤ price < 500 3%折扣 500 ≤ price < 1000 5%折扣 1000 ≤ price < 2500 8%折扣 2500 ≤ price < 5000 10%折扣 14 5000 ≤ price 14%折扣 输入所售商品的价格,求其实际销售价格。 price=input('输入商品价格:'); switch fix(price/100) case {0,1} % 价格<200 rate=0; case {2,3,4} % 200<=价格< 500 rate=3/100; case num2cell(5:9) % 500<=价格<1000 rate=5/100; case num2cell(10:24) % 1000<=价格<2500 rate=8/100; case num2cell(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 catch exception 语句组2 throw(exception); end exception放错误信息,throw(exception)显示exception的内容。 15
版权声明:本文标题:实验03 选择结构程序设计(第4章) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1714127145a666532.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论