matlab20道试题及解答_第1页
matlab20道试题及解答_第2页
matlab20道试题及解答_第3页
matlab20道试题及解答_第4页
matlab20道试题及解答_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、试题1“数学黑洞”:任意一个4位自然数,将组成该数的各位数字重新排列,形成一个最大数和一个最小数,之后两数相减,其差仍为一个自然数。重复进行上述运算,最终会出现一个神秘的数,请编程输出这个神秘的数。clear;a=input(请输入一个四位正整数:); str_a=num2str(a); %将a转化为一个字符串 b_min=str2double(sort(str_a); %形成最小数b_max=str2double(sort(str_a,descend); %形成最大数 b=b_max-b_min; %求最大数与最小数之差 while (b=a) a=b; str_a=num2str(a);

2、%将a转化为一个字符串 b_min=str2double(sort(str_a); %形成最小数 b_max=str2double(sort(str_a,descend); %形成最大数 b=b_max-b_min; %求最大数与最小数之差 endb试题2将数字1、2、3、4、5、6填入一个2行3列的表格中,要使得每一列右边的数字比左边的数字大,每一行下面的数字比上面的数字大。请编写程序求出按此要求可有几种填写方法。a(1)=1;a(6)=6;count=0; %用来计数b=perms(2345); %产生2345的全排列m,n=size(b); for i=1:m temp=b(i,:);

3、a(2)=str2double(temp(1); a(3)=str2double(temp(2); a(4)=str2double(temp(3); a(5)=str2double(temp(4); if (a(4)a(2)&(a(4)a(3)&(a(5)a(3) count=count+1; c=reshape(a,2,3); %将a向量转化为2*3矩阵输出 disp(c); end end disp(共有,num2str(count),种填写方法); %输出填写方法的种数试题3编写成绩排序程序。按学生的序号输入学生的成绩,按照分数由高到低的顺序输出学生的名次,该项名次的分数、相同名次的人数

4、和学号;同名次的学号输出在同一行中,一行最多输出10个学号。clear;a=zeros(1,2); %用a矩阵来存放学生的学号和成绩,每一行代表一个学生 num=input(请输入学号:);score=input(请输入成绩:);i=0; while (isempty(num) i=i+1; a(i,1)=num; a(i,2)=score; num=input(请输入学号:); score=input(请输入成绩:);end b=sortrows(a,-2); %按第2列进行降序排列mc=(1:i);b=mc,b; %加了名次之后的学生成绩,且已按高分到低分排序,第1列表示名次,第2列表示学

5、号,第3列表示成绩 %b矩阵共有i行 %下面处理并列名次for j=2:i if (b(j,3)=b(j-1,3) %若成绩相等,则名次应相同 b(j,1)=b(j-1,1); endend %下面输出矩阵disp(名次, 学号 , 成绩 , 人数 );j=1; %从第1名开始while (j?df12345,将其中连续的数字作为一个整数,依次存放到一向量a中,例如:423放在a(1),156放在a(2),。统计共有多少个整数,并输出这些数。clear;str=input(请输入一个字符串:,s);len=length(str);i=0; %a向量的下标num=0; %统计整数的个数flag=

6、0; %标志位,为1代表出现数字,为0代表出现非数字字符s=0; %存放出现的一个个整数 for j=1:len ch=str(j); if (ch=0&ch=a&ch=A&chmax_aver) max_aver=aver(k); i=k; end if (aver(k)min_aver) min_aver=aver(k); j=k; endend%将第i行和第j行互换for k=1:4 t=a1(i,k); a1(i,k)=a1(j,k); a1(j,k)=t;enddisp(a1); %第2小题disp(a); %第3小题Y,U=min(a,2); %每行最小的数存放在Y中,其所在的列号

7、存放在U中for k=1:5 disp(第,num2str(k),行最小的数是:,num2str(Y(k),其位于第,num2str(U(k),列);end试题7:输入一行数字字符(用回车结束),每个数字字符的前后都有空格,编写程序实现如下功能。1)按大小顺序输出每个数字字符及与之对应的ASCII代码值,每行输出三对。2)将这一行中的数字转换成一个整数,例如:若输入2 4 8 3 ,则输出24833)将该数字字符串中的所有偶数数字字符删除。clear;str=input(请输入一行数字字符(用回车结束),s); %第1小题a1=str;k=a1= ;a1(k)=; a1=sort(a1); %

8、对a1中的各数字字符排序len=length(a1);i=1;while (i+2=len) %控制每行输出3对 disp(a1(i),对应的ASCII代码值是,num2str(abs(a1(i), ,a1(i+1),对应的ASCII代码值是,num2str(abs(a1(i+1), ,a1(i+2),对应的ASCII代码值是,num2str(abs(a1(i+2); i=i+3;end %输出余下的1对或2对if (i=len) disp(a1(i),对应的ASCII代码值是,num2str(abs(a1(i);else if(i+1=len) disp(a1(i),对应的ASCII代码值是

9、,num2str(abs(a1(i), ,a1(i+1),对应的ASCII代码值是,num2str(abs(a1(i+1); endend %第2小题a2=str;k=a2= ;a2(k)=;disp(a2); %第3小题a3=str;k=a3= ;a3(k)=;for j=1:length(a3) ch=a3(j); if (fix(str2double(ch)/2)=str2double(ch)/2) %判断是否是偶数 a3(j)= ; endendk=a3= ;a3(k)=;disp(a3)试题8:输入任意整数,编程实现如下功能。1)编写函数,验证任意偶数为两个素数之和并输出这两个素数。

10、2)编写函数,判断整数x是否是同构数,所谓“同构数”是指,它出现在它的平方数的右边。例如:输入整数5,5的平方数是25,5是25中右侧的数,所以5是同构数。x的值由主函数从键盘读入,要求不大于100。3)编写函数,将输入的10进制整数转化为它所对应的二进制数。function flag=shiti8t2(x)m=fix(log10(x)+1; %求x的位数 if(mod(x2,10m)=x) flag=1;else flag=0;end试题9:求两个正整数的最小公倍数和最大公约数function gbs,gys=shiti9(m,n)%gbs是m,n的最小公倍数,gys是m,n的最大公约数%先

11、求最大公约数for i=min(m,n):-1:1 if (mod(m,i)=0&mod(n,i)=0) break; endendgys=i;%求最小公倍数for i=max(m,n):m*n if (mod(i,m)=0&mod(i,n)=0) break; endendgbs=i;试题10:输出9*9口诀for i=1:9 A=; for j=1:i A=A,sprintf(%d%d=%2d ,j,i,i*j); end disp(A)end试题11:在xy平面中随机取一些点,并按照顺序依次相连接,那么我们得到一个多边形。这个多边形普遍情况下会出现边与边的相交。现在找到多边形所有边的中点

12、,并且将这些中点连成一个新的多边形,如此重复下去。要求:先随机生成一个50个顶点的多边形并画出其图形(可使用rand()函数随机初始化顶点的坐标),然后将上面取中点生成新多边形的过程重复10遍,输出最后多边形的图形。clear;a=fix(20*rand(50,2);b=a;a(1,:); %目的是让第1个顶点与最后一个顶点连线subplot(3,4,1);plot(b(:,1),b(:,2);axis(0 20 0 20);grid onbox on %重复10次for i=1:11 m1=a; m2=a(2:50,:);a(1,:); a=(m1+m2)/2; %取其中点 b=a;a(1,

13、:); subplot(3,4,i+1); plot(b(:,1),b(:,2); end试题12:在44的棋盘上安置4个皇后,要求任意两个皇后不在同一行、不在同一列、不在同一对角线上,输出所有的方案。tic;N=4;a=perms(1:N); %产生一个全排列b=zeros(N); %产生一个全0矩阵,即一个棋盘,有皇后的地方为1,其余为0,初始值都为0count=0; %记下符合要求方案的个数 for i=1:size(a,1) flag=1; %标志 temp=a(i,:); queen=1:N;temp; %queen是一个N*2的矩阵,每一行代表一个皇后的所处的行数和列数,第i行就代

14、表第i个皇后 Nqueen2=combntns(1:N,2); %从N个皇后中随机选择两个皇后。Nqueen2是一个n行2列的矩阵,每一行表示选择的两个皇后,n就是从N皇后选择2个皇后的组合数 %对任意选择的两个皇后作测试,看是否符合不在同一对角线上的要求 for k=1:size(Nqueen2,1) q1=Nqueen2(k,1); q2=Nqueen2(k,2); %q1和q2中选择的两个皇后 row1=queen(q1,1); col1=queen(q1,2); %记下q1皇后所在的行数和列数 row2=queen(q2,1); col2=queen(q2,2); %记下q2皇后所在的

15、行数和列数 if (row1-row2=col1-col2)|(row1+col1=row2+col2) flag=0; break; end end if (flag=0) continue; end for j=1:N b(j,temp(j)=1; end disp(b); %显示棋盘 count=count+1; %方案数加1 b=zeros(N); %重新初始化棋盘enddisp(共有,num2str(count),种方案);toc;试题13:现有21根火柴,两人轮流取,每人每次可取走1-4根,不可多取,也不能不取,谁取最后一根火柴则谁输。请编写一个程序进行人机对弈,要求人先取,计算机

16、后取;计算机一方为“常胜将军”clear;clc;num=21;while 1 disp(现在还剩,num2str(num),根火柴;); a=input(请输入您取走的火柴根数(1-4):); while a4|a=fix(a)|anum %如果用户输入的数大于4或小于1或为小数或大于剩余的火柴根数,重新输入 a=input(您输入的数据格式不对,请重新输入:); end num=num-a; if num=0 disp(您输了!谢谢您的参与!); break; end disp(现在还剩,num2str(num),根火柴;); b=5-a; %计算机取的火柴数 disp(计算机取,num2

17、str(b),根火柴;); num=num-b; end试题14:自动发牌:一副扑克有52张牌,打桥牌时应将牌分给四个人。请设计一个程序完成自动发牌的工作。要求:黑桃用S(Spaces)表示;红桃用H(Hearts)表示;方块用D(Diamonds)表示;梅花用C(Clubs)表示。clear;clc; b=1:52; %表示一副扑克牌,113表示黑桃A黑桃K;1426表示红桃A红桃K;依此类推 a1=; %表示第1个人应得的牌,初始为空,牌发完后,a1应是一个包含13个元素的向量a2=;a3=;a4=; num=0;while isempty(b) num=num+1; len=length

18、(b); serial=fix(len*rand(1)+1; %产生一个1len的随机数 switch mod(num,4) case 1 a1=a1,b(serial); case 2 a2=a2,b(serial); case 3 a3=a3,b(serial); case 0 a4=a4,b(serial); end b(serial)=; enddisp(sort(a1);disp(sort(a2);disp(sort(a3);disp(sort(a4);试题15:一个正整数有可能可以被表示为n(n=2)个连续正整数之和,如:15=1+2+3+4+515=4+5+615=7+8请编写程

19、序,根据输入的任何一个正整数,找出符合这种要求的所有连续正整数序列。clear;clc;a=input(请输入一个正整数:);n=2; %n表示连续正整数的个数while 1 if sum(1:n)a break; end if mod(a-sum(1:n),n)=0 %a能够表示成n个连续正整数之和 b=(1:n)+(a-sum(1:n)/n; %b向量各元素为连续整数且和为a %显示等式 str=num2str(a),=,num2str(b(1); for i=2:length(b) str=str,+,num2str(b(i); end disp(str); end n=n+1;end

20、试题16:N个教徒和N个非教徒在深海上遇险,必须将一半的人投入海中,其余的人才能幸免于难,于是他们想了一个办法:2N个人围成一圈,从第一个人开始依次循环报数,每数到第9个人就将他扔进大海,如此循环直到只剩下N个人为止。问怎样的站法,才能使得每次投入大海的都是非教徒。输入:输入文件由一行构成,就是N的值输出:输出文件是一行字符串,字符串由N个字符(代表教徒)和N个+字符(代表非教徒)排列组成。该排列使得按照提述方法每次投入大海的都是非教徒。如输入样本:15输出样本:+clear;clc;N=input(N=);ticn=2*N;f(1:n)=; i=0; %i为计数器,从0不断变到9j=0; %j为f向量的下标,从1不断变到2*N,循环不断count=0; %找到非教徒位置的个数,到N结束 while count2*N % 保证循环 j=1; end if f(j)= i=i+1; if i=9 %标注非教徒,下次又从头计数 f(j)=+; i=0; count=count+1; end end enddisp(f);toc试题17:输入一个十进制数,转化成二进制数,然后输出。clear;clc;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论