首页 MATLAB编程练习

MATLAB编程练习

举报
开通vip

MATLAB编程练习编程训练实例 1. 你玩过牌吗?把13张牌反过来(背面朝上)按一定的顺序排列,先把你已经排好的牌第一张取出放在这叠牌的最底层,拿出第二张放在桌面上,然后将第三张取出又放在最底层,取出第四张放在桌子上……直到游戏结束,你依次取出放在桌子上的牌刚好为K,Q,J,10,9,8,7,6,5,4,3,2,A。问你一开始时这13张牌的顺序是怎样的?请你用MATLAB编程解决这个问题?请把程序附上。 %调用格式为chengxu function chengxu a={1,13};k=2;j=1; b={'K','Q','J'...

MATLAB编程练习
编程训练实例 1. 你玩过牌吗?把13张牌反过来(背面朝上)按一定的顺序排列,先把你已经排好的牌第一张取出放在这叠牌的最底层,拿出第二张放在桌面上,然后将第三张取出又放在最底层,取出第四张放在桌子上……直到游戏结束,你依次取出放在桌子上的牌刚好为K,Q,J,10,9,8,7,6,5,4,3,2,A。问你一开始时这13张牌的顺序是怎样的?请你用MATLAB编程解决这个问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 ?请把程序附上。 %调用格式为chengxu function chengxu a={1,13};k=2;j=1; b={'K','Q','J','10','9','8','7','6','5','4','3','2','A'}; %for c=1:4 for i=1:13 if mod(i,2)~=0 a{i}=b{j}; j=j+1; end end for i=2:2:13 if mod(i,4)~=0 a{i}=b{j}; j=j+1; end end for i=4:4:13 if mod(i,8)~=0 a{i}=b{j}; j=j+1; end end a{8}=b{13}; a 或 function f=card() a=1:13; i=1; for j=1:13 n=numel(a); %目前的片数;numle为元数的个数。 a(n+1)=a(1); %在多少张里面取第一张。 a(1)=[]; %将上面取出的第一张牌所在空格剪掉。 b(i)=a(1); %翻出来时桌面上亮出来的牌。 i=i+1; a(1)=[];%随着i自增,取出现的空格为空。(即删除)。 end c={'K','Q','J','10','9','8','7','6','5','4','3','2','A'};%因为10占两位,故用单元 d=cell(1,13);%由BC对应的数,将C中字符型的牌放入由B决定对应的D中。 for k=1:13 r=b(k); d{r}=c{k}; end f=d; 如果把第一张牌放在最底层,第二张放在最底层,取出第三张放在桌子上,依此类推,你最后把所有的牌取出刚好依次是A,2,3,4,5,6,7,8,9,10,J,Q,K. %调用格式为card2 function f=card2() a=1:13; i=1; for j=1:13 n=numel(a); a(n+1)=a(1); a(n+2)=a(2); a(1)=[]; a(1)=[]; b(i)=a(1)    i=i+1; a(1)=[];。 end c={'A','2','3','4','5','6','7','8','9','10','J','Q','K'}; d=cell(1,13); for k=1:13 r=b(k); d{r}=c{k}; end f=d; 课外拓展 按照取出第一张放到最后,然后抽出第二张放在桌子上,依次类推,并且桌子上的牌可以从键盘输入,依次类推,求原来牌的排列。 %调用格式为chengxu function y=chengxu a=input('请输入摆在桌子上的牌','s'); b=numel(a); c=cell(1,b); for i=1:b c{i}=a(i); end e=[]; f=1:b; i=1; for j=1:b n=numel(f); %目前的片数;numle为元数的个数。 f(n+1)=f(1); %在多少张里面取第一张。 f(1)=[]; %将上面取出的第一张牌所在空格剪掉。 e(i)=f(1); %翻出来时桌面上亮出来的牌。 i=i+1; f(1)=[];%随着i自增,取出现的空格为空。(即删除)。 end g=cell(1,b);%由BC对应的数,将C中字符型的牌放入由B决定对应的D中。 for k=1:b r=e(k); g{r}=c{k}; end y=g; 2. 学校要举行篮球循环赛,共有十个队参加比赛,请你安排一下比赛场次,使每队每次打完比赛后至少能隔一场不比赛,以便得到休息保持体力,请你用MATLAB解决这个问题,并给出至少一个比赛日程表。(每队休息的场次越多越好,但每队都应得到的休息大体相同,不能出现某队刚打完比赛,马上和另一个已经休息了若干场的球队比赛,这是不公平的)。 1.编写一个程序,要求输入五个整数,然后由小到大排序再输出. 1.1 %调用形式为:chengxu2([a b c d e f]) function  f=chengxu1(x) for i=1:4 for j=(i+1):5 if x(i)>x(j) a=x(i); x(i)=x(j); x(j)=a; end end end f=(x); 1.2 %编写一个程序,要求输入五个整数,然后由小到大排序再输出 function h=chao1() a=cell(1,5); a=input('Please input five number:','s'); b=str2num(a) fprintf('从小到大排序为:') g=sort(b,'ascend'); disp(g) 1.3 %编写一个程序,要求输入五个整数,然后由小到大排序再输出 function chen1() a=input('Please input Num1:'); b=input('Please input Num2:'); c=input('Please input Num3:'); d=input('Please input Num4:'); e=input('Please input Num5:'); f=[a b c d e]; fprintf('从小到大排序为:') 2. 将一个整型数组的元素按逆序重新存放(如原序为:8,6,5,4改为:4,5,6,8)。 2.1 % 将一个整型数组的元素按逆序重新存放 %调用形式为:chengxu2([a b c d……n]) function f=chengxu2(x) a=numel(x); b=fix(a/2); for i=1:b; j=a-i+1; t=x(i); x(i)=x(j); x(j)=t; end disp(x) 2.2 %将一个整型数组的元素按逆序重新存放 function chao2() a=input('请输入一个数组:'); rot90(a,2) 3. 输入一个字符,如果是大写字母,则将其转换成小写并输出;若是小写则直接输出;若是非字母字符则打印:“Dataerror!”。 3.1 %输入形式为chengxu3('x')其中x为从键盘输入的数字或字母。    function chengxu3(x) if x<=57&x>=48 fprintf('“Dataerror!”\n') elseif x<=90&x>=65 fprintf('%c\n',x+32) elseif x<=122&x>=97 x end 3.2 function f=chao3 m=input('请输入一个字符:','s'); i=isletter(m); if i==0 fprintf('“Dataerror!”\n')  else n=lower(m); disp(n) end 4.    输入一个整数,写一程序输出它是几位数。 %输入形式为chengxu4(x),x为数字。 function f=chengxu4(x) i=0; for j=1:10000  %此处表示可以容纳10000位数字的位数求解 x=x/10; a=fix(x); if a>0 i=i+1; end if a==0 i=i+1; break  end end fprintf('你输入的是%d位数字\n',i); %或写成 i 5.    写一程序求1!+2!+…+10! %调用形式为chengxu5 function chengxu5() j=1;sum=0; for i=1:10 j=i*j; sum=sum+j; end fprintf('10以内的阶乘为 %d\n',sum) %最后一条语句也可为 sum 6.    从键盘上输入a与n的值,计算sum=a+aa+aaa+aaaa+…(共n项)的和。例a=2,n=4,则sum=2+22+222+2222. %调用形式为chengxu6(x,y),其中x y均为数字 function chengxu6(x,y) sum=x;t=x; for i=1:(y-1) t=t+10^i*x; sum=sum+t; end sum 7.    编程求数列1,1/2,1/3 ,1/4 ,1/5 ,……的所有大于等于0.000001的数据项之和并输出结果 %d调用格式为chengxu7 function chengxu7() sum=0; for i=1:10^6 a=1/i; sum=sum+a; end fprintf('所求大于等于0.000001的数据项之和为%d\n',sum); 8.    求3*3矩阵的主对角线元素之和。 %调用形式为必须chengxu8([x1,x2,x3;x4,x5,x6;x7,x8,x9]) function chengxu8(x) sum=0; for i=1:3; j=i; sum=sum+x(i,j); end sum 9.    从键盘输入的10个整数中,找出第一个能被7整除的数。若找到,打印此数后退出循环;若未找到,打印“not  exist”。 %调用形式为chengxu9([x1,x2,x3……x10]) function chengxu9(x) for i=1:10 a=x(i)/7; b=fix(a); if a-b==0 disp(x(i)) break end if i==10 fprintf('not exist\n'); end end 10. 设计一个用于计算个人所有税的程序。假设个人所得税的缴纳标准为:月收入少于等于800元者不纳税;超出800元的部分,纳税5%;超出2000元的部分,纳税10%;超出5000元的部分,纳税20%;超出10000元的部分,纳税30%;超出100000元的部分,纳税40%。 %调用形式为chengxu10(x) function chengxu10(x) if x<=800 g=0; elseif x<=2000 g=(x-800)*0.05; elseif x<=5000 g=1200*0.05+(x-2000)*0.10; elseif x<=10000 g=1200*0.05+3000*0.10+(x-5000)*0.20; elseif x<=100000 g=1200*0.05+3000*0.10+5000*0.20+(x-10000)*0.30; elseif x>100000 g=1200*0.05+3000*0.10+5000*0.20+90000*0.30+(x-10^5)*0.4; end fprintf('您应该纳税:%d\n',g); 11.编写一个程序,用循环结构输出以下图形。 &&&&&&&&& &&&&&&& &&&&& &&& & %调用形式为chengxu11 function chengxu11() for i=9:-2:1 for j=1:i fprintf('&') end fprintf('\n'); end 12.编写一个程序求出1000以内的所有素数。 %调用格式为chengxu12 function chengxu12() for i=1:1000 t=1;j=0; for j=2:i-1 a=mod(i,j); if a==0 t=0; break end end if t>0 fprintf('%d \n',i); end end 或 %调用格式为chengxu12 function chengxu12() a=0;b=0;l=[];k=1; for i=1:1000 for j=2:i-1 a=i/j; b=fix(a); if b-a==0 break end end if a-b>0 k=1+k; l(k)=i; end end l(1)=1; l 13. 输入两个整型变量a,b的值,输出a+b,a-b,a*b,a/b,的结果,要求连同算式一起输出,每个算式占一行。 例:a等于10,b等于5,a+b的结果输成 10+5=15 %调用格式为chengxu13('x')其中x为字符 function chengxu13(x) a=x-1; b=x+1; fprintf('%c %d,%c %d,%c %d \n',a,a,x,x,b,b); 14. 求前驱字符和后继字符。输入一个字符,找出它的前驱字符和后继字符,并按ASCII码值,按从大到小的顺序输出这三个字符及其对应的ASCII码值。 %调用格式为chengxu14('x')其中x为字母 function chengxu14(x) if x=='a'|x=='A' a=x+25; else a=x-1; end if a=='z'|a=='Z' b=a-25; else b=x+1; end fprintf('%c %d,%c %d,%c %d \n',a,a,x,x,b,b); 15. 输入三角形的边长,写一求三角形面积的函数。 (面积=sqrt(s(s-a)(s-b)(s-c)), s=(a+b+c)/2) %输入格式为chengxu15(a,b,c) function chengxu15(a,b,c) s=(a+b+c)/2; mianji=sqrt(s*(s-a)*(s-b)*(s-c)) 16. 输入某个点A的平面坐标(x,y),判断(输出)A点是在圆内、圆外还是在圆周上,其中圆心坐标为(2,2),半径为1 。 %调用格式为chengxu16(x,y) function chengxu16(x,y) a=(x-2)^2; b=(y-2)^2; d=sqrt(a+b); if d==1 fprintf('A点在圆上\n') end if d>1 fprintf('A点在圆外\n') end if d<1 fprintf('A点在圆内\n') end 17. 求爱因斯坦数学题。有一条长阶,若每步跨2阶,则最后剩余1阶;若每步跨3阶,则最后剩2阶;若每步跨5阶,则最后剩4阶;若每步跨6阶,则最后剩5阶;若每步跨7步,最后正好一阶不剩。 %调用格式为chengxu17 function chengxu17() for i=7:1000 if mod(i,2)==1 if mod(i,3)==2 if mod(i,5)==4 if mod(i,6)==5 if mod(i,7)==0 fprintf('%d \n',i); end end end end end end 或 %调用格式为chengxu17 function chengxu17() i=7; while 1 if mod(i,2)==1&mod(i,3)==2&mod(i,5)==4&mod(i,6)==5 i break end i=i+7; end 18.输入一串字符,直到输入一个星号(*)为止,统计(输出)其中的字母个数和数字字符个数。(要求可输入任意字符) %输入的格式为chengxu18('x')其中x为任意的字符但必须含有“*” function chengxu18(x) a=numel(x); j=0;k=0; for i=1:a if x(i)=='*'; break elseif x(i)>= 'a'&x(i)<='z'| x(i)>= 'A'&x(i)<='Z' j=j+1; elseif x(i)>= '0'&x(i)<='9' k=k+1; end end fprintf('字母个数为%d\n数字字符个数为%d\n',j,k);    或 %输入一串字符,直到输入一个星号(*)为止,统计(输出)其中的字母个数和数字字符个数。(要求可输入任意字符) function chengxu18_2 i=1;b=[];m=0;n=0; while 1 a=input('请输入一串字符:\n','s'); if a=='*' break else b=strcat(b,a); end end i=length(b); for i=1:i if b(i)<='z'&b(i)>='a'|b(i)<='Z'&b(i)>='A'; m=m+1; else b(i)<='9'&b(i)>='0' n=n+1; end end fprintf('字母字符个数为%d\n数字字符个数为%d\n',m,n); 19. 从键盘输入一个正整数n,编程判断这个数是否同时含有奇数字和偶数字。 %调用格式为chengxu19(x)其中x为正整数 function chengxu19(x) a=num2str(x); b=numel(a); g=0;k=0; for i=1:b c=mod(a(i),2); if c==0 k=1; break end end for i=1:b c=mod(a(i),2); if c>0 g=1; break end end    if g==1&k==1 fprintf('        Yes!\n'); end if g==0|k==0 fprintf('          No!\n'); end 20. 设某县2000年工业总产值为200亿元,如果该县预计平均年工业总产值增长率为4.5%,那么多少年后该县年工业总产值将超500亿元? %调用格式为chengxu20 function chengxu20() sum=200;a=0;j=0; for i=1:1000 a=sum*0.045; sum=sum+a; j=j+1; if sum-200>=300 break end end fprintf('      %d年后该县年工业总产值将超过500亿元\n',i); 21. (1)输入一个三位数,判断是否是一个“水仙花数”。水仙花数是指三位数的各位数字的立方和等于这个三位数本身。例如:  153=1*1*1+5*5*5+3*3*3 %调用格式为chengxu21_1(x)其中x必须是三位数 function chengxu21_1(x) y=x; a=mod(x,10); x=x/10; b=fix(mod(x,10)); x=x/10; c=fix(x); if y==a*a*a+b*b*b+c*c*c fprintf('  %d是水仙花数\n',y); else fprintf('  %d不是水仙花数\n',y); end (2)一个整数等于该数所有因子之和,则称该数是一个完数。例如:6和28都是完数。因为:6=1+2+3,28=1+2+4+7+14. 输出三位数中所有完数。 %调用格式为chengxu21_(x)其中x为数字 function chengxu21_2(x) sum=0; for i=1:x if mod(x,i)==0 sum=sum+i; end end if sum==2*x fprintf('  %d是一个完数\n',x); end 22. 输入10个数,将10个整数按生序排列输出,并且奇数在前,偶数在后。如果输入的10个数是:10 9 8 7 6 5 4 3 2 1 ,则输出:1 3 5 7 9 2 4 6 8 10。 %输入格式为chengxu22([x1 x2 x3 …… x10]) function chengxu22(x) y=[];d=[];k=1;a=0; for i=1:10 if mod(x(i),2)~=0 d(k)=x(i); k=k+1; end end chengxu(d) k=1; for i=1:10 if mod(x(i),2)==0 d(k)=x(i); k=k+1; end end chengxu(d) function chengxu(d)      ii=numel(d); for i=1:ii y(i)=d(i); end for j=1:ii for r=1:ii-1 if y(r)>y(r+1) t=y(r); y(r)=y(r+1); y(r+1)=t;            end end end fprintf('%d ',y); 23. 将数组a[n]中的每一个元素依次循环向后移动一位。 %调用格式为chengxu23 function chengxu23 x=0; x=input('请输入一个数组a[],输入格式为[a1 a2 a3 ……]\n','s'); x=str2num(x); if x~=0 chengxu(x) end function  f=chengxu(x) a=[]; b=numel(x); for i=1:b-1 a(i+1)=x(i); end for j=1:b-1 fprintf('    a(%d)=%d \n',j+1,a(j+1)); end 24. 将一个正整数n输出成“千分位”形式,即从个位数起,每三位之间加一个逗号,例如,将7654321输出成7,654,321. %调用格式为chengxu24 function chengxu24 x=input('请输入一个整数\n','s'); a=numel(x); x=str2num(x); b=ceil(a/3); for i=1:b a(i)=mod(x,1000) x=fix(x/1000); end for j=b:-1:2 fprintf('%d,',a(j)) end fprintf('%d',a(1)); fprintf('\n'); 25. 求出矩阵a中每行元素的平均值和平均最大的行号。 %调用格式为chengxu25 function chengxu25 m=[];n=[];max=0;k=0;p=[]; a=input('请输入一个矩阵'); c=numel(a); m=a(1,:); b=numel(m); d=c/b; for i=1:d n(i)=sum(a(i,:)); end for i=1:d p(i)=n(i)/b; if n(i)>max max=n(i); k=i; end end fprintf('每行元素的平均值为:\n'); for i=1:d %fprintf('%d  ',p(i)); end fprintf('\n'); fprintf('平均值最大的行号为: %d\n',k); 26. 编写一个函数,找出矩阵A中最大元素和最小元素所在的行列号. %调用格式为chengxu26 function chengxu26 e=1;f=1; g=1;k=1; a=input('请输入一个矩阵'); c=numel(a); m=a(1,:); b=numel(m); d=c/b; min1=a(1,1); max1=a(1,1); for i=1:d for j=1:b if max1<=a(i,j) max1=a(i,j); e=i; f=j; end if min1>=a(i,j) min1=a(i,j); g=i; k=j; end end end fprintf('最大元素所在的行列号为%d %d\n',e,f); fprintf('最小元素所在的行列号为%d %d\n',g,k); 27. 给出年、月、日,计算该日是该年的第几天? %输入的格式为[年 月 日] function chengxu27(x) a=0; if mod(x(1),4)==0&mod(x(1),100)~=0&mod(x(1),400)==0 a=1; end % for i=1:x(2)-1 tian=30*(x(2)-1)+x(3); if x(2)==2|x(2)==4|x(2)==6|x(2)==8 tian=tian+1; elseif x(2)==9|x(2)==10 tian=tian+2; elseif x(2)==11 tian=tian+3; end if x(2)~=1&x(2)~=2 if a==0 tian=tian-1; end end tian 28. 输入数组a,b的元素,用数组a和b构造数组c,使得: c(i)=a(i)-b(i) 当a(i)>b(i)时; c(i)= a(i)+b(i) 当a(i)<=b(i)时; %调用格式为chengxu28 function chengxu28 a=input('请输入数组a输入格式为[x1 x2 ……]\n'); b=input('请输入数组b,b与a的大小相同\n'); d=numel(a);c=[]; for i=1:d if a(i)>b(i) c(i)=a(i)-b(i); elseif a(i)<=b(i) c(i)=a(i)+b(i); end end c *29.写一程序输出四个人的各种排序方式. %调用格式为chengxu29 function chengxu29 a=cell(1,4); for i=1:4 fprintf('请输入第%d',i); a{i}=input('个人的名字以字母形式输入','s'); end i=1;j=1;k=1;l=1;s=0; for i=1:4 for j=1:4 if i~=j  for k=1:4 if k~=i&k~=j for l=1:4 if l~=i&l~=j&l~=k s=1+s; fprintf(' %2d  %-15s  %-15s  %-15s  %-15s\n',s,a{i},a{j},a{k},a{l}); end end end end end end end *30.编写程序求所有各位数字的立方和等于420的三位数. %调用格式为chengxu30 function chengxu30 u=0; for k=100:999 i=k;a=zeros(1,3); for j=1:3 a(j)=mod(i,10); i=fix(i/10); end if a(1)^3+a(2)^3+a(3)^3==420 disp(k) u=1; end end if u==0 fprintf('No this number!!!\n'); end *31.学校要举行篮球循环赛,共有十个队参加比赛,请你安排一下比赛场次,使每队每次打完比赛后至少能隔一场不比赛,以便得到休息从而保持体力,请用matlab解决这个问题,并给出至少一个比赛日程表(每队休息的场次越多越好,但每队得到的休息应大体相同,不能出现某队刚打完比赛,马上和另一个已经休息了诺干场的球队比赛,这是不公平的)。 注:本程序考虑了在一个比赛场地下的单循环问题,只给出了最优解。即让每个队休息最长时间并使休息时间大致相同。如果有一个以上的球场供给比赛,则只需按顺序进行比赛即可。 %调用格式为chengxu31 function chengxu31 a=[1:5]; b=[10:-1:6]; p=0; fprintf('场次      球队  vs  球队\n'); for k=1:9 for i=1:5 p=p+1; fprintf(' %2d        %2d          %2d\n',p,a(i),b(i)); end for j=5:-1:1 a(j+1)=a(j); end a(2)=b(1); b(1)=[]; b(5)=a(6); a(6)=[]; end 第一轮 第二轮 第三轮 第四轮 第五轮 第六轮 第七轮 第八轮 第九轮 1---10 1--- 9 1--- 8 1--- 7 1--- 6 1--- 5 1--- 4 1--- 3 1--- 2 2--- 9 10--- 8 9--- 7 8--- 6 7--- 5 6--- 4 5--- 3 4--- 2 3---10 3--- 8 2--- 7 10--- 6 9--- 5 8--- 4 7--- 3 6--- 2 5---10 4--- 9 4--- 7 3--- 6 2--- 5 10--- 4 9--- 3 8--- 2 7---10 6--- 9 5--- 8 5--- 6 4--- 5 3--- 4 2--- 3 10--- 2 9---10 8--- 9 7--- 8 6--- 7                  
本文档为【MATLAB编程练习】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_597436
暂无简介~
格式:doc
大小:76KB
软件:Word
页数:44
分类:互联网
上传时间:2019-04-23
浏览量:71