您好,欢迎来到华佗健康网。
搜索
您的当前位置:首页实验5.章新磊4222

实验5.章新磊4222

来源:华佗健康网
实验五、选择与循环结构

一、实验目的:

1、 掌握建立和执行M文件的方法。

2、 掌握利用if语句实现选择结构的方法。

3、 掌握利用switch语句实现多分支选择结构的方法。 4、 掌握try语句的使用。

5、 掌握利用for语句实现循环结构的方法。 6、 掌握利用while语句实现循环结构的方法。 7、 熟悉利用向量运算来代替循环的操作方法。 二、实验内容:

1、 列分段函数的值。

x2x6,x0且x32yx5x6,0x10,x2且x3

x2x6,其他要求:

(1) 用if语句实现,分别输出x=-0.5,-3.0,1.0,2.0,2.5,3.0,5.0时的y值。 提示:x的值从键盘输入,可以是向量。

%homework_5_1_1.m x=input('请输入x的值:x='); if (x<0 & x~=-3) y= x.*x + x - 6

elseif (x>=0 & x<10 & x~=2 & x~=3) y=x.*x-5.*x+6 else

y=x.*x-x-6 end

>> homework_5_1

请输入x的值:x=[-0.5 -3.0 1.0 2.0 2.5 3.0 5.0] y =

-5.2500 6.0000 -6.0000 -4.0000 -2.2500 0 14.0000 (2) 用逻辑表达式实现上述函数。

%homework_5_1_2.m

x=input('请输入x的值:x=')

y=(x<0 & x~=-3).*(x.*x+x-6)...

+(x>=0 & x<10 &x~=2 &x~=3).*(x.*x-5.*x+6)... +(x>=10 | x==-3 | x==3 | x==2).*(x.*x-x-6)

>> homework_5_1_2

请输入x=[-0.5 -3.0 1.0 2.0 2.5 3.0 5.0] x =

-0.5000 -3.0000 1.0000 2.0000 2.5000 3.0000 5.0000 y =

-6.2500 6.0000 2.0000 -4.0000 -0.2500 0 6.0000

2、 输入一个百分制成绩,要求输出成绩的等级为A,B,C,D,E。其中90~100分为

A,80~分为B,70~79分为C,60~69分为D,60分以下为E。 要求:

(1)分别用if语句和switch语句实现。

%homework_5_2_1.m clear;

disp(' if_else语句!') x=input('请输入分数:'); if (x<=100 & x>=90) disp('A')

elseif (x>=80 & x<=) disp('B')

elseif (x>=70 & x<=79) disp('C')

elseif (x>=60 & x<=69) disp('D') elseif (x<60) disp('E') end

>> homework_5_2_1 if_else语句! 请输入分数:99 A

>> homework_5_2_1 if_else语句! 请输入分数:50 E

%homework_5_2_1_switch.m clear;

disp(' switch语句!') c=input('请输入成绩:'); switch c

case num2cell(90:100), disp('A');

case num2cell(80:), disp('B'); case num2cell(70:79), disp('C'); case num2cell(60:69), disp('D'); otherwise

disp('E'); end

>> homework_5_2_1_switch

switch语句! 请输入成绩:95 A

(2)输入百分制成绩后要判定该成绩的合理性,对不合理的成绩要输出出错信息。

%homework_5_2_1.m clear;

disp(' if_else语句!') x=input('请输入分数:');

if (x<=100 & x>=90) disp('A')

elseif (x>=80 & x<=) disp('B')

elseif (x>=70 & x<=79) disp('C')

elseif (x>=60 & x<=69) disp('D') elseif (x<60) disp('E') elseif (x<0 | x>100) disp('ERROR') end

>> homework_5_2_1 if_else语句! 请输入分数:120 ERROR

%homework_5_2_1_switch.m clear;

disp(' switch语句!') c=input('请输入成绩:'); switch c

case num2cell(90:100), disp('A');

case num2cell(80:), disp('B'); case num2cell(70:79), disp('C'); case num2cell(60:69), disp('D'); case num2cell(0:59), disp('E'); otherwise

disp('输入错误!'); end

>> homework_5_2_1_switch

switch语句! 请输入成绩:120 输入错误! 3、 建立 5×6矩阵,要求输出矩阵的第n行元素,当n值超过矩阵的行数时,自动转为

输出矩阵最后一行元素、并给出出错信息。

%homework_5_3.m clear; clc; A=eye(6); A(6,:)=[]; A

n=input('输出矩阵的第n行元素,n='); try A(n,:) catch

disp('矩阵只有5行元素!'); end

>> homework_5_3 A =

1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 输出矩阵的第n行元素,n=4 ans =

0 0 0 1 0 0 >> homework_5_3 A =

