西南交大MATLAB编程作业相关复习资料.docx
《西南交大MATLAB编程作业相关复习资料.docx》由会员分享,可在线阅读,更多相关《西南交大MATLAB编程作业相关复习资料.docx(45页珍藏版)》请在冰豆网上搜索。
西南交大MATLAB编程作业相关复习资料
编程题目
《历年竞赛题目及编程培训》P(135至137)
1.编写一个程序,要求输入五个整数,然后由小到大排序再输出.
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t1中
%然后在命令窗口定义x为所输入的5个整数的行向量形式,再输入t1(x)
functionf=t1(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
disp(x)
2.将一个整型数组的元素按逆序重新存放(如原序为:
8,6,5,4改为:
4,5,6,8)。
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t2中
%然后在命令窗口定义x为所输入的数组,再输入t2(x)
functiont2(x)
s=length(x);
a=fix(s/2);
fori=1:
a
j=s-i+1;
c=x(i);
x(i)=x(j);
x(j)=c;
end
disp(x)
3.输入一个字符,如果是大写字母,则将其转换成小写并输出;若是小写则直接输出;若是非字母字符则打印:
“Dataerror!
”。
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t3中
%然后在命令窗口直接输入t3
functiont3()
a=input('输入一个字符:
string');%输入的形式为'x'x为输入的字符
ifa<=57&a>=48
fprintf('“Dataerror!
”\n')
elseifa<=90&a>=65
fprintf('%c\n',a+32)
elseifa<=122&a>=97
a
end
4.输入一个整数,写一程序输出它是几位数。
%此程序可以计算一万位整数的位数
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t4中
%然后在命令窗口直接输入t4(x)x为所输入的整数
functiont4(x)
i=0;
forj=1:
10000
x=abs(x/10);
a=fix(x);
ifa>0
i=i+1;
end
ifa==0
i=i+1;
break
end
end
disp(i)
5.写一程序求1!
+2!
+…+10!
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t5中
%然后在命令窗口直接输入t5
functiont5()
j=1;s=0;
fori=1:
10
j=i*j;
s=s+j;
end
disp(s)
6.从键盘上输入a与n的值,计算sum=a+aa+aaa+aaaa+…(共n项)的和。
例a=2,n=4,则sum=2+22+222+2222.
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t6中
%然后在命令窗口直接输入t6(a,n)a和n分别是一个数
functiont6(a,n)
x=a;t=a;
fori=1:
(n-1)
t=t+10^i*a;
sum=x+t;
end
sum
7.编程求数列1,1/2,1/3,1/4,1/5,……的所有大于等于0.000001的数据项之和并输出结果
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t7中
%然后在命令窗口直接输入t7
functiont7()
s=0;
forc=1:
100000
d=1/c;
s=s+d;
end
s
8.求3*3矩阵的主对角线元素之和。
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t8中
%然后在命令窗口直定义x为一个三行三列矩阵
%最后输入t8(x)
functiont8(x)
s=0;
fori=1:
3;
j=i;
s=s+x(i,j);
end
s
9.从键盘输入的10个整数中,找出第一个能被7整除的数。
若找到,打印此数后退出循环;若未找到,打印“notexist”。
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t9中
%然后在命令窗口定义x为输入的10个数的行向量形式
%最后输入t9(x)
functiont9(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%。
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t10中
%然后在命令窗口直接输入t10(x)x为月收入
functiong=t10(x)
b=90000*0.3;
c=5000*0.2;
d=3000*0.1;
e=1200*0.05;
ifx>=100000
a=(x-100000)*0.4;
g=a+b+c+d+e;
elseifx>=10000
a=(x-10000)*0.3;
g=a+c+d+e;
elseifx>=5000
a=(x-5000)*0.2;
g=a+d+e;
elseifx>=2000
a=(x-2000)*0.1;
g=a+e;
elseifx>=800
g=(x-800)*0.05;
else
g=0;
end
elseifx>=5000
a=(x-5000)*0.2;
g=a+d+e;
elseifx>=2000
a=(x-2000)*0.1;
g=a+e;
elseifx>=800
g=(x-800)*0.05;
else
g=0;
end
11.编写一个程序,用循环结构输出以下图形。
&&&&&&&&&
&&&&&&&
&&&&&
&&&
&
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t11中
%然后在命令窗口直接输入t11
functiont11()
fori=9:
-2:
1
forj=1:
i
fprintf('&')
end
fprintf('\n');
end
12.编写一个程序求出1000以内的所有素数。
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t12中
%然后在命令窗口直接输入t12
functiont12()
x=[];
fori=2:
1000
t=1;j=0;
forj=2:
i-1
a=i/j-fix(i/j);
ifa==0
t=0;
break
end
end
ift>0
x=[x,i];
end
end
disp(x)
13.输入两个整型变量a,b的值,输出a+b,a-b,a*b,a/b,的结果,要求连同算式一起输出,每个算式占一行。
例:
a等于10,b等于5,a+b的结果输成
10+5=15
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t13中
%然后在命令窗口直接输入t13(a,b)a,b为要输入的两个整形变量
functiont13(a,b)
c=a+b;
d=a-b;
e=a*b;
f=a/b;
fprintf('%d+%d=%d\n%d-%d=%d\n%d*%d=%d\n%d/%d=%d\n',a,b,c,a,b,d,a,b,e,a,b,f);
14.求前驱字符和后继字符。
输入一个字符,找出它的前驱字符和后继字符,并按ASCII码值,按从大到小的顺序输出这三个字符及其对应的ASCII码值。
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t14中
%然后在命令窗口直接输入t14('x')x为输入的字母
functiont14(x)
ifx=='a'
x=='z';
elsea=x-1;
end
ifx=='z'
x='a';
elseb=x+1;
end
fprintf('%c%d,%c%d,%c%d\n',b,b,x,x,a,a);
15.输入三角形的边长,写一求三角形面积的函数。
(面积=sqrt(s(s-a)(s-b)(s-c)),s=(a+b+c)/2)
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t15中
%然后在命令窗口直接输入t15(a,b,c)a,b,c分别是三角形的边长
functiont15(a,b,c)
s=(a+b+c)/2;
d=sqrt(s*(s-a)*(s-b)*(s-c))
fprintf('面积=%d\n',d)
16.输入某个点A的平面坐标(x,y),判断(输出)A点是在圆内、圆外还是在圆周上,其中圆心坐标为(2,2),半径为1。
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t16中
%然后在命令窗口直接输入t16(x,y)x,y为点A的横纵坐标
functiont16(x,y)
a=(x-2)^2;
b=(y-2)^2;
c=sqrt(a+b);
ifc==1
fprintf('A点在圆上\n')
end
ifc>1
fprintf('A点在圆外\n')
end
ifc<1
fprintf('A点在圆内\n')
end
17.求爱因斯坦数学题。
有一条长阶,若每步跨2阶,则最后剩余1阶;若每步跨3阶,则最后剩2阶;若每步跨5阶,则最后剩4阶;若每步跨6阶,则最后剩5阶;若每步跨7步,最后正好一阶不剩。
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t17中
%然后在命令窗口直接输入t17(x)x为台阶数
functiont17(x)
s=[];
fori=7:
x
ifmod(i,2)==1
ifmod(i,3)==2
ifmod(i,5)==4
ifmod(i,6)==5
ifmod(i,7)==0
s=[s,i];
end
end
end
end
end
end
disp(s)
18.输入一串字符,直到输入一个星号(*)为止,统计(输出)其中的字母个数和数字字符个数。
(要求可输入任意字符)
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t18中
%然后在命令窗口直接输入t18('x')x为输入的字符串,必须以*号结束
functiont18(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);
19.从键盘输入一个正整数n,编程判断这个数是否同时含有奇数字和偶数字。
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t19中
%然后在命令窗口直接输入t19(x)其中x为正整数
functiont19(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亿元?
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t20中
%然后在命令窗口直接输入t20
functiont20()
sum=200;a=0;
fori=1:
1000
a=sum*0.045;
sum=sum+a;
ifsum-200>=300
break
end
end
fprintf('%d\n',i);
21.
(1)输入一个三位数,判断是否是一个“水仙花数”。
水仙花数是指三位数的各位数字的立方和等于这个三位数本身。
例如:
153=1*1*1+5*5*5+3*3*3
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t211中
%然后在命令窗口直接输入t211(x)x为一个三位数
functiont211(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.输出三位数中所有完数。
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t212中
%然后在命令窗口直接输入t212
functiont212()
fori=100:
999
sum=0;
forj=1:
i-1
ifmod(i,j)==0
sum=sum+j;
end
end
ifsum==i
disp(sum)
continue
end
end
22.输入10个数,将10个整数按生序排列输出,并且奇数在前,偶数在后。
如果输入的10个数是:
10987654321,则输出:
13579246810。
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t22中
%然后在命令窗口将需输入的10个数存入数组x中,
%最后直接输入t22(x)
functiont22(x)
y=[];d=[];k=1;a=0;
fori=1:
10
ifmod(x(i),2)~=0
d(k)=x(i);
k=k+1;
end
end
t(d)
k=1;
fori=1:
10
ifmod(x(i),2)==0
d(k)=x(i);
k=k+1;
end
end
t(d)
functiont(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]中的每一个元素依次循环向后移动一位。
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t23中
%然后在命令窗口直接输入t23
functiont23
x=0;
x=input('输入一个数组a[],输入格式为[a1a2a3……]\n','s');
x=str2num(x);
ifx~=0
t(x)
else
fprintf('Notinput!
');
end
functionf=t(x)
a=[];k=0;
b=numel(x);
fori=1:
b-1
a(i+1)=x(i);
end
a
(1)=x(b);
forj=1:
b
end
disp(a)
24.将一个正整数n输出成“千分位”形式,即从个位数起,每三位之间加一个逗号,例如,将7654321输出成7,654,321.
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t24中
%然后在命令窗口直接输入t24
functiont24
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中每行元素的平均值和平均最大的行号。
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t25中
%然后在命令窗口定义矩阵a为需要输入的矩阵,再输入t25(a)
functiont25(a)
m=[];n=[];max=0;k=0;p=[];
c=numel(a);
m=a(1,:
);
b=numel(m);
d=c/b;
fori=1:
d
n(i)=sum(a(i,:
));
end
fori=1:
d
p(i)=n(i)/b;
ifn(i)>max
max=n(i);
k=i;
end
end
fprintf('每行元素的平均值为:
\n');
fori=1:
d
fprintf('%d',p(i));
end
fprintf('\n');
fprintf('平均值最大的行号为:
%d\n',k);
26.编写一个函数,找出矩阵A中最大元素和最小元素所在的行列号.
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t26中
%然后在命令窗口将需要处理的矩阵存入a中
%最后输入t26(a)
functiont26(a)
e=1;f=1;
g=1;k=1;
c=numel(a);
m=a(1,:
);
b=numel(m);
d=c/b;
min1=a(1,1);
max1=a(1,1);
fori=1:
d
forj=1:
b
ifmax1<=a(i,j)
max1=a(i,j);
e=i;
f=j;
end
ifmin1>=a(i,j)
min1=a(i,j);
g=i;
k=j;
end
end
end
fprintf('最大元素所在的行列号为%d%d\n',e,f);
fprintf('最小元素所在的行列号为%d%d\n',g,k);
27.给出年、月、日,计算该日是该年的第几天?
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t27中
%然后在命令窗口将需要处理的年月日按年月日顺序存入数组x中
%最后输入t27(x)
functiont27(x)
a=0;
ifmod(x
(1),4)==0&mod(x
(1),100)~=0|mod(x
(1),400)==0
a=1;
end
tian=30*(x
(2)-1)+x(3);
fori=1:
x
(2)-1
ifi==3|i==5|i==7|i==8|i==10
tian=tian+1;
end
end
ifx
(2)~=1|x
(2)~=2
ifa==0
tian=tian-1;
end
end
tian
28.输入数组a,b的元素,用数组a和b构造数组c,使得:
c(i)=a(i)-b(i)当a(i)>b(i)时;
c(i)=a(i)+b(i)当a(i)<=b(i)时;
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t28中
%然后在命令窗口直接输入t28
functiont28()
a=input('请输入数组a输入格式为[x1x2……]\n');
b=input('请输入数组b,b与a的规格相同\n');
d=numel(a);c=[];
fori=1:
d
ifa(i)>b(i)
c(i)=a(i)-b(i);
elseifa(i)<=b(i)
c(i)=a(i)+b(i);
end
end
c
*30.编写程序求所有各位数字的立方和等于420的三位数.
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t30中
%然后在命令窗口直接输入t30
functiont30
s=0;
fork=100:
999
i=k;a=zeros(1,3);
forj=1:
3
a(j)=mod(i,10);
i=fix(i/10);
end
ifa
(1)^3+a
(2)^3+a(3)^3==420
disp(k)
s=1;
end
end
ifs==0
fprintf('不存在这样的三位数\n');
end
*31.学校要举行篮球循环赛,共有十个队参加比赛,请你安排一下比赛场次,使每队每次打完比赛后至少能隔一场不比赛,以便得到休息从而保持体力,请用matlab解决这个问题,并给出至少一个比赛日程表(每队休息的场次越多越好,但每队得到的休息应大体相同,不能出现某队刚打完比赛,马上和另一个已经休息了诺干场的球队比赛,这是不公平的)。
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t31中
%然后在命令窗口直接输入t31
functiont31
a=[1:
5];
b=[10:
-1:
6];
fork=1:
9
fprintf('第%d轮\n',k);
fori=1:
5
fprintf('%2d-----%2d\n',a(i),b(i));
end
forj=5:
-1:
1
a(j+1)=a(j);
end
a
(2)=b
(1);
b
(1)=[];
b(5)=a(6);
a(6)=[];
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
知识点总结
了解matlab中常见变量:
anspiNaneps等的基本含义
Pi圆周率eps浮点运算的相对精度10^-25Nan不定值ans求极值
了解matlab中变量定义的规则。
1、将矩阵
,
和
组合两个新矩阵:
求a和b的和,b和c的矩阵乘,a和c的数组乘。
组合成一个
的矩阵,第一列为按列顺序排