当前位置:文档之家› matlab经典编程例题

matlab经典编程例题

以下各题均要求编程实现,并将程序贴在题目下方。

1.从键盘输入任意个正整数,以0结束,输出那些正整数中的素数。

clc;clear;
zzs(1)=input('请输入正整数:');k=1;
n=0;%素数个数
while zzs(k)~=0
flag=0;%是否是素数,是则为1
for yz=2:sqrt(zzs(k))%因子从2至此数平方根
if mod(zzs(k),yz)==0
flag=1;break;%非素数跳出循环
end
end
if flag==0&zzs(k)>1%忽略0和1的素数
n=n+1;sus(n)=zzs(k);
end
k=k+1;
zzs(k)=input('请输入正整数:');
end
disp(['你共输入了' num2str(k-1) '个正整数。

它们是:'])
disp(zzs(1:k-1))%不显示最后一个数0
if n==0
disp('这些数中没有素数!')%无素数时显示
else
disp('其中的素数是:')
disp(sus)
end
2.若某数等于其所有因子(不含这个数本身)的和,则称其为完全数。

编程求10000以内所有的完全数。

clc;clear;
wq=[];%完全数赋空数组
for ii=2:10000
yz=[];%ii 的因子赋空数组
for jj=2:ii/2 %从2到ii/2考察是否为ii 的因子
if mod(ii,jj)==0
yz=[yz jj];%因子数组扩展,加上jj
end
end
if ii==sum(yz)+1
wq=[wq ii];%完全数数组扩展,加上ii
end
end
disp(['10000以内的完全数为:' num2str(wq)])%输出
3.下列这组数据是美国1900—2000年人口的近似值(单位:百万)。

(1) 若.2c bt at y t y ++=的经验公式为与试编写程序计算出上式中的a 、b 、c;
(2) 若.bt ae y t y =的经验公式为与试编写程序计算出上式中的a 、b;
(3) 在一个坐标系下,画出数表中的散点图(红色五角星),c bx ax y ++=2中
拟合曲线图(蓝色实心线),以及.bt ae y = (黑色点划线)。

(4) 图形标注要求:无网格线,横标注“时间t ”,纵标注“人口数(百万)”,图形
标题“美国1900—2000年的人口数据”。

(5) 程序中要有注释,将你的程序和作好的图粘贴到这里。

clf;clc;clear %清除图形窗、屏幕、工作空间
t=1900:10:2000;
y=[76 92 106 123 132 151 179 203 227 250 281];
p1=polyfit(t,y,2);%二次多项式拟合
y1=polyval(p1,t);%求拟合多项式函数值 …..﹙1﹚ % 显示拟合多项式及其系数a,b,c
disp(char(['y=' poly2str(p1,'t')],['a=' num2str(p1(1)) ' ' 'b=' num2str(p1(2)) ' ' 'c=' num2str(p1(3))])); …..﹙2﹚ yy=log(y);%指数拟合必需的线性化变形
p2=polyfit(t,yy,1);%拟合
b=p2(1);a=exp(p2(2));%求出指数拟合中的a,b
y2=a*exp(b*t);%指数拟合函数式
plot(t,y,'rp',t,y1,t,y2,'k-.');%三类数据作图 …..﹙3﹚ %图形窗的进一步设定
grid off;xlabel('时间t');ylabel('人口数(百万)'); …..﹙4﹚ title('美国1900—2000年的人口数据');
1900191019201930194019501960
1970198019902000
时间t 人口数(百万)美国1900—2000年的人口数据
4.附加题
某正整数的三次方是四位数,四次方是六位数,四位数和六位数的各位数字正好是0~9这十个数字,求此正整数。

clc;clear;
for ii=10:40%10的三次方是最小四位数,40的四次方超过六位i3=num2str(ii^3);i4=num2str(ii^4);%三四次方均转为字符
if length(i3)==4 & length(i4)==6%长度判断
i_34=sort([i3 i4]);%两数合并后升序排列
if isequal(i_34,char(48:57))%是否为0至9字符串
disp(['这个数是' num2str(ii)])
disp(['它的三次方是' i3 ',' '四次方是' i4])
end
end
end。

相关主题