编程题目
《历年竞赛题目及编程培训》P(135至137)
1.编写一个程序,要求输入五个整数,然后由小到大排序再输出.
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t1中
%然后在命令窗口定义 x 为所输入的5个整数的行向量形式,再输入 t1(x) function f=t1(x) for i=1:4 for j=(i+1):5 if x(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) function t2(x)
s=length(x); a=fix(s/2); for i=1:a j=s-i+1; c=x(i); x(i)=x(j); x(j)=c; end disp(x)
3.输入一个字符,如果是大写字母,则将其转换成小
写并输出;若是小写则直接输出;若是非字母字符则打印:“Dataerror!”。
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t3中
%然后在命令窗口直接输入 t3 function t3()
a=input('输入一个字符:string');%输入的形式为 'x' x为输入的字符 if a<=57&a>=48
fprintf('“Dataerror!”\\n') elseif a<=90&a>=65 fprintf('%c\\n',a+32) elseif a<=122&a>=97 a end
4.输入一个整数,写一程序输出它是几位数。
%此程序可以计算一万位整数的位数
%首先在MATLAB编辑器中建立如下程序并保存在文件名
1
为t4中
%然后在命令窗口直接输入 t4(x) x为所输入的整数 function t4(x) i=0;
for j=1:10000 x=abs(x/10); a=fix(x); if a>0 i=i+1; end if a==0 i=i+1; break end end disp(i)
5.写一程序求1!+2!+?+10!
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t5中
%然后在命令窗口直接输入t5 function t5() j=1;s=0; for i=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分别是一个数 function t6(a,n) x=a;t=a; for i=1:(n-1) %最后输入 t8(x) function t8(x) s=0; for i=1:3; j=i; s=s+x(i,j); end s 元者不纳税;超出800元的部分,纳税5%;超出2000元的部分,纳税10%;超出5000元的部分,纳税20%;超出10000元的部分,纳税30%;超出100000元的部分,纳税40%。
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t10中
%然后在命令窗口直接输入 t10(x) x为月收入 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 function t7() s=0;
for c=1:100000 d=1/c; s=s+d; end s
8.求3*3矩阵的主对角线元素之和。
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t8中
%然后在命令窗口直定义 x 为一个三行三列矩阵
9.从键盘输入的10个整数中,找出第一个能被7整除的数。若找到,打印此数后退出循环;若未找到,打印“not exist”。
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t9中
%然后在命令窗口定义 x为输入的10个数的行向量形式 %最后输入 t9(x) function t9(x) for i=1:10 a=x(i)/7; b=fix(a); if a-b==0 disp(x(i)) break end
if i==10
fprintf('not exist\\n'); end end
10. 设计一个用于计算个人所有税的程序。假设个人所得税的缴纳标准为:月收入少于等于800
2
function g=t10(x) b=90000*0.3; c=5000*0.2; d=3000*0.1; e=1200*0.05; if x>=100000 a=(x-100000)*0.4; g=a+b+c+d+e; elseif x>=10000 a=(x-10000)*0.3; g=a+c+d+e; elseif x>=5000 a=(x-5000)*0.2; g=a+d+e; elseif x>=2000 a=(x-2000)*0.1; g=a+e; elseif x>=800 g=(x-800)*0.05; else g=0; end
elseif x>=5000 a=(x-5000)*0.2;
g=a+d+e; elseif x>=2000 a=(x-2000)*0.1; g=a+e; elseif x>=800 g=(x-800)*0.05; else g=0; end
11.编写一个程序,用循环结构输出以下图形。 &&&&&&&&& &&&&&&& &&&&& &&&
&
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t11中
%然后在命令窗口直接输入 t11 function t11() for i=9:-2:1 for j=1:i fprintf('&') end
fprintf('\\n'); end
12.编写一个程序求出1000以内的所有素数。
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t12中
%然后在命令窗口直接输入 t12 function t12() x=[]; for i=2:1000 t=1;j=0; for j=2:i-1 a=i/j-fix(i/j); if a==0 t=0; break end end if t>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为要输入的两个整形变量 function t13(a,b) c=a+b; d=a-b; e=a*b;
3
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为输入的字母 function t14(x) if x=='a' x=='z'; else a=x-1; end
if x=='z' x='a'; else b=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分别是三角形的边长 function t15(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的横纵坐标
function t16(x,y) a=(x-2)^2; b=(y-2)^2; c=sqrt(a+b); if c==1
fprintf('A点在圆上\\n') end if c>1
fprintf('A点在圆外\\n') end if c<1
fprintf('A点在圆内\\n') end
17. 求爱因斯坦数学题。有一条长阶,若每步跨2阶,则最后剩余1阶;若每步跨3阶,则最后剩2阶;若每步跨5阶,则最后剩4阶;若每步跨6阶,则最后剩5阶;若每步跨7步,最后正好一阶不剩。
%首先在MATLAB编辑器中建立如下程序并保存在文件名
为t17中
%然后在命令窗口直接输入 t17(x) x为台阶数 function t17(x) s=[]; for i=7:x if mod(i,2)==1 if mod(i,3)==2 if mod(i,5)==4 if mod(i,6)==5 if mod(i,7)==0 s=[s,i]; end end end end end end disp(s)
18.输入一串字符,直到输入一个星号(*)为止,统计(输出)其中的字母个数和数字字符个数。(要求可输入任意字符)
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t18中
%然后在命令窗口直接输入 t18('x') x为输入的字符串,必须以*号结束 function t18(x) a=numel(x); j=0;k=0; for i=1:a if x(i)=='*';
4
break
elseif x(i)>= 'a'&x(i)<='z'| x(i)>= 'A'&x(i)<='Z' j=j+1;
elseif x(i)>= '0'&x(i)<='9' k=k+1; end end
fprintf('字母个数为%d\\n数字字符个数为%d\\n',j,k);
19. 从键盘输入一个正整数n,编程判断这个数是否同时含有奇数字和偶数字。
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t19中
%然后在命令窗口直接输入t19(x)其中x为正整数 function t19(x) a=num2str(x); b=numel(a); g=0;k=0; for i=1:b c=mod(a(i),2); if c==0 k=1; break end end
for i=1:b
c=mod(a(i),2); if c>0 g=1;
break end end if g==1&k==1
fprintf('Yes!\\n'); end
if g==0|k==0 fprintf('No!\\n'); end
20. 设某县2000年工业总产值为200亿元,如果该县预计平均年工业总产值增长率为4.5%,那么多少年后该县年工业总产值将超500亿元?
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t20中
%然后在命令窗口直接输入 t20 function t20() sum=200;a=0; for i=1:1000 a=sum*0.045; sum=sum+a; if sum-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为一个三位数 function t211(x) y=x; a=mod(x,10); x=x/10;
b=fix(mod(x,10)); x=x/10; c=fix(x);
if y==a*a*a+b*b*b+c*c*c
fprintf(' %d是水仙花数\\n',y) else fprintf(' %d不是水仙花数\\n',y) end
(2)一个整数等于该数所有因子之和,则称该数是一个完数。例如:6和28都是完数。因为:6=1+2+3,28=1+2+4+7+14. 输出三位数中所有完数。
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t212中
%然后在命令窗口直接输入 t212 function t212() for i=100:999 sum=0; for j=1:i-1
if mod(i,j)==0
sum=sum+j; end end
if sum==i
5
disp(sum) continue end end
22. 输入10个数,将10个整数按生序排列输出,并且
奇数在前,偶数在后。如果输入的10个数是:10 9 8 7 6 5 4 3 2 1 ,则输出:1 3 5 7 9 2 4 6 8 10。
%首先在MATLAB编辑器中建立如下程序并保存在文件名为t22中
%然后在命令窗口将需输入的10个数存入数组 x 中, %最后直接输入 t22(x) function t22(x) y=[];d=[];k=1;a=0; for i=1:10
if mod(x(i),2)~=0 d(k)=x(i); k=k+1; end end t(d) k=1; for i=1:10
if mod(x(i),2)==0 d(k)=x(i); k=k+1; end end t(d)
function t(d) ii=numel(d);