1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 输出矩阵的第n行元素,n=7 矩阵只有5行元素! 4、 根据

261111求的近似值。当n分别取100、1000、10000122222n2结果是多少?

要求:分别用循环结构和向量运算(使用sum函数)来实现。

%homework_5_4.m clear; disp('循环结构');

n=input('输入循环次数 n= '); y=0; for i=1:n

y=y+1./(i.*i); end

disp(['圆周率=',num2str(sqrt(6.*y))]);

>> homework_5_4 循环结构

输入循环次数 n= 100 圆周率=3.1321 >> homework_5_4 循环结构

输入循环次数 n= 1000 圆周率=3.1406 >> homework_5_4 循环结构

输入循环次数 n= 10000 圆周率=3.1415

%homework_5_4_sum.m clear;

disp('向量运算(使用sum函数)'); n=input('循环次数 n= '); i=1:n; y=1./(i.*i);

disp(['圆周率=',num2str(sqrt(6*sum(y)))]);

>> homework_5_4_sum

向量运算(使用sum函数) 循环次数 n= 100 圆周率=3.1321

>> homework_5_4_sum

向量运算(使用sum函数) 循环次数 n= 1000 圆周率=3.1406

>> homework_5_4_sum

向量运算(使用sum函数) 循环次数 n= 10000 圆周率=3.1415 5、 根据y1111,求: 352n1(1)y3的最大n值。 (2)与(1)的n对应的y。

%homework_5_5.m clear;

y=0;

for i=1:10000 y=y+1./(2.*i-1); if(y>=3) break; end end

y=y-1./(2.*i-1) i=i-1

>> homework_5_5 y =

2.9944 i = 56

6、 一个三位整数各位数字的立方和等于该数的本身则称该数为水仙花数。试输出全部

水仙花数。 要求:

(1)用循环结构实现。

%homework_5_6_1.m %fix(x)向零取整 clear for M=100:999

M3=fix(M./100); %fix(x)向零取整 M2=fix((M-M3.*100)./10); M1=M-100.*M3-10.*M2;

if(M1.*M1.*M1+M2.*M2.*M2+M3.*M3.*M3==M) disp(M); end end

>> homework_5_6_1 153 370 371 407

(2)用向量运算来实现。

提示:全部三位整数组成向量M;分别求M各个元素的个位、十位、百位数字,组成向量M1、M2、M3;向量N=M1.*M1.*M1+M2.*M2.*M2+M3.*M3.*M3;向量K=M-N;显然K中的零元素的序号即M中的水仙花的序号。

%homework_5_6_2.m clear M=100:999;

M3=fix(M./100); %fix(x)向零取整 M2=fix((M-M3.*100)./10); M1=M-100.*M3-10.*M2;

N=M1.*M1.*M1+M2.*M2.*M2+M3.*M3.*M3; K=M-N; M(find(K==0))

>> homework_5_6_2 ans =

153 370 371 407

f11f027、 已知 

f31fnfn12fn2fn3,n3求f1f100中:

(1)最大值、最小值、各数之和。

(2)正数、零、负数的个数。

提示:可以考虑使用Matlab的有关函数实现。

%homework_5_7_1.m clear; zheng=0; ling=0; fu=0; for i=1:100 if(i==1) f(i)=1; elseif(i==2) f(i)=0; elseif(i==3) f(i)=1; else

f(i)=f(i-1)-2.*f(i-2)+f(i-3); end if(f(i)>0) zheng=zheng+1; end if(f(i)==0) ling=ling+1; end if(f(i)<0) fu=fu+1; end end

disp(['max(f)=',num2str(max(f)),blanks(4),'min(f)=',num2str(min(f)),blanks(4),'sum(f)=',num2str(sum(f))]);

disp(['zheng=',num2str(zheng),blanks(4),'ling=',num2str(ling),blanks(4),'fu=',num2s

tr(fu)]);

>> homework_5_7_1

max(f)=437763282635 min(f)=-9412113528 sum(f)=-742745601951 zheng=49 ling=2 fu=49 8、 从数组{1,2,。。。n}随机选出m(m<=n))个不重复的元素.

n=input('n=?'); a=1:n;

m=input('m=?'); b=zeros(size(1:m)); for i=1:m c=unidrnd(n,1); d=a(c); a(c)=a(n); a(n)=d; b(i)=a(n); n=n-1; end b

9、 假定某地区的电话收费标准为:通话时间在3分钟以下,收费为0.5元,3分钟以

上,则每超过1分钟加收0.15元;在7:00~22:00之间通话者,按上述收费标准全价收费,在其它时间通话者,按上述收费标准半价收费。计算某人在t1时刻通话到t2时刻,应交多少电话费。(选做,有挑战性)

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.com 版权所有 湘ICP备2023021991号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务