while-多重循环
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
输出乘法九九表
分析: 分析
Program jjb(input,output); var 输出图形的格式为二维图形, 即九九乘法口诀表, 输出图形的格式为二维图形 即九九乘法口诀表 i,j:integer; begin 后一个乘数为1; 个式子, 第1行, 共1个式子 前一个乘数为 后一个乘数为 行 个式子 前一个乘数为1,后一个乘数为 for i:=1 to 9 do 个式子, 后一个乘数分别为1,2; 第2行, 共2个式子 前一个乘数为 后一个乘数分别为 行 个式子 前一个乘数为2,后一个乘数分别为 begin …… for j:=1 to i do 个式子, 第i行, 共i个式子 前一个乘数为 后一个乘数分别为 行 个式子 前一个乘数为i,后一个乘数分别为 write(i,‘*’,j,’=‘,i*j:2); 1,2,……,i; writeln; …… end; end.
多重循环
思考1:任意输入一个值 ,判断x是不是素数 是不是素数。 思考 :任意输入一个值x,判断 是不是素数。
素数是大于1,且除了 和它本身外,不能被其它任何整数所整除的整数。 且除了1和它本身外 素数是大于 program和它本身外,不能被其它任何整数所整除的整数。 且除了 prome(input,output);
example17b(input,output); 参考程序2 参考程序2:Program example17b(input,output); Var a,b,c:integer; a,b,c:integer; Begin 百位上的数} For a:=1 to 9 do {百位上的数} 十位上的数} For b:=0 to 9 do {十位上的数} 个位上的数} For c:=0 to 9 do {个位上的数} a*a*a+b*b*b+c*c*c=a*100+b*10 100+b*10+c if a*a*a+b*b*b+c*c*c=a*100+b*10+c write((a*100+b*10+c): 100+b*10+c) then write((a*100+b*10+c):6); End.
100-999中的水仙花数 若三位数abc 中的水仙花数( abc, ★ 例 : 求 100-999 中的水仙花数 ( 若三位数 abc , abc=a3+b3+c3 , 则 称 abc 为 水 仙 花 数 , 如 : 125+27=153, 13+53+33=1+125+27=153, 则 153 是 水 仙 花 数 ) 。
100-999中的水仙花数 若三位数abc 中的水仙花数( abc, ★ 例 : 求 100-999 中的水仙花数 ( 若三位数 abc , abc=a3+b3+c3 , 则 称 abc 为 水 仙 花 数 , 如 : 125+27=153, 13+53+33=1+125+27=153, 则 153 是 水 仙 花 数 ) 。
多重循环
如果一个循环结构的内部(循环体) 如果一个循环结构的内部(循环体) 又包括一个循环结构, 又包括一个循环结构,就称为多重循环结 构。实现多重循环结构仍可以用前面讲的 三种循环语句。 三种循环语句。因为任一循环语句的循环 体部分都可以包含另一个循环语句, 体部分都可以包含另一个循环语句,这种 循环语句的嵌套为实现多重循环提供了方 便。 多重循环的嵌套次数可以是任意的。 多重循环的嵌套次数可以是任意的。 可以按照嵌套层次数,分别叫做二重循环、 可以按照嵌套层次数,分别叫做二重循环、 三重循环等。处于内部的循环叫内循环, 三重循环等。处于内部的循环叫内循环, 处于外部的循环叫外循环。 处于外部的循环叫外循环。
思考运行结果Biblioteka Baidu
FOR I:= 1 to 2 do For j:=1 to 3 do writeln (I,J);
11 12 13 21 22 23
编写程序求下图
* ** *** **** *****
Program xing(input,output); var i,j:integer; begin for i:=1 to 5 do begin for j:=1 to i do write(‘*’); writeln; end; end.
百鸡问题
鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。 鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。 用百钱买百鸡,问鸡翁、 雏各几何? 用百钱买百鸡,问鸡翁、母、雏各几何?
设公鸡、母鸡、小鸡分别 , , 只 设公鸡、母鸡、小鸡分别X,Y,Z只,则 X+Y+Z=100 (只) 5X+3Y+z/3=100(钱) ( Program bqbj(input,output); var x,y,z:integer; begin for x:=1 to 100 do for y:=1 to 100 do for z:=1 to 100 do if (x+y+z=100) and (x*5+y*3+z/3=100) then writeln(x:4,y:4,z:4); End. Program bqbj1(input,output); var x,y,z:integer; begin for x:=1 to 20 do for y:=1 to 33 do begin z:=100-x-y; if 5*x+3*y+z/3=100 then writeln(x:4,y:4,z:4); end; end.
var 讨论: 讨论:根据素数定义可知 i,x:integer; flag:boolean; 2,3,5,7,11,13,17等是素数。1,4,6,8,9,10,12,14,15等不是素数。 等是素数。 等不是素数。 等是素数 等不是素数 begin 为了判断某数i是否为素数 一个最简单的办法是用2,3,4,5,……i-1这些数 是否为素数, 为了判断某数 是否为素数,一个最简单的办法是用 这些数 read(x); 逐个去除i,看能否除尽。若被其中一个数除尽了, 不是素数 不是素数, 逐个去除 ,看能否除尽。若被其中一个数除尽了,则i不是素数,否则 flag:=true; 全部都除不尽) 是素数 是素数。 (全部都除不尽)i是素数。 to round(sqrt(x)) do for i:=2 if x mod i=0 较大时, 当i较大时,用这种办法除的次数太多。可以有许多改进办法,以 较大时 用这种办法除的次数太多。可以有许多改进办法, then flag:=false; 减少除的次数,提高运行效率。 减少除的次数,提高运行效率。 if flag 改进: 去除, 是素数。 改进:用2,3,4,……,writeln('prome') , 去除 如果都除不尽, 是素数 then sqrt(i)去除,如果都除不尽,则i是素数。 else writeln('not prome'); end.
【对比 】
For m:=100 to 999 do Begin 100; a:=m div 100; 100) 10; b:= (m mod 100) div 10; 10; c:=c mod 10; if a*a*a+b*b*b+c*c*c=m write(m: then write(m:6); End; End; 百位上的数} For a:=1 to 9 do {百位上的数} 十位上的数} For b:=0 to 9 do {十位上的数} 个位上的数} For c:=0 to 9 do {个位上的数} a*a*a+b*b*b+c*c*c=a*100+b*10 100+b*10+c if a*a*a+b*b*b+c*c*c=a*100+b*10+c write(a*100+b*10+c:6); then write(a*100+b*10+c:6);
参考程序1 参考程序1: Program example17a(input,output); example17a(input,output); Var m,a,b,c:integer; m,a,b,c:integer; Begin 每个数都验证一遍} For m:=100 to 999 do {每个数都验证一遍} Begin 100; 计算百位上的数} a:=m div 100; {计算百位上的数} 100) 10; 计算十位上的数} b:= (m mod 100) div 10; {计算十位上的数} 10; 计算个位上的数} c:=m mod 10; {计算个位上的数} if a*a*a+b*b*b+c*c*c=m write(m: then write(m:6); End; End;{For} End.
多重循环
思考2: 之间的素数。 思考 :求1—100之间的素数。 之间的素数 解题思路: For i:=2 to 100 do begin 1、 用2到 I 去除i,看能否除尽 2、if 除不尽 then 输出素数i end
Program prime(input,output); var i,j,count:integer; flag:boolean; begin count:=0; for i:=2 to 100 do begin flag:=true; for j:=2 to round(sqrt(i)) do if i mod j=0 then flag:=false; if flag then begin write(i:4); count:=count+1; if count mod 5 =0 then writeln; end; end; end.
在上面的两种算法当中, 在上面的两种算法当中 , 后一种算法效率 999更 高 。 第 一 种 算 法 运 行 的 循 环 次 数 为 999100+ 900次 每次运行4 条语句, 100+1=900 次 , 每次运行 4 条语句 , 总共运行 3600条语句 条语句; 3600条语句;而第二种算法运行的循环次数为 10*10=900次 每次运行1 条语句, 9*10*10=900 次 , 每次运行 1 条语句 , 共运行 900条语句 条语句。 900条语句。