matlab20道试题及解答
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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)%判断上一个字符是不是数字