从上述框图中可以看出,要使用循环语句时,必须要确定循环体及条件(布尔表达式)两个重要因素,亦即首要考虑的是:我要重复执行哪些语句,我要重复到什么时候为止!
[例5、4],从键盘上输入两个整数M,N,求它们的最大公约数。
分析:我们只需从M,N中更小的一个数开始,每次让其减1,直到这个数能同时被M和N数整除为止。在下述程序中,我们在程序头部调用了CRT单元,是为了使用CLRSCR语句来清屏,即把输出屏幕上的字符清除干净。 Var m,n,x:integer; Begin
Readln(m,n);
If m>n then x:=n else x:=m;
While (n mod x<>0) or (m mod x<>0) do begin x:=x-1; End;
Writeln(x); End.
上述程序如果改用REPEAT语句来做的话,程序为: var m,n,x:integer; begin
Readln(m,n);
If m>n then x:=n+1 else x:=m+1; Repeat X:=x-1;
Until (m mod x=0) and (n mod x=0); Writeln(x); End.
请大家考虑上述两个程序为何会有这样有不同之处。
二、竞赛练习
用while循环做以下习题。
计算1—1000之间能同时被3和5整除的整数的和。01.pas
求所有的三位数中十位数能被个位数和百位数之和整除的数。02.pas 求水仙花数。所谓水仙花数,是指一个三位数abc,如果满足a^3+b^3+c^3=abc,则abc是水仙花数。03.pas
求所有满足条件的四位数: (1)这四位数是11的倍数; (2)b+c=a; 04.pas
20
计算下列式子的值: (1)1+3+……+9905.pas
(2)1+2+4+8+…+102406.pas
输入一个整数,计算它各位上数字的和。(注意:是任意位的整数)07.pas 输入一整数A,判断它是否质数。(提示:若从2到A的平方根的范围内,没有一个数能整除A,则A是质数。)08.pas
自己总结了,三个循环的一些相同不同,适用范围等。
多重循环语句 (补充知识)
多重循环语句即循环嵌套,也就是一个循环语句的循环体中还有循环语句。 [例5、8]编程序打印九九乘法表: var I,j:integer; begin
for I:=1 to 9 do begin for j:=1 to 9 do begin
write(j:1,?*?,i:1,?=?,I*j:2); end; writeln;
end; end.
运行结果: 1*1= 1 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 1*7=7 1*8=8
2*1= 2 2*2= 4 2*3= 6 2*4= 8
3*1= 3 3*2= 6 3*3= 9 3*4=12
4*1= 4 5*1= 5 4*2= 8 5*2=10 4*3=12 5*3=15 4*4=16 5*4=20 4*5=20 5*5=25 4*6=24 5*6=30 4*7=28 5*7=35 4*8=32 5*8=40
6*1=6 7*1= 7 6*2=12 7*2=14 6*3=18 7*3=21 6*4=24 7*4=28 6*5=30 7*5=35 6*6=36 7*6=42 6*7=42 7*7=49 6*8=48 7*8=56
8*1= 8 9*1= 9 8*2=16 9*2=18 8*3=24 9*3=27 8*4=32 9*4=36 8*5=40 9*5=45 8*6=48 9*6=54 8*7=56 9*7=63 8*8=64 9*8=72
2*5=10 3*5=15 2*6=12 3*6=18 2*7=14 3*7=21 2*8=16 3*8=24
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81 注意:循环有嵌套时,必须分清层次,切不可把循环进行交叉。
21
[例5、9]编程序分别打印以下三图: (1)
(2)
(3)
***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** (1) Uses crt; Var I,j:integer; Begin Clrscr; For I:=1 to 5 do begin For j:=1 to 5 do begin Write(?*?); End; Writeln; End; End. (2) Uses crt; Var I,j:integer; Begin Clrscr; For I:=1 to 5 do begin Write(? ?:20+i); For j:=1 to 5 do begin Write(?*?); End; Writeln; End; (3) Uses crt; Var I,j:integer; Begin Clrscr; For I:=1 to 5 do begin Write(? ?:20-I); For j:=1 to 5 do begin Write(?*?); End; Writeln; End; End. End. 请大家注意看清上述三个小程序,其功能是分别打印出上述三个由“*”组成的小图形。三个图形的不同之处是:第一个直上直下,是个矩形;第二个是左斜的平行四边形;第三个是右斜的平行四边形。所以三个对应的程序也就有所不同,第(2)、(3)个程序比第(1)个多了一句,即加粗加线的那一句。这两句的作用是使每一行开头打印几个空格,即让图形左或右斜。WRITELN的作用是打印完一行后换行。
[例5、10]编程打印下列图形: 1 222 33333 4444444 555555555 Uses crt; Var I,j:integer; Begin Clrscr; For I:=1 to 5 do begin Write(? ?:20-I); For j:=1 to 2*I-1 do begin Write(I:1); End; Writeln; End; End.
22
清屏 打印每一行前的20-I个空格,这样每行都比上一行左移 每一行打印2*I-1列 打印该行行数 [例5、11]判断一个数是不是素数:
素数,即为除了1和它本身外没有另外的因数的整数。所以我们判断一个数N是否素数,可以用2至N-1所有数去除N,如果没有一个数能被N整除,则N为素数。
当然,其实我们可以不用用2至N-1这第多的数去除,而只需用2至不大于N的平方根的整数去除N即可(为什么)?
这里我们的程序就用2至TRUNC(SQRT(N))来判断,到后面我们还会谈到:如果要判断一个数是否素数,可只用小于TRUNC(SQRT(N))的所有素数去除即可。
Var I,j,n:integer; Begin Readln(i); n:=0; For j:=2 to i-1 do begin If I mod j<>0 then n:=n+1; End; If n=i-2 then write(I:5); End; End. Var I,j:integer; P:boolean; Begin Readln(i); P:=true; For j:=2 to trunc(SQRT(I)) do begin If I mod j=0 then p:=false; End; If p then write(I:5); End; End. 从键盘输入一个数i n是计数器,用来统计多少个数不能被i整除 用2至i-1的数来除I 如果I不能整除J,则n增加1 如果n=i-2则I就是素数(为什么),打印出来 n=i-2 是 n=i-1-2+1 从键盘输入一个数i 在判断I是否素数前,先把判断器P的值设为TRUE,假设认定i是素数 用2至trunc(SQRT(I))的数来除I 如果I能整除J,说明i不是素数,前面假设不成立,则P的值改为FALSE 如果P的值仍为TRUE,则I就是素数,打印出来 以上两个方法各有千秋,后者用的较多,即用一个开关p
23
第十二章
综合练习一
本节练习非常多,所以请大家不要急、细心的做好,能够独立的完成本节练习,说明的你信息学素质已经非常不错了!!!! 1、计算下列式子的值:
(1)1+2+……+1000 01.pas (2)1+3+5+……+97+99 02.pas (3)1+2+4+8+…+1024 03.pas
2、求所有的三位数中十位数能被个位数和百位数之和整除的数。 04.pas 3、求水仙花数。所谓水仙花数,是指一个三位数abc,如果满足a^3+b^3+c^3=abc,则abc是水仙花数。05.pas
4、求所有满足条件的四位数abcd: (1)这四位数是11的倍数; (2)b+c=a+d。(3)a,b,c,d均是小于10的互不相等的自然数; (4) bc是完全平方数. 06.pas
5、输入一个整数,计算它各位上数字的和。(注意:是任意位的整数) 07.pas 6、求出100以内的所有质数。 08.pas
7、求两个数的最小公倍数和最大公约数。(提示:公约数一定小于等于两数中的小数,且能整除两数中的大数。公倍数一定大于等于两数中的大数,且是大数的倍数,又能给两数中的小数整除。) 09.pas 8、“百钱买百鸡”是我国古代的著名数学题。题目这样描述:3文钱可以买1只公鸡,2文钱可以买一只母鸡,1文钱可以买3只小鸡。用100文钱买100只鸡,那么各有公鸡、母鸡、小鸡多少只?与之相似,有\鸡兔同笼\问题。10.pas 9、有三种邮票,第一种每套一张售价2元,第二种每套一张售价4元,第三种每套9张售价2元。现用100元买了100张邮票,问这三种邮票各买几张? 11.pas 10、输入一个正整数N,把它分解成质因子相乘的形式。
如:36=1 X 2 X 2 X 3 X 3; 19=1 X 19 12.pas 11、计算1—1000之间能同时被3和5整除的整数的和。13.pas
12、甲、乙、丙、丁四人共有糖若干块,甲先拿出一些糖分给另外三人,使他们三人的糖数加倍;乙拿出一些糖分给另外三人,也使他们三人的糖数加倍;丙、丁也照此办理,此时甲、乙、丙、丁四人各有16块,编程求出四个人开始各有糖多少块。 14.Pas
24