循环结构1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一节for 循环
for循环是一种自动计数型循环。
[例3.1] 试打印出1~20的自然数。
解:①用a代表1~20各数,同时也用a兼作计数,以控制循环次数;
②让a从1开始;
③输出a;
④a自动计数(加1),如果未超越所规定的循环范围则重复步骤③,否则结束循环。
Pascal程序:
Program Exam12;
Var a: byte;
Begin
for a:=1 to 20 do
Writeln (a);
Readln
End.
程序中for a:=1 to 20 do Writeln (a);是for循环语句。
for 循环语句有两种格式:
(1) for循环变量:=初值To 终值do 语句;
(2) for循环变量:=初值downto 终值do 语句;
第(1)种格式的初值小于等于终值,循环变量值按自动加1递增变化;
第(2)种格式的初值大于或等于终值,循环变量值按自动减1递减变化。for 循环是(以递增1或以递减1) 计数型循环。
比如: 若将[例3.1]程序改为倒计数(递减)循环,则输出20~1的自然数数:
Program Exam31;
Var a: byte;
Begin
for a:=20 downto 1 do
Writeln(a) ;
Readln
End.
[例3.2]打印出30至60的偶数。]
解:
方法一:
= 1 \* GB3 ①设a表示30至60的所有的数,可用for循环列出;
= 2 \* GB3 ②用式子 a mod 2=0筛选出其中的偶数并输出。
Pascal程序:
Program ex32;
Var a : integer;
Begin
For a := 30 to 60 do
If (a mod 2=0) then writeln(a);
Readln;
End.
在这个程序中,for循环后的循环语句是一个条件分支语句。
方法二:我们知道,在式子a=2*n中,若n取自然数1、2、3、…,时,则a依次得到偶数2、4、6、…。因此要想得到30至60的偶数,就可以让上面式子中的n取15至30的自然数就可以了。所以本题还可以按以下步骤处理:
= 1 \* GB3 ①设n表示15至30的所有自然数,可用for循环列出;
= 2 \* GB3 ②用式子 a := 2*n求出其中的偶数;
= 3 \* GB3 ③将结果输出至屏幕。
Pascal程序:
Program ex32;
Begin
For n := 15 to 30 do
Begin
a := 2*n;
Writeln(a);
End;
Readln;
End.
[例3.3]自然数求和:编一个程序,求从1至100的自然数的和。
解:①令S=0;
②令a表示1至100的自然数,用循环列出;
③将这些自然数用公式S:=S+a 逐一累加到S中去;
= 4 \* GB3 ④循环结束后,S即为1至100的自然数的和,输出即可。
Pascal程序:
Program ex33;
var s,a : integer;
Begin
S := 0;
For a := 1 to 100 do
S := S+a;
Writeln(‘S=’,S);
Readln;
End.
[例3.4]一个两位数x,将它的个位数字与十位数字对调后得到一个新数y,此时y恰好比x大36,请编程求出所有这样的两位数。
解:①用for循环列举出所有的两位数,x为循环变量;
②用公式a:= x div 10分离出x的十位数字;
③用公式b:= x mod 10分离出x的个位数字;
④用公式y:= b*10+a合成新数y;
= 5 \* GB3 ⑤用式子y-x=36筛选出符合条件的数x并输出。
Pascal程序:
Program ex34;
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] 把整数3025从中剪开分为30和25两个数,此时再将这两数之和平方,(30+25)2=3025计算结果又等于原数。求所有符合这样条件的四位数。
解:设符合条件的四位数为N,它应当是一个完全平方数,用(a*a)表示。
①为了确保N=(a*a)在四位数(1000~9999)范围内,可确定a在32~99循环;
②计算N=a*a;将四位数N拆分为两个数n1和n2;
③若满足条件(n1+n2)*(n1+n2)=N 就输出N 。
Pascal程序:
Program Exam35;
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;
Readln
End.
[例3.6]用“*”号打印出如下的长方形图案。
*********
*********
*********
*********
解:①上面给出的图例共有4行,我们可以用一个循环控制行的变化;
②在每行中又有9列,我们可以在前面控制行的循环中再套一个循环来控制列的变化。
Pascal程序:
Program ex36;