实验四 循环语句及选择语句的嵌套应用

  • 格式:doc
  • 大小:43.00 KB
  • 文档页数:8

下载文档原格式

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

实验四循环语句及选择语句的嵌套应用1. 要求用户输入年、月、日,编写程序计算这一天是一年当中的第几天(包括当天),例如对于非闰年来说,1月1号是这一年的第1天,12月31号是这一年的第365天。规则如下:在非闰年中,它的取值范围是1-365;在闰年中,它的取值范围是1-366,编写程序,提示用户输入年、月、日,输出这一天是当年的第几天。

i='0';

while i=='0'

year=input('请输入年份: ');

while year<=0||year~=floor(year)

disp('输入年份有错!');

year=input('请重新输入年份: ');

end

if(rem(year,4)==0&&rem(year,100)~=0)||rem(year,400)==0

disp(' 这一年是闰年。');

else

disp(' 这一年是平年。');

end

month=input('请输入月份: ');

while month<0||month>13||month~=floor(month)

disp('输入月份有错!');

month=input('请输重新入月份: ');

end

day=input('请输入日期: ');

switch month

case {1,3,5,7,8,10,12}

while day<1||day>31||day~=floor(day)

disp('输入日期有错!');

day=input('请输重新入日期: ');

end

case {4,6,9,11}

while day<1||day>31||day~=floor(day)

disp('输入日期有错!');

day=input('请输重新入日期: ');

end

otherwise

if(rem(year,4)==0&&rem(year,100)~=0)||rem(year,400)==0 while day<1||day>29||day~=floor(day)

disp('输入日期有错!');

day=input('请输重新入日期: ');

end

else

while day<1||day>28||day~=floor(day)

disp('输入日期有错!');

day=input('请输重新入日期: ');

end

end

end

i=month;

while i~=1

switch i

case 1

day=day;

case{2 4 6 8 9 11}

day=day+31;

case 3

day=day+28;

case {5 7 10 12}

day=day+30;

end

i=i-1;

end

if(rem(year,4)==0&&rem(year,100)~=0)||rem(year,400)==0&&month>2 disp([num2str(year),'年的第',num2str(day+1),'天'])

else

disp([num2str(year),'年的第',num2str(day),'天'])

end

disp('----------');

i=input('Input 0 continues,the other end ','s');

disp('----------');

end

运行结果:

请输入年份: 2009

这一年是平年。

请输入月份: 3

请输入日期: 4

2009年的第63天

2. 所谓水仙花数是指一个n位数( n≥3 ),它的每个位上的数字的n 次幂之和等于它本身(例如:1^3 + 5^3 + 3^3 = 153)。试编写程序寻找并输出100-9999之间的所有水仙花数。

方法一:

disp('100-9999的所有水仙花数:')

for n=100:9999

m=num2str(n);

sum=0;

for i=1:length(m)

j=str2num(m(i));

sum=sum+j^length(m); end

if sum==n

disp([num2str(m)]) end

end

方法二:

disp('100-9999的所有水仙花数:') for a=100:9999

i=1;

while floor(a/10^i)~=0

i=i+1;

end

v=mod(floor(a./10.^(0:i-1)),10);

if sum(v.^i)==a

disp([num2str(a)])

end

end

运行结果:

100-9999的所有水仙花数:

153

370

371

407

1634

8208

9474

3. 所谓回文数是指其各位数字左右对称的整数,例如121、232、87678等。试编写程序寻找11-999之间的数m,它满足m、m2、m3均为回文数,并把m、m2、m3输出。满足上述要求的数例如m=11、m2=121、m3=1331。

方法一:

disp('11-999之间m为回文数,并且m^2,m^3为回文数的数有:')

for m=11:999

s=num2str(m);

if s==s(length(s):-1:1)

t=num2str(m^2);

if t==t(length(t):-1:1)

r=num2str(m^3);

if r==r(length(r):-1:1)

disp(['m=',s,' m^2=',t,' m^3=',r])

end

end

end

end

方法二:

disp('11-999之间m为回文数,并且m^2,m^3为回文数的数有:')

for a=11:999

m=a;