MATLAB编程练习doc.docx

上传人:b****8 文档编号:9855731 上传时间:2023-02-07 格式:DOCX 页数:30 大小:23.30KB
下载 相关 举报
MATLAB编程练习doc.docx_第1页
第1页 / 共30页
MATLAB编程练习doc.docx_第2页
第2页 / 共30页
MATLAB编程练习doc.docx_第3页
第3页 / 共30页
MATLAB编程练习doc.docx_第4页
第4页 / 共30页
MATLAB编程练习doc.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

MATLAB编程练习doc.docx

《MATLAB编程练习doc.docx》由会员分享,可在线阅读,更多相关《MATLAB编程练习doc.docx(30页珍藏版)》请在冰豆网上搜索。

MATLAB编程练习doc.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 制度规范

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1