当前位置:文档之家› 实验六 自定义函数

实验六 自定义函数

实验六自定义函数
实验目的:熟悉Matlab自定义函数的定义和调用方法
实验内容:
2. 编写程序,在主程序中提示用户输入一组数字,编写子程序文件
find_div2.m找出能被2整除的数字,find_max_min.m找出输入数字中的最大值和最小值之和,find_averag求出输入数字的平均值,sort_number对数字进行排序,在主程序中调用子程序并且把上述结果输出。

例如输入的数字为1,2,3,4,5,要求输出格式为:输入数字中能被2整除的数为:2,4
输入数字中最大值与最小值之和为:5+1=6
输入数字的平均值为:3
输入数字从大到小排序为:5,4 3,2,1
主程序:
clear,clc
s=input('请输入一组数字:','s');
x=str2num(s);
find_div2(x);
find_max_min(x);
find_averag(x);
sort_number(x);
子程序:
function find_div2(x)
b=length(x);
for i=1:b
A(i)=x(i); end
c=find(rem(A,2)==0);
A=A(c);
disp(['输入数字中能被2整除的数为:',num2str(A)])
子程序:
function find_max_min(x)
a=max(x);
b=min(x);
c=a+b;
disp(['输入数字中最大值与最小值之和为:',num2str(a),'+',num2str(b),'=',num2str(c)
子程序:
function find_averag(x) a=mean(x);
disp(['输入数字的平均值为: ',num2str(a)])
子程序:
f unction sort_number(x)
a=sort(x);
b=fliplr(a);
disp(['输入数字从大到小排序为:',num2str(b)])
运行结果:
请输入一组数字:0 1 2 3 4 5 6 7 8 0 0 10 41 12
输入数字中能被2整除的数为:0 2 4 6 8 0 0 10
12
输入数字中最大值与最小值之和为:41+0=41
输入数字的平均值为: 7.0714
输入数字从大到小排序为:41 12 10 8 7 6 5 4 3
2 1 0 0 0
3. 试改写实验六中的第二题程序,把判断闰年和计算天数的程序分
别编写为两个函数文件leapyear.m和countday.m,并在主程序中输入要计算的年、月、日,实现对这两个函数的调用,输出信息说明该天是一年的第几天。

主程序:
clear,clc
year=input('请输入年份: ');
while year<=0||year~=floor(year)
disp('输入年份有错!');
year=input('请重新输入年份: ');
end
year=leapyear(year);
month=input('请输入月份: ');
while month<0||month>13||month~=floor(month)
disp('输入月份有错!');
month=input('请输重新入月份: ');
end
day=input('请输入日期: ');
switch month
case {1,3,5,7,8,10,12}
while day<1||day>31||day~=floor(day)
disp('输入日期有错!');
day=input('请输重新入日期: ');
end
case {4,6,9,11}
while day<1||day>31||day~=floor(day)
disp('输入日期有错!');
day=input('请输重新入日期: ');
end
otherwise
if(rem(year,4)==0&&rem(year,100)~=0)||rem(year,400)==0 while day<1||day>29||day~=floor(day)
disp('输入日期有错!');
day=input('请输重新入日期: ');
end
else
while day<1||day>28||day~=floor(day)
disp('输入日期有错!');
day=input('请输重新入日期: ');
end
end
end
day=countday(year,month,day);
子程序:
function year=leapyear(year)
if(rem(year,4)==0&&rem(year,100)~=0)||rem(year,400)==0 disp(' 这一年是闰年。

');
else
disp(' 这一年是平年。

');
end
子程序:
function day=countday(year,month,day)
i=month;
while i~=1
switch i
case 1
day=day;
case{2 4 6 8 9 11}
day=day+31;
case 3
day=day+28;
case {5 7 10 12}
day=day+30;
end
i=i-1;
end
if(rem(year,4)==0&&rem(year,100)~=0)||rem(year,400)==0&&month>2 disp([num2str(year),'年的第',num2str(day+1),'天'])
else
disp([num2str(year),'年的第',num2str(day),'天'])
end
运行结果:
请输入年份: 2000
这一年是闰年。

请输入月份: 3
请输入日期: 1
2000年的第61天
4. 函数的嵌套调用:把f(x)=g(x)/x,g(x)=sin(x)+sin(2x)+sin(3x)编写
为两个子函数文件,在主函数中画出函数fx的图像,x的范围为-2pi~2pi。

主程序: clear,close,clc x=-2*pi:0.01:2*pi; global y; g(x);f(x); plot(x,y,'k-')
title('函数f(x)的图象'); 子程序: function g(x) global k;
k=sin(x)+sin(2*x)+sin(3*x);
子程序: function f(x) global k y; y=k./x;
-8
-6-4-202468
函数f(x)的图象。

相关主题