MATLAB编程练习doc.docx
《MATLAB编程练习doc.docx》由会员分享,可在线阅读,更多相关《MATLAB编程练习doc.docx(30页珍藏版)》请在冰豆网上搜索。
MATLAB编程练习doc
编程训练实例
1.
你玩过牌吗?
把13张牌反过来(背面朝上)按一定的顺序排列,先把你已经排好的牌第一张取出放在这叠牌的最底层,拿出第二张放在桌面上,然后将第三张取出又放在最底层,取出第四张放在桌子上……直到游戏结束,你依次取出放在桌子上的牌刚好为K,Q,J,10,9,8,7,6,5,4,3,2,A。
问你一开始时这13张牌的顺序是怎样的?
请你用MATLAB编程解决这个问题?
请把程序附上。
%调用格式为chengxu
functionchengxu
a={1,13};k=2;j=1;
b={'K','Q','J','10','9','8','7','6','5','4','3','2','A'};
%forc=1:
4
fori=1:
13
ifmod(i,2)~=0
a{i}=b{j};
j=j+1;
end
end
fori=2:
2:
13
ifmod(i,4)~=0
a{i}=b{j};
j=j+1;
end
end
fori=4:
4:
13
ifmod(i,8)~=0
a{i}=b{j};
j=j+1;
end
end
a{8}=b{13};
a
或
functionf=card()
a=1:
13;
i=1;
forj=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中。
fork=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
functionf=card2()
a=1:
13;
i=1;
forj=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);
fork=1:
13
r=b(k);
d{r}=c{k};
end
f=d;
课外拓展
按照取出第一张放到最后,然后抽出第二张放在桌子上,依次类推,并且桌子上的牌可以从键盘输入,依次类推,求原来牌的排列。
%调用格式为chengxu
functiony=chengxu
a=input('请输入摆在桌子上的牌','s');
b=numel(a);
c=cell(1,b);
fori=1:
b
c{i}=a(i);
end
e=[];
f=1:
b;
i=1;
forj=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中。
fork=1:
b
r=e(k);
g{r}=c{k};
end
y=g;
2.学校要举行篮球循环赛,共有十个队参加比赛,请你安排一下比赛场次,使每队每次打完比赛后至少能隔一场不比赛,以便得到休息保持体力,请你用MATLAB解决这个问题,并给出至少一个比赛日程表。
(每队休息的场次越多越好,但每队都应得到的休息大体相同,不能出现某队刚打完比赛,马上和另一个已经休息了若干场的球队比赛,这是不公平的)。
1.编写一个程序,要求输入五个整数,然后由小到大排序再输出.
1.1
%调用形式为:
chengxu2([abcdef])
functionf=chengxu1(x)
fori=1:
4
forj=(i+1):
5
ifx(i)>x(j)
a=x(i);
x(i)=x(j);
x(j)=a;
end
end
end
f=(x);
1.2
%编写一个程序,要求输入五个整数,然后由小到大排序再输出
functionh=chao1()
a=cell(1,5);
a=input('Pleaseinputfivenumber:
','s');
b=str2num(a)
fprintf('从小到大排序为:
')
g=sort(b,'ascend');
disp(g)
1.3
%编写一个程序,要求输入五个整数,然后由小到大排序再输出
functionchen1()
a=input('PleaseinputNum1:
');
b=input('PleaseinputNum2:
');
c=input('PleaseinputNum3:
');
d=input('PleaseinputNum4:
');
e=input('PleaseinputNum5:
');
f=[abcde];
fprintf('从小到大排序为:
')
2.将一个整型数组的元素按逆序重新存放(如原序为:
8,6,5,4改为:
4,5,6,8)。
2.1
%将一个整型数组的元素按逆序重新存放
%调用形式为:
chengxu2([abcd……n])
functionf=chengxu2(x)
a=numel(x);
b=fix(a/2);
fori=1:
b;
j=a-i+1;
t=x(i);
x(i)=x(j);
x(j)=t;
end
disp(x)
2.2
%将一个整型数组的元素按逆序重新存放
functionchao2()
a=input('请输入一个数组:
');
rot90(a,2)
3.输入一个字符,如果是大写字母,则将其转换成小写并输出;若是小写则直接输出;若是非字母字符则打印:
“Dataerror!
”。
3.1
%输入形式为chengxu3('x')其中x为从键盘输入的数字或字母。
functionchengxu3(x)
ifx<=57&x>=48
fprintf('“Dataerror!
”\n')
elseifx<=90&x>=65
fprintf('%c\n',x+32)
elseifx<=122&x>=97
x
end
3.2
functionf=chao3
m=input('请输入一个字符:
','s');
i=isletter(m);
ifi==0
fprintf('“Dataerror!
”\n')
elsen=lower(m);
disp(n)
end
4.输入一个整数,写一程序输出它是几位数。
%输入形式为chengxu4(x),x为数字。
functionf=chengxu4(x)
i=0;
forj=1:
10000%此处表示可以容纳10000位数字的位数求解
x=x/10;
a=fix(x);
ifa>0
i=i+1;
end
ifa==0
i=i+1;
break
end
end
fprintf('你输入的是%d位数字\n',i);%或写成i
5.写一程序求1!
+2!
+…+10!
%调用形式为chengxu5
functionchengxu5()
j=1;sum=0;
fori=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),其中xy均为数字
functionchengxu6(x,y)
sum=x;t=x;
fori=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
functionchengxu7()
sum=0;
fori=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])
functionchengxu8(x)
sum=0;
fori=1:
3;
j=i;
sum=sum+x(i,j);
end
sum
9.从键盘输入的10个整数中,找出第一个能被7整除的数。
若找到,打印此数后退出循环;若未找到,打印“notexist”。
%调用形式为chengxu9([x1,x2,x3……x10])
functionchengxu9(x)
fori=1:
10
a=x(i)/7;
b=fix(a);
ifa-b==0
disp(x(i))
break
end
ifi==10
fprintf('notexist\n');
end
end
10.设计一个用于计算个人所有税的程序。
假设个人所得税的缴纳标准为:
月收入少于等于800元者不纳税;超出800元的部分,纳税5%;超出2000元的部分,纳税10%;超出5000元的部分,纳税20%;超出10000元的部分,纳税30%;超出100000元的部分,纳税40%。
%调用形式为chengxu10(x)
functionchengxu10(x)
ifx<=800
g=0;
elseifx<=2000
g=(x-800)*0.05;
elseifx<=5000
g=1200*0.05+(x-2000)*0.10;
elseifx<=10000
g=1200*0.05+3000*0.10+(x-5000)*0.20;
elseifx<=100000
g=1200*0.05+3000*0.10+5000*0.20+(x-10000)*0.30;
elseifx>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
functionchengxu11()
fori=9:
-2:
1
forj=1:
i
fprintf('&')
end
fprintf('\n');
end
12.编写一个程序求出1000以内的所有素数。
%调用格式为chengxu12
functionchengxu12()
fori=1:
1000
t=1;j=0;
forj=2:
i-1
a=mod(i,j);
ifa==0
t=0;
break
end
end
ift>0
fprintf('%d\n',i);
end
end
或
%调用格式为chengxu12
functionchengxu12()
a=0;b=0;l=[];k=1;
fori=1:
1000
forj=2:
i-1
a=i/j;
b=fix(a);
ifb-a==0
break
end
end
ifa-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为字符
functionchengxu13(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为字母
functionchengxu14(x)
ifx=='a'|x=='A'
a=x+25;
elsea=x-1;
end
ifa=='z'|a=='Z'
b=a-25;
elseb=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)
functionchengxu15(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)
functionchengxu16(x,y)
a=(x-2)^2;
b=(y-2)^2;
d=sqrt(a+b);
ifd==1
fprintf('A点在圆上\n')
end
ifd>1
fprintf('A点在圆外\n')
end
ifd<1
fprintf('A点在圆内\n')
end
17.求爱因斯坦数学题。
有一条长阶,若每步跨2阶,则最后剩余1阶;若每步跨3阶,则最后剩2阶;若每步跨5阶,则最后剩4阶;若每步跨6阶,则最后剩5阶;若每步跨7步,最后正好一阶不剩。
%调用格式为chengxu17
functionchengxu17()
fori=7:
1000
ifmod(i,2)==1
ifmod(i,3)==2
ifmod(i,5)==4
ifmod(i,6)==5
ifmod(i,7)==0
fprintf('%d\n',i);
end
end
end
end
end
end
或
%调用格式为chengxu17
functionchengxu17()
i=7;
while1
ifmod(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为任意的字符但必须含有“*”
functionchengxu18(x)
a=numel(x);
j=0;k=0;
fori=1:
a
ifx(i)=='*';
break
elseifx(i)>='a'&x(i)<='z'|x(i)>='A'&x(i)<='Z'
j=j+1;
elseifx(i)>='0'&x(i)<='9'
k=k+1;
end
end
fprintf('字母个数为%d\n数字字符个数为%d\n',j,k);
或
%输入一串字符,直到输入一个星号(*)为止,统计(输出)其中的字母个数和数字字符个数。
(要求可输入任意字符)
functionchengxu18_2
i=1;b=[];m=0;n=0;
while1
a=input('请输入一串字符:
\n','s');
ifa=='*'
break
else
b=strcat(b,a);
end
end
i=length(b);
fori=1:
i
ifb(i)<='z'&b(i)>='a'|b(i)<='Z'&b(i)>='A';
m=m+1;
elseb(i)<='9'&b(i)>='0'
n=n+1;
end
end
fprintf('字母字符个数为%d\n数字字符个数为%d\n',m,n);
19.从键盘输入一个正整数n,编程判断这个数是否同时含有奇数字和偶数字。
%调用格式为chengxu19(x)其中x为正整数
functionchengxu19(x)
a=num2str(x);
b=numel(a);
g=0;k=0;
fori=1:
b
c=mod(a(i),2);
ifc==0
k=1;
break
end
end
fori=1:
b
c=mod(a(i),2);
ifc>0
g=1;
break
end
end
ifg==1&k==1
fprintf('Yes!
\n');
end
ifg==0|k==0
fprintf('No!
\n');
end
20.设某县2000年工业总产值为200亿元,如果该县预计平均年工业总产值增长率为4.5%,那么多少年后该县年工业总产值将超500亿元?
%调用格式为chengxu20
functionchengxu20()
sum=200;a=0;j=0;
fori=1:
1000
a=sum*0.045;
sum=sum+a;
j=j+1;
ifsum-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必须是三位数
functionchengxu21_1(x)
y=x;
a=mod(x,10);
x=x/10;
b=fix(mod(x,10));
x=x/10;
c=fix(x);
ify==a*a*a+b*b*b+c*c*c
fprintf('%d是水仙花数\n',y);
elsefprintf('%d不是水仙花数\n',y);
end
(2)一个整数等于该数所有因子之和,则称该数是一个完数。
例如:
6和28都是完数。
因为:
6=1+2+3,28=1+2+4+7+14.输出三位数中所有完数。
%调用格式为chengxu21_(x)其中x为数字
functionchengxu21_2(x)
sum=0;
fori=1:
x
ifmod(x,i)==0
sum=sum+i;
end
end
ifsum==2*x
fprintf('%d是一个完数\n',x);
end
22.输入10个数,将10个整数按生序排列输出,并且奇数在前,偶数在后。
如果输入的10个数是:
10987654321,则输出:
13579246810。
%输入格式为chengxu22([x1x2x3……x10])
functionchengxu22(x)
y=[];d=[];k=1;a=0;
fori=1:
10
ifmod(x(i),2)~=0
d(k)=x(i);
k=k+1;
end
end
chengxu(d)
k=1;
fori=1:
10
ifmod(x(i),2)==0
d(k)=x(i);
k=k+1;
end
end
chengxu(d)
functionchengxu(d)
ii=numel(d);
fori=1:
ii
y(i)=d(i);
end
forj=1:
ii
forr=1:
ii-1
ify(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
functionchengxu23
x=0;
x=input('请输入一个数组a[],输入格式为[a1a2a3……]\n','s');
x=str2num(x);
ifx~=0
chengxu(x)
end
functionf=chengxu(x)
a=[];
b=numel(x);
fori=1:
b-1
a(i+1)=x(i);
end
forj=1:
b-1
fprintf('a(%d)=%d\n',j+1,a(j+1));
end
24.将一个正整数n输出成“千分位”形式,即从个位数起,每三位之间加一个逗号,例如,将7654321输出成7,654,321.
%调用格式为chengxu24
functionchengxu24
x=input('请输入一个整数\n','s');
a=numel(x);
x=str2num(x);
b=ceil(a/3);
fori=1:
b
a(i)=mod(x,1000)
x=fix(x/1000);
end
forj=b:
-1:
2
fprintf('%d,',a(j))
end
fprintf('%d',a
(1));
fprintf('\n');
25.求出矩阵a中每行元素的平均值和平均最大的行号。
%调用格式为chengxu25
functionchengxu25
m=[];n=[];max=0;k=0;p=[];
a=input('请输入一个矩阵');
c=numel(a);
m=a(1,:
);
b=nu