经典例题由易到难【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。2.程序源代码:fori=1:4forj=1:4fork=1:4if(i~=k&&i~=j&&j~=k)n=i*100+j*10+knendendendend==============================================================【程序2】题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。2.程序源代码:n=input('n=?')ifn=10i=0.1*nelseif10n20i=10*0.1+(n-10)*0.075elseif20n40i=10*0.1+10*0.075+(n-20)*0.05elseif40n60i=10*0.1+10*0.075+20*0.05+(n-40)*0.03elseif60n100i=10*0.1+10*0.075+20*0.05+20*0.03+(n-60)*0.015elsen100i=10*0.1+10*0.075+20*0.05+20*0.03+40*0.015+(n-100)*0.01endendendendend=========================================================【程序3】题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。请看具体分析:2.程序源代码:fori=1:100000x=fix(sqrt(i+100));y=fix(sqrt(i+268));if(x*x==i+100&&y*y==i+268)iendend==============================================================【程序4】题目:输入某年某月某日,判断这一天是这一年的第几天?1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。2.程序源代码:year=input('输入年份')month=input('输入月份')day=input('输入号数')switchmonthcase1sum=0;case2sum=31;case3sum=59;case4sum=90;case5sum=120;case6sum=151;case7sum=181;case8sum=212;case9sum=243;case10sum=273;case11sum=304;case12sum=334;endif(rem(year,4)==0&&month3)disp([num2str(year),'年',num2str(month),'月',num2str(day),'号','过了',num2str(sum+day+1),'天'])elsedisp([num2str(year),'年',num2str(month),'月',num2str(day),'号','过了',num2str(sum+day),'天'])endymonth=[31,28,31,30,31,30,31,31,30,31,30,31]year=input('请输入年')month=input('请输入月')day=input('请输入日')count=0;fori=1:month-1count=count+ymonth(i);endcount=count+day;if(rem(year,400)==0||(rem(year,4)==0&&rem(year,100)~=0))ifmonth2count=count+1;endendcount【程序5】题目:输入三个整数x,y,z,请把这三个数由小到大输出。1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果xy则将x与y的值进行交换,然后再用x与z进行比较,如果xz则将x与z的值进行交换,这样能使x最小。2.程序源代码:x=input('输入x:');y=input('输入y:');z=input('输入z:');ifxy&&yzt=z;m=y;n=x;elseifxz&&zyt=y;m=z;n=x;elseifyx&&xzt=z;m=x;n=y;elseifyz&&zxt=x;m=z;n=y;elseifzx&&xyt=y;m=x;n=z;elseifzy&&yxt=x;m=y;n=z;endfprintf(['这三个数由小到大:',num2str(t),num2str(m),num2str(n)])==============================================================【程序6】题目:用*号输出字母C的图案。1.程序分析:可先用'*'号在纸上写出字母C,再分行输出。2.程序源代码:fprintf('HelloC-world')fprintf('\n')fprintf('****')fprintf('\n')fprintf('*')fprintf('\n')fprintf('*')fprintf('\n')fprintf('****')fprintf('\n')==============================================================【程序8】题目:输出9*9口诀。1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。2.程序源代码:fori=1:9forj=1:ik=i*j;fprintf([num2str(j),'*',num2str(i),'=',num2str(k),'\t'])endfprintf('\n')end==============================================================【程序11】题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?1.程序分析:兔子的规律为数列1,1,2,3,5,8,13,21....2.程序源代码:f1=1;f2=1;fori=1:20if(rem(i,2)==0)fprintf('\n');f1=f1+f2f2=f1+f2fprintf(['%12ld%12ld',num2str(f1),num2str(f2)])endend==============================================================【程序12】题目:判断101-200之间有多少个素数,并输出所有素数。1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。2.程序源代码:t=1;fori=101:200forj=1:iif(round(i/j)==(i/j)&j~=1&j~=i)breakendendifj==is(t)=i;t=t+1;endenddisp(['素数:',num2str(s)])==============================================================【程序13】题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。2.程序源代码:fori=100:999n1=fix(i/100);n2=fix((i-n1*100)/10);n3=i-n1*100-n2*10;if(n1^3+n2^3+n3^3==i)disp(i)endend==============================================================【程序14】题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。(2)如果nk,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。2.程序源代码:n=input('n?')while(n~=1)fori=2:nif(rem(n,i)==0)in=n/i;break;endendend==============================================================【程序15】题目:利用条件运算符的嵌套来完成此题:学习成绩=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。1.程序分析:(ab)?a:b这是条件运算符的基本例子。2.程序源代码:x=input('请输入学生的成绩:')ifx=90&&x=100disp('A')elseifx=60&&x80disp('B')elseifx=0&&x60disp('C')elsedisp('你输入错误')end==============================================================【程序16】题目:输入两个正整数m和n,求其最大公约数和最小公倍数。1.程序分析:利用辗除法。function[yue,bei]=myFind(x,y)a=x;b=y;yue=1;bei=x*y;fori=1:1:a;c=mod(a,i);d=mod(b,i);ifc==0&&d==0bei=bei/i;yue=i;endendfprintf(['最小公倍数:',num2str(bei)])fprintf('\n')fprintf(['最大公倍数:',num2str(yue)])==============================================================【程序17】题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。1.程序分析:利用for语句,条件为输入的字符不为'\n'.2.程序源代码:str=input('输入字符串s','s')len=length(str);sz=0;zm=0;qt=0;fori=1:lenifstr(i)='0'&&str(i)='9'sz=sz+1;elseif((str(i)='A'&&str(i)='Z')||(str(i)='a'&&str(i)='z'))zm=zm+1;elseqt=qt+1;endenddisp(['字母:',num2str(zm)]);disp(['数字:',num2str(sz)]);disp(['其他:',num2s