
一、实验目的:
1、掌握建立和执行M文件的方法。
2、掌握利用if语句实现选择结构的方法。
3、掌握利用switch语句实现多分支选择结构的方法。
4、掌握try语句的使用。
5、掌握利用for语句实现循环结构的方法。
6、掌握利用while语句实现循环结构的方法。
7、熟悉利用向量运算来代替循环的操作方法。
二、实验内容:
1、列分段函数的值。
要求:
(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、根据求的近似值。当n分别取100、1000、10000结果是多少?
要求:分别用循环结构和向量运算(使用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、根据,求:
(1)的最大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
7、已知
求中:
(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=',num2str(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时刻,应交多少电话费。(选做,有挑战性)
