《(精品)第四章 循环结构.ppt》由会员分享,可在线阅读,更多相关《(精品)第四章 循环结构.ppt(45页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、对上一讲内容进行复习判断2012年,每个月份的天数。program ex3_10;var month,days:integer;begin readln(month);case month of 1,3,5,7,8,10,12:days:=31;4,6,9,11:days:=30;2:days:=29;else days:=0;end;if days0 then writeln(days);end.第四讲 循环结构4.1.1 for 4.1.1 for 循环语句有两种格式循环语句有两种格式:(1)(1)forfor循环变量循环变量:=:=初值初值 To To 终值终值 do do 语句;语句;
2、(2)(2)forfor循环变量循环变量:=:=初值初值downtodownto 终值终值 do do 语句;语句;第第(1)(1)种格式的初值小于等于终值种格式的初值小于等于终值,循环变量值按自动加循环变量值按自动加1 1递增变化;递增变化;第第(2)(2)种格式的初值大于或等于终值种格式的初值大于或等于终值,循环变量值按自动减循环变量值按自动减1 1递减变化。递减变化。for for 循环是循环是 (以递增以递增1 1或以递减或以递减1)1)计数型循环。计数型循环。说明:说明:格式中的for,to,downto,do都是保留字,to一般用在升序的计数,而downto用在降序的计数。变量标识
3、符在这里称作是控制变量,必须是离散(有序)离散(有序)数据类型,如:for i:=1 to 100 do.for ch:=a to z do.4.1 循环语句(for语句)例3.1 试打印出120的自然数。用用a a代表代表120120各数各数,同时也用同时也用a a兼作计数兼作计数,以控制循环次数;以控制循环次数;让让a a从从1 1开始;开始;输出输出a a;a a自动计数(加自动计数(加1 1),如果未超越所规定的循环范围则重复步如果未超越所规定的循环范围则重复步骤骤,否则结束循环。否则结束循环。Program Exam12;Var a:byte;Begin for a:=1 to 20
4、 do Writeln(a);End.若将程序改为倒计数(递减)循环则输出201的自然数数:Program Exam31;Var a:byte;Begin for a:=20 downto 1 do Writeln(a);End.打印出30至60的偶数方法一:方法一:方法一:方法一:设设设设a a表示表示表示表示3030至至至至6060的所有的数,可用的所有的数,可用的所有的数,可用的所有的数,可用forfor循环列出;循环列出;循环列出;循环列出;用式子用式子用式子用式子a mod 2=0a mod 2=0筛选出其中的偶数并输出。筛选出其中的偶数并输出。筛选出其中的偶数并输出。筛选出其中的偶
5、数并输出。Program ex32;Var a:integer;Begin For a:=30 to 60 doIf(a mod 2=0)then writeln(a);End.打印出30至60的偶数n n方法二:方法二:方法二:方法二:n n设设设设n n表示表示表示表示1515至至至至3030的所有自然数,可用的所有自然数,可用的所有自然数,可用的所有自然数,可用forfor循环列出;循环列出;循环列出;循环列出;n n用式子用式子用式子用式子a:=2*na:=2*n求出其中的偶数;求出其中的偶数;求出其中的偶数;求出其中的偶数;n n将结果输出至屏幕。将结果输出至屏幕。将结果输出至屏幕。
6、将结果输出至屏幕。Program ex32;Begin For n:=15 to 30 do Begin a:=2*n;Writeln(a);End;End.例3.2自然数求和:求从1至100的自然数的和分析分析:令令S0;令令a表示表示1至至100的自然数的自然数,用循环列出;用循环列出;将这些自然数用公式将这些自然数用公式S:=S+a 逐一累加到逐一累加到S中去;中去;循环结束后循环结束后,S即为即为1至至100的自然数的和的自然数的和,输出即可。输出即可。Program ex32;var s,a:integer;Begin S:=0;For a:=1 to 100 do S:=S+a;W
7、riteln(S=,S);Readln;End.例3.3计算前N(N1)个自然数中所有偶数的和分析分析:判定偶数可有多种方法判定偶数可有多种方法,也可以不用判定而直接去构造也可以不用判定而直接去构造偶数偶数,由此得到更多的方法。由此得到更多的方法。方法1 sum:=0;for counter:=1 to n div 2 do sum:=sum+2*counter;方法方法2 sum:=0;for counter:=1 to n do if counter mod 2=0 then sum:=sum+counter;方法3 sum:=0;for counter:=1 to n do if not
8、 odd(counter)then sum:=sum+counter;方法方法4 sum:=0;for counter:=1 to n div 2 do sum:=sum+counter;counter:=counter*2;例例3.43.4一个两位数一个两位数x,x,将它的个位数字与十位数字对调后将它的个位数字与十位数字对调后得到一个新数得到一个新数y,y,此时此时y y恰好比恰好比x x大大36,36,请编程求出所有这样请编程求出所有这样的两位数。的两位数。用用for循环列举出所有的循环列举出所有的两位数两位数,x为循环变量;为循环变量;用公式用公式a:=x div 10分离分离出出x的十
9、位数字;的十位数字;用公式用公式b:=x mod 10分分离出离出x的个位数字;的个位数字;用公式用公式y:=b*10+a合成合成新数新数y;用式子用式子y-x=36筛选出符筛选出符合条件的数合条件的数x并输出。并输出。Program ex34;Var x,a,b,y:byte;Begin For x:=10 to 99 do Begin a:=x div 10;b:=x mod 10;y:=b*10+a;if y-x=36 then writeln(x);End;Readln;End.例例3.5 3.5 把整数把整数30253025从中剪开分为从中剪开分为3030和和2525两个数两个数,此
10、时再此时再将这两数之和平方将这两数之和平方,(30+25),(30+25)2 2=3025=3025计算结果又等于原数。计算结果又等于原数。求所有符合这样条件的四位数。求所有符合这样条件的四位数。设符合条件的四位数为设符合条件的四位数为N,它应当是一个完全平方数它应当是一个完全平方数,用用(a*a)表示。表示。为了确保为了确保N=(a*a)在四位数在四位数(10009999)范围内)范围内,可确定可确定a在在3299循环循环 计算计算N=a*a;将四位数;将四位数N拆拆分为两个数分为两个数n1和和n2 若满足条件若满足条件(n1+n2)*(n1+n2)N 就输出就输出 NProgram Exa
11、m35;Var N,a,x,n1,n2:Integer;Begin for a:=32 to 99 do begin N:=a*a;n1:=N div 100;n2:=N-n1*100;X:=n1+n2;if x*x=N then writeln(N);end;End.例3.6用“*”号打印出如下的长方形图案。*给出的图例共有给出的图例共有4行,我们可以用行,我们可以用一个循环控制行的变化;一个循环控制行的变化;在每行中又有在每行中又有9列,我们可以在前列,我们可以在前面控制行的循环中再套一个循环来面控制行的循环中再套一个循环来控制列的变化。控制列的变化。Program ex36;Begin
12、For a:=1 to 4 do 外循环控制行的变化 begin For b:=1 to 9 do 内循环控制列的变化 write(*);Writeln;输出一行的“*”后换行 End;End.程序中的循环对于a的每个值都包含着一个b=(19)次的内循环。外循环for a 将内循环for b 包含在里面,称为for循环的嵌套。嵌套形式如:for a:=n1 to n2 do for b:=m1 to m2 do 循环体语句;例3.7 打印出九九乘法表:Program Exam37;Var a,b:byte;Begin for a:=1 to 9 do 外循环 begin for b:=1 to
13、 a do 内循环 write(a,*,b,=,a*b,:3);writeln end;ReadlnEnd.例3.8从七张扑克牌中任取三张,有几种组合方法?请编程输出所有组合形式。解:设每次取出三张分别为a,b,c。用三重循环分别从17的范围里取值;为了排除取到重号,用(ab)and(bc)进行判断。program Exam38;const n=7;var a,b,c,t:integer;Begin t:=0;for a:=1 to n do for b:=1 to n do for c:=1 to n do if (ab)and(bc)then Begin inc(t);t:=t+1;wri
14、teln(a:3,b:3,c:3)End;writeln(total:,t:5);End.例3.9 数学上把除了1和它本身,没有别的数能够整除它的自然数叫做素数(或质数)。现在由键盘输入一个自然数N,编程判断N是否是素数,是则输出“Yes”,否则输出“No”。解:根据定义,对于给定的自然数N,只需判断除1和它本身外,还有没有第三个自然数即可。令K从1循环至N;根据N mod K是否为0可统计K的约数的个数;若N的约数的个数超过2个,则判定N不是素数。Program Exam39;Var n,m,k,t:integer;Begin write(N=);ReadLn(N);t:=0;for k:=
15、1 to N do 外循环 if N mod k=0 then t:=t+1;如果N是奇数 if t2 then writeln(No)else writeln(Yes);End.程序中的变量程序中的变量yse为布尔为布尔(或逻辑或逻辑)类型类型(Boolean)。布尔值只有两个:。布尔值只有两个:True(真真)False(假假)布尔值与条件判断结果为真布尔值与条件判断结果为真(条件成立条件成立)或为假或为假(条件不成立条件不成立)的作用相同,的作用相同,常用于条件语句和循环语句中。常用于条件语句和循环语句中。Pascal 共有四种逻辑运算符:and(and(与与)两条件都为两条件都为Tru
16、e时,其结果值为时,其结果值为True;否则为;否则为False;or(or(或或)两条件中只要有一个为两条件中只要有一个为True;其结果值为;其结果值为True;否则为;否则为False;xorxor(异或异或)两条件的逻辑值不相同时,其结果值为两条件的逻辑值不相同时,其结果值为True;否则为;否则为False;not(not(非非)条件为条件为True时,其结果值为时,其结果值为False;否则为;否则为True;(取反取反)例3.9 数学上把除了1和它本身,没有别的数能够整除它的自然数叫做素数(或质数)。现在由键盘输入一个自然数N,编程判断N是否是素数,是则输出“Yes”,否则输出“
17、No”。Program Exam39;Var n,m,k:integer;yn:boolean;Begin write(n=);ReadLn(n);yn:=true;for k:=2 to n-1 do if n mod k=0 then yn:=false;if yn then writeln(Yes)else writeln(No);End.Begin write(n=);ReadLn(n);yn:=true;for k:=2 to trunc(sqrt(n)do if n mod k=0 then begin yn:=false;break;end;if yn then writeln(
18、Yes)else writeln(No);End.Begin write(n=);ReadLn(n);for k:=2 to trunc(sqrt(n)do if n mod k=0 then begin writeln(No);halt;end;writeln(Yes)End.1.打印出打印出1至至20的平方数表。的平方数表。2.打印出打印出100至至200之间的奇数。之间的奇数。3 求出能被求出能被5整除的所有四位数的和。整除的所有四位数的和。4.在下面式子中的二个在下面式子中的二个内填入一个合适的同样的数字,使等式成立。内填入一个合适的同样的数字,使等式成立。3*6528=3*82565
19、.有一个三位数,它的各位数字之和的有一个三位数,它的各位数字之和的11倍恰好等于它自身,请编程求出这个三位数。倍恰好等于它自身,请编程求出这个三位数。6.在自然数中,如果一个三位数等于自身各位数字之立方和,则这个三位数就称为是水在自然数中,如果一个三位数等于自身各位数字之立方和,则这个三位数就称为是水仙花数。仙花数。如如:153=13+53+33,所以,所以153是一个水仙花数。求所有的水仙花数是一个水仙花数。求所有的水仙花数。7.某人想把一元钱换成伍分、贰分、壹分这样的零钱,在这三种零钱中每种零钱都至少某人想把一元钱换成伍分、贰分、壹分这样的零钱,在这三种零钱中每种零钱都至少各有一个的情况下
20、,共有多少种兑换方案。并打出这些方案。各有一个的情况下,共有多少种兑换方案。并打出这些方案。8.输出输出100以内的全部素数,要求每行显示以内的全部素数,要求每行显示5个。个。9.百钱买百鸡:今有钱百钱买百鸡:今有钱100元,要买元,要买100只鸡,公鸡只鸡,公鸡3元一只,母鸡元一只,母鸡1元一只,小鸡元一只,小鸡1元元3只,只,若公鸡、母鸡和小鸡都至少要买若公鸡、母鸡和小鸡都至少要买1只,请编程求出恰好用完只,请编程求出恰好用完100元钱的所有的买鸡方元钱的所有的买鸡方案。案。10.编程序打印出下列图案:平行四边形 等腰三解形 菱形 *For语句课堂练习11.编程打印出如下图案:1 222
21、33333 4444444 555555555For语句提高题猴子吃桃问题:猴子吃桃问题:猴子吃桃问题:猴子吃桃问题:猴子第一天摘下若干个桃子,猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个;第二当即吃了一半,还不瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉一半,又多吃了一天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零个。以后每天早上都吃了前一天剩下的一半零一个。到第一个。到第1010天早上想再吃时,见只剩下一个天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。桃子了。求第一天共摘了多少。古典问题:古典问题:古典问题:古典问题:有一对兔子
22、,从出生后第有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,前长到第三个月后每个月又生一对兔子,假如兔子都不死,前40个月的每个个月的每个月的兔子总数为多少?月的兔子总数为多少?program ex2_1;var n,i:integer;f1,f2,f3:longint;begin n:=40;f1:=1;f2:=1;writeln(No.1:1);writeln(No.2:1);for i:=3 to n do begin f3:=f1+f2;writeln(No.,i,:,f3);f1:=f2;f2:
23、=f3;endend.program ex2_2;var n,i:integer;f1,f2:longint;begin n:=40;f1:=1;f2:=1;for i:=1 to n div 2 do begin writeln(No.,i*2-1,:,f1);writeln(No.,i*2,:,f2);f1:=f1+f2;f2:=f1+f2;endend.program ex1;var day,x1,x2,i:integer;begin x2:=1;for day:=9 downto 1 do begin x1:=2*(x2+1);x2:=x1;end;writeln(Data:,x1);
24、end.4.2 当语句(While语句)格式:while 布尔表达式布尔表达式 do 语句;语句;说明:说明:格式中while和do都是保留字,布尔表达式表示条件,它的描述跟条件语句里的条件描述是一样的。Do后面的语句可以是单一语句也可以是复合语句,称为循环体。只要布尔表达式成立时(即值为TRUE时)就执行循环体,如此反复直到布尔表达式不成立(值为FALSE)时停止。如果一开始就为布尔表达式就不成立(值为FALSE),那么循环体一次也不执行。一般来说,只要循环的条件及循环体描述得当,循环都能顺利结束,不会产生死循环的。有时在程序运行中会有一些特殊的情况,需要终止当前循环的执行,如果将这个条件写
25、到循环体外有不太方便,这时可以使用break来强制终止当前循环的执行。输入任一的自然数A,B,求A,B的最小公倍数。这里采用适合计算机查找的方法:设D是它们的最小公倍数。先找出A,B当中的较大者并存放在A中,将较小者存放在B中,让D=A,当D能够整除B时,则D是所求的最小公倍数;当D不能整除B,就逐次地让D增加A。例如:A=18,B=12,步骤如下:让让D=A (D=18)当当(D mod B)0 为真时为真时(D不能整除不能整除B)就做就做 D=D+A,重复重复 当当(D mod B)0 为假时结束循环为假时结束循环,并输出并输出D输入任一的自然数A,B,求A,B的最小公倍数。program
26、 Exam1;var a,b,d,t:word;begin write(input a,b:);readln(a,b);if ab then begin t:=a;a:=b;b:=t end;d:=a;while d mod b 0 do 当条件为真时就做当条件为真时就做do后面的语句后面的语句 inc(d,a);writeln(,a,b,=,d);End.(1)inc(x)等同等同 x:=x+1;(2)inc(x,n)等同等同 x:=x+n;(3)dec(x)等同等同 x:=x-1;(4)dec(x,n)等同等同 x:=x-n;辗转相除法求自然数A,B的最大公约数(1)求求A除以除以B的余数
27、;的余数;(2)当余数当余数0就做就做n=a;a=b;b=n mod b,重复重复(1)和和(2);(3)当余数当余数=0就结束循环就结束循环,并输出并输出b值。值。比如比如a=18,b=12时,处理步理步骤为:(1)a mod b,得余数得余数为6;(2)此余数不此余数不为零零,让a=12,b=6;(3)重复重复(1)(2),得余数得余数为0;(4)结束循束循环,输出出6program Exam310;var a,b,n:word;begin write(input a,b:);readln(a,b);write(,a,b,)=);while a mod b 0 do begin n:=a;
28、a:=b;b:=n mod b;end;writeln(b);End.将一根长为将一根长为369cm369cm的钢管截成长为的钢管截成长为69cm69cm和和39cm39cm两种规两种规格的短料。在这两种规格的短料至少各截一根的前提格的短料。在这两种规格的短料至少各截一根的前提下下,如何截才能余料最少。如何截才能余料最少。设设两种规格的短料分别为两种规格的短料分别为:规格为规格为69cm的的x根根,可在可在1至至(369-39)/69范围循环取值范围循环取值;规格为规格为39cm的的y根根,用用y=(369-69*X)/39)计算计算;余料余料R=369-69*X-39*Y。设最小余料的初始值
29、设最小余料的初始值min=369;在在X循环范围内循环范围内,每一个每一个X值都计算出对应的值都计算出对应的Y和和R;如果如果Rmin,就将就将R存入存入min,x存入存入n,y存入存入m,记录余料记录余料最小时的最小时的x和和y;重复步骤重复步骤,当当x值超出值超出((36939)/69)时结束循环。时结束循环。program exam;program exam;varvar x,y,r,min,n,m,ax,y,r,min,n,m,a:integer;:integer;beginbegin min:=369;min:=369;a:=(369-39)div 69;a:=(369-39)div
30、 69;x:=1;x:=1;while x=a do while x=a do begin begin y:=(369-69*x)div 39;y:=(369-69*x)div 39;r:=369-69*x-39*y;r:=369-69*x-39*y;if rmin then if rmin then beginbegin min:=r;n:=x;m:=y min:=r;n:=x;m:=y end;end;inc(xinc(x););end;end;writeln(minwriteln(min=,min,x=,n,y=,m);=,min,x=,n,y=,m);end.end.for x:=1
31、to a dofor x:=1 to a do begin begin y:=(369-69*x)div 39;y:=(369-69*x)div 39;r:=369-69*x-39*y;r:=369-69*x-39*y;if rmin then if r=6 do begin a:=0;while a =4 do begin b:=0;while b 0 then begin s:=50*a+35*b+25*c;if s=225 then writeln(n:3,a:3,b:3,c:3,s:5);end;inc(b);end;inc(a);end;dec(n);end;end.Program
32、Exam312_1;Var a,b,c,n,s:Integer;Begin Writeln(N:3,A:3,B:3,C:3,S:5);for n:=8 downto 6 do N取值8,7,6,并分别代表甲、乙、丙 for a:=0 to 4 do 中50环的可能范围 for b:=0 to 6 do 中30环的可能范围 begin c:=n-a-b;计算中25环的子弹数 if c0 then begin 如果不是负数 s:=50*a+35*6+25*c;计算总成绩 if s=225 then writeln(n:3,a:3,b:3,c:3,s:5);end end;End.While语句练习
33、语句练习1.求求S=1-1/2+1/3-1/4+1/5-1/6+(求前(求前N项的和项的和)2.Faibonacci数列前几项为数列前几项为:0,1,1,2,3,5,8,其规律是从第三项起其规律是从第三项起,每项均等于每项均等于前两项之和。求前前两项之和。求前30项项,并以每行并以每行5个数的格式输出。个数的格式输出。3.小球从小球从100高处自由落下高处自由落下,着地后又弹回高度的一半再落下。求第着地后又弹回高度的一半再落下。求第20次着地时次着地时,小球共通过多少路程小球共通过多少路程?4.某登山队员第一天登上山峰高度的一半又某登山队员第一天登上山峰高度的一半又24米米;第二天登上余下高度
34、的一半第二天登上余下高度的一半又又24米;每天均如此。到第七天米;每天均如此。到第七天,距山顶还剩距山顶还剩91米。求此山峰的高度米。求此山峰的高度?5.给出某整数给出某整数N,将将N写成因数相乘的形式。如写成因数相乘的形式。如:N=12,输出输出:12=1*2*2*3.6.出售金鱼者决定将缸里的金鱼全部卖出。第一次卖出全部金鱼的一半加二分之一条出售金鱼者决定将缸里的金鱼全部卖出。第一次卖出全部金鱼的一半加二分之一条;第二次卖出剩余的三分之一加三分之一条金鱼第二次卖出剩余的三分之一加三分之一条金鱼;第三次卖出余下金鱼的四分之一加四分第三次卖出余下金鱼的四分之一加四分之一条之一条;第四次卖出余下
35、的五分之一加五分之一条金鱼。还剩下第四次卖出余下的五分之一加五分之一条金鱼。还剩下11条金鱼。当然条金鱼。当然,出售金出售金鱼时都是整数条鱼时都是整数条,不能有任何破损。求缸里原有的金鱼数不能有任何破损。求缸里原有的金鱼数?7.外出旅游的几位朋友决定次日早晨共分一筐苹果。天刚亮外出旅游的几位朋友决定次日早晨共分一筐苹果。天刚亮,第一个人醒来第一个人醒来,他他先拿了一个先拿了一个,再把筐里的八分之一拿走再把筐里的八分之一拿走;第二个人醒来第二个人醒来,先拿两个先拿两个,再把筐里的八再把筐里的八分之一拿走分之一拿走;第三个人醒来第三个人醒来,先拿三个先拿三个,再拿走筐里的八分之一再拿走筐里的八分之
36、一;每个人依次照每个人依次照此方法拿出各人的苹果此方法拿出各人的苹果,最后筐里的苹果全部拿完最后筐里的苹果全部拿完,他们每人所拿到的苹果数正他们每人所拿到的苹果数正巧一样多。求原先筐里的苹果数和人数。巧一样多。求原先筐里的苹果数和人数。4.3 4.3 直到型循环(直到型循环(RepeatRepeat语句)语句)格式格式:repeatrepeat 语句;语句;语句;语句;语句;语句;语句;语句;语句;语句;语句;语句;until until 布尔表达式;布尔表达式;布尔表达式;布尔表达式;说明说明:格式中格式中repeat和和until都是保留字都是保留字,其间的语句构成循环体其间的语句构成循环
37、体,最后一个语句最后一个语句的分号可以省略;的分号可以省略;until后的布尔表达式后的布尔表达式表示条件表示条件,描述的是循环结束的条件。描述的是循环结束的条件。功能功能:反复执行循环体直到布尔表达式反复执行循环体直到布尔表达式的值为的值为true时为止。时为止。WhileWhile与与与与RepeatRepeat语句对比语句对比语句对比语句对比:while是先判断后执行是先判断后执行,而而repeat是先执行后判断是先执行后判断,因此因此while语语句的循环体有可能一次也不执行句的循环体有可能一次也不执行,而而repeat语句至少执行一次语句至少执行一次;前者是当条件满足时执行前者是当条
38、件满足时执行,而后者是当条件不满足时执行而后者是当条件不满足时执行;前者的循环体是复合语句时要用前者的循环体是复合语句时要用begin、end,而后者却不一定而后者却不一定要用。要用。求两个自然数M和N的最大公约数(方法二方法二)若自然数若自然数a既是既是M的约数的约数,又是又是N的约数的约数,则称则称a为为M和和N的公约的公约数数,其中最大的称为最大公约数。为了求得最大公约数其中最大的称为最大公约数。为了求得最大公约数,可以从最可以从最大可能的数(如大可能的数(如M或或N)向下寻找)向下寻找,找到的第一个公约数即是最大找到的第一个公约数即是最大公约数。公约数。Program ex;Var a
39、,N,M:integer;Begin write(input M,N:);readln(M,N);a:=N+1;Repeat a:=a-1;Until(M mod a=0)and(N mod a=0);writeln(a);Readln;End.校体操队到操场集合校体操队到操场集合,排成每行排成每行2 2人人,最后多出最后多出1 1人人;排成每行排成每行3 3人人,也多出也多出1 1人人;分别按每行排分别按每行排4,5,64,5,6人人,都多出都多出1 1人人;当排成每行当排成每行7 7人时人时,正正好不多。求校体操队至少是多少人好不多。求校体操队至少是多少人?设校体操队为设校体操队为X人人,
40、根据题意根据题意X应是应是7的倍数的倍数,因因此此X的初值为的初值为7,以后用以后用inc(x,7)改变改变X值;值;为了控制循环为了控制循环,用逻用逻辑变量辑变量yes为真为真(True)使循使循环结束;环结束;如果诸条件中有一如果诸条件中有一个不满足个不满足,yes 的值就会为的值就会为假假(false),就继续循环。就继续循环。program Exam311;var x:word;yes:boolean;begin x:=0;repeat yes :=true;inc(x,7);if x mod 2 1 then yes:=false;if x mod 3 1 then yes:=fal
41、se;if x mod 4 1 then yes:=false;if x mod 5 1 then yes:=false;if x mod 6 1 then yes:=false;until yes;直到yes的值为真 writeln(All=,x);readlnend.请思考其它方法从键盘输入一个整数X(X不超过1010),若X的各位数字之和为7的倍数,则打印“Yes”,否则中打印“No”。本题考察的是数字分离的方法本题考察的是数字分离的方法,由于由于X的位数不定,的位数不定,所以以往的解法不能奏效所以以往的解法不能奏效,这是介绍一种取余求商法。这是介绍一种取余求商法。(1)用)用X mod
42、 10分离出分离出X的个位数字;的个位数字;(2)用)用X div 10将刚分离的个数数字删除将刚分离的个数数字删除,并将结果送回给并将结果送回给X;(3)重复()重复(1)()(2)直到)直到X0。Program ex12;var s:integer;a,x:longint;Begin s:=0;repeat a:=x mod 10;x:=x div 10;s:=s+a;until x=0;if s mod 7=0 then writeln(Yes)else writeln(No);end;求1998个1998的乘积的末两位数是多少?积的个位与十位数只积的个位与十位数只与被乘数与乘数的个位与
43、与被乘数与乘数的个位与十位数字有关十位数字有关,所以本题相所以本题相当于求当于求1998个个98相乘相乘,而且而且本次的乘积主下一次相乘本次的乘积主下一次相乘的被乘数的被乘数,因此也只需取末因此也只需取末两位参与运算就可以了。两位参与运算就可以了。Program exam;var a,t:integer;Begin a:=1;t:=0;repeat t:=t+1;a:=(a*98)mod 100;until t=1998;writeln(a);Readln;End.尼科彻斯定理:将任何一个正整数的立方写成一组相邻奇数之尼科彻斯定理:将任何一个正整数的立方写成一组相邻奇数之和。和。如如:3:33
44、 3=7+9+11=27 4=7+9+11=27 43 3=13+15+17+19=64=13+15+17+19=64从举例中发现从举例中发现从举例中发现从举例中发现:(1)n3正好等于正好等于n个奇数之和;个奇数之和;(2)n个奇数中的最小奇数是从个奇数中的最小奇数是从1开始的奇数序列中的第开始的奇数序列中的第m个个奇数奇数,与与 n 的关系为:的关系为:m=n(n 1)/2+1。(3)奇数序列中第奇数序列中第m个奇数的值为个奇数的值为x,且且 x=2m1,比如比如:n=3时时,m=3(3-1)/2+1=4,即即3个奇数中最小的奇数是奇数序列中的个奇数中最小的奇数是奇数序列中的第第4个个,它
45、的值为它的值为x=(2m-1)=7,所以:所以:27=7+9+11。(4)从最小的奇数值从最小的奇数值x开始开始,逐个递增逐个递增2,连续连续n个个,用用t从从1开始开始计数计数,直到直到t=n为止。为止。23=3+5=8 =3+5=8 =3+5=8 =3+5=8 53=21+23+25+27+29=125=21+23+25+27+29=125=21+23+25+27+29=125=21+23+25+27+29=12563=31+33+35+37+39+41=216=31+33+35+37+39+41=216=31+33+35+37+39+41=216=31+33+35+37+39+41=21
46、673=43+45+47+49+51+53+55=343=43+45+47+49+51+53+55=343=43+45+47+49+51+53+55=343=43+45+47+49+51+53+55=343尼科彻斯定理:将任何一个正整数的立方写成一组相邻奇数之尼科彻斯定理:将任何一个正整数的立方写成一组相邻奇数之和。和。如如:33=7+9+11=27 43=13+15+17+19=64:33=7+9+11=27 43=13+15+17+19=64Program Exam35;Var n,m,x,t,s :integer;Begin write(input n:);readln(n);输入N m
47、:=(n*(n-1)div 2)+1;找到第m个奇数 x:=2*m-1;t:=1;算出第m个奇数的值x,是所求的第一个 write(n,*,n,*,n,=,x);输出第一个 s:=x;用S计算和 if n1 then Repeat inc(x,2);计算下一个奇数 write(+,x);加上下一个奇数 inc(t);inc(s,x);计个数并累加和 Until t=n;直到n个 Writeln(=,s);ReadlnEnd.Repeat 语句练习语句练习1.求四个自然数求四个自然数a,b,c,d的最小公倍数。的最小公倍数。2.小会议室里有几条相同的长凳小会议室里有几条相同的长凳,有若干人参加开
48、会。如果每条凳子坐有若干人参加开会。如果每条凳子坐6人人,结结果有一条凳子只坐有果有一条凳子只坐有3人人;如果每条凳子坐如果每条凳子坐5人人,就有就有4人不得不站着。求会议室人不得不站着。求会议室里有多少人开会里有多少人开会,有多少条长凳有多少条长凳?3.某动物饲养中心用某动物饲养中心用1700元专款购买小狗元专款购买小狗(每只每只31元元)和小猫和小猫(每只每只21元元)两种两种小动物。要求专款专用小动物。要求专款专用,正好用完正好用完,应当如何购买应当如何购买?请输出所有方案。请输出所有方案。4.某整数某整数X加上加上100就成为一个完全平方数就成为一个完全平方数,如果让如果让X加上加上1
49、68 就成为另一个完就成为另一个完全平方数。求全平方数。求X?5.某次同学聚会某次同学聚会,老同学见面个个喜气洋洋老同学见面个个喜气洋洋,互相握手问好。参加此次聚会者互相握手问好。参加此次聚会者每人都与老同学握了一次手每人都与老同学握了一次手,共握共握903次次,试求参加聚会的人数?试求参加聚会的人数?6.用自然数用自然数300,262,205,167分别除以某整数分别除以某整数A,所得到的余数均相同。,所得到的余数均相同。求出整数以及相除的余数?求出整数以及相除的余数?7.1600年前我国的一部经典数学著作中有题:年前我国的一部经典数学著作中有题:“今有物,不知其数,三三数今有物,不知其数,
50、三三数之,剩二;五五数之,剩三;七七数之,剩二,问物几何。之,剩二;五五数之,剩三;七七数之,剩二,问物几何。”求最小解。求最小解。8.编程求出所有不超过编程求出所有不超过1000的数中,含有数字的数中,含有数字3的自然数,并统计总数。的自然数,并统计总数。9.阿姆斯特朗数:如果一个正整数等于其各个数字的立方和,则该数称为阿阿姆斯特朗数:如果一个正整数等于其各个数字的立方和,则该数称为阿姆斯特朗数(也称自恋数),如姆斯特朗数(也称自恋数),如407430373,试编程求出,试编程求出1000以内的所以内的所有阿姆斯特朗数。有阿姆斯特朗数。4.4 4.4 多重循环(循环的嵌套)多重循环(循环的嵌