matlab20道试题及解答

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

试题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);%将a转化为一个字符串

b_min=str2double(sort(str_a));%形成最小数

b_max=str2double(sort(str_a,'descend'));%形成最大数

b=b_max-b_min;%求最大数与最小数之差

end

b

试题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,:);

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.编写成绩排序程序。按学生的序号输入学生的成绩,按照分数由高到低的顺序输出学生的名次,该项名次的分数、相同名次的人数和学号;同名次的学号输出在同一行中,一行最多输出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列表示学号,第3列表示成绩

%b矩阵共有i行

%下面处理并列名次

for j=2:i

if(b(j,3)==b(j-1,3))%若成绩相等,则名次应相同

b(j,1)=b(j-1,1);

end

end

%下面输出矩阵

disp(['名次','学号','成绩','人数']); j=1;%从第1名开始

while(j<=i)

k=find(b(:,1)==j);

len=length(k);

if(len~=0)

string1=num2str(b(k(1),1));%将名次字符串化

%处理同名次的学号问题

string2='';

for j1=1:len

string2=strcat(string2,num2str(b(k(j1),2)),',');

end

string3=num2str(b(k(1),3));%将成绩字符串化

string4=num2str(len);

disp([string1,'',string2,'',string3,'',string4]);

end

j=j+1;

end

试题4.输入一个字符串,内有数字和非数字字符,如:gs423cd1567896>?df12345,将其中连续的数字作为一个整数,依次存放到一向量a中,例如:423放在a(1),156放在a(2),…。统计共有多少个整数,并输出这些数。

clear;

str=input('请输入一个字符串:','s');

len=length(str);

i=0;%a向量的下标

num=0;%统计整数的个数

flag=0;%标志位,为1代表出现数字,为0代表出现非数字字符

s=0;%存放出现的一个个整数

for j=1:len

ch=str(j);

if(ch>='0'&&ch<='9')

if(flag==0)%判断上一个字符是不是非数字

flag=1;

num=num+1;

end

temp=str2double(ch);

s=s*10+temp;

if(j==len)

i=i+1;

a(i)=s;

end

else

if(flag==1)%判断上一个字符是不是数字

相关文档
最新文档