FOR循环语句
前面所计的两个语句都是在未知循环次数的情况下而用的循环语句,但在程序中,如果我们已经知道循环的次数而来编程序的话,就可以使用 FOR循环语句,这也是 PASCAL及其它高级语言中用得最多的语句。其语法格式有两种,如下:
(1) 增量为 1:
for 变量名:=初值 to 终值 do begin
语句序列(循环体);
end;
(2) 增量为 -1:
for 变量名:=初值 downto 终值 do begin
语句序列(循环体);
end;
变量名的类型由程序头部中定义,而其初值、终值必须和它是同一类型。该变量的类型是能是有序数据类型。
上述两种格式都是用变量的初值与终值来规定循环的次数。如以下两个小程序:
|
Var I:integer; |
Var I:integer; |
由上可以看出 FOR循环的作用。
[例 5、 5]:从键盘输入一个字符串,把它按正序及逆序分别输出:
uses crt;
var s:string;
l,I:integer;
begin
clrscr;
write(‘Please input the string:’);
readln(s);
l:=length(s);
for I:=1 to l do begin
write(s[I]);
end;
writeln;
for I:=l downto 1 do begin
write(s[I]);
end;
end.
[例 5、 6]计算 ![]()
uses crt;
var s,a:integer;
begin
clrscr;
s:=0;
for a:=1 to 10 do begin
s:=s+a*a;
end;
writeln(s);
end.
[例 5、 7]:计算: 1+3+5+7+…… 101的值:
uses crt;
var m,n:integer;
begin
clrscr;
m:=0;
for n:=0 to 50 do begin
m:=m+(2*n+1);
end;
writeln(m);
end.
请大家注意上述程序中的几个小技巧,一个是 FOR N: =0 TO 50,共循环 51次;一个是 M: =M+( 2*N+1),其是的 2*N+1得到的是一序列的奇数。
多重循环语句
多重循环语句即循环嵌套,也就是一个循环语句的循环体中还有循环语句。
[例 5、 8]编程序打印九九乘法表:
uses crt;
var I,j:integer;
begin
clrscr;
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 |
2*1= 2 |
3*1= 3 |
4*1= 4 |
5*1= 5 |
6*1=6 |
7*1= 7 |
8*1= 8 |
9*1= 9 |
|
1*2=2 |
2*2= 4 |
3*2= 6 |
4*2= 8 |
5*2=10 |
6*2=12 |
7*2=14 |
8*2=16 |
9*2=18 |
|
1*3=3 |
2*3= 6 |
3*3= 9 |
4*3=12 |
5*3=15 |
6*3=18 |
7*3=21 |
8*3=24 |
9*3=27 |
|
1*4=4 |
2*4= 8 |
3*4=12 |
4*4=16 |
5*4=20 |
6*4=24 |
7*4=28 |
8*4=32 |
9*4=36 |
|
1*5=5 |
2*5=10 |
3*5=15 |
4*5=20 |
5*5=25 |
6*5=30 |
7*5=35 |
8*5=40 |
9*5=45 |
|
1*6=6 |
2*6=12 |
3*6=18 |
4*6=24 |
5*6=30 |
6*6=36 |
7*6=42 |
8*6=48 |
9*6=54 |
|
1*7=7 |
2*7=14 |
3*7=21 |
4*7=28 |
5*7=35 |
6*7=42 |
7*7=49 |
8*7=56 |
9*7=63 |
|
1*8=8 |
2*8=16 |
3*8=24 |
4*8=32 |
5*8=40 |
6*8=48 |
7*8=56 |
8*8=64 |
9*8=72 |
|
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 |
注意:循环有嵌套时,必须分清层次,切不可把循环进行交叉。
[例 5、 9]编程序分别打印以下三图:

|
(1) Uses crt; |
(2) Uses crt; |
(3) Uses crt; |
请大家注意看清上述三个小程序,其功能是分别打印出上述三个由“ *”组成的小图形。三个图形的不同之处是:第一个直上直下,是个矩形;第二个是左斜的平行四边形;第三个是右斜的平行四边形。所以三个对应的程序也就有所不同,第( 2)、( 3)个程序比第( 1)个多了一句,即显示红色的那一句。这两句的作用是使每一行开头打印几个空格,即让图形左或右斜。 WRITELN的作用是打印完一行后换行。
[例 5、 10]编程打印下列图形:

|
Uses crt; |
|
[例 5、 11]打印 1 — 100间的所有素数:
素数,即为除了 1和它本身外没有另外的因数的整数。所以我们判断一个数 N是否素数,可以用 2至 N-1所有数去除 N,如果没有一个数能被 N整除,则 N为素数。
当然,其实我们可以不用用 2至 N-1这第多的数去除,而只需用 2至不大于 N的平方根的整数去除 N即可(为什么)?
这里我们的程序就用 2至 TRUNC( SQRT( N))来判断,到后面我们还会谈到:如果要判断一个数是否素数,可只用小于 TRUNC( SQRT( N))的所有素数去除即可。
|
Var I,j:integer; |
如果 I能整除 J,则 P的值改为 FALSE 如果 P的值仍为 TRUE,则 I就是素数,打印出来 |
[例 5、 12]以下是 A, B, C三人说的话:
A:“ B在说谎”; B:“ C在说谎”; C:“ A、 B都在说谎”。现在问,到底谁说真话,谁说谎?
分析: A、 B、 C三人,要么说谎,要么说真话,即三个的状态要么为 FALSE,要么为 TRUE,所以,可让 A、 B、 C三个变量进行循环,循环初值为 TRUE,终值为 FALSE。而三个人所说的话即为三个逻辑表达式,其值也为 TRUE或 FALSE,并且与 A、 B、 C的值是有关系的。 A、 B、 C三个所说的话转化为逻辑表达式即为:
A: B=FLASE;
B: C=FALSE;
C:( A=FALSE) AND ( B=FALSE)
以上三个逻辑表达式的值中, TRUE的个数应该与 A、 B、 C三个变量中 TRUE的个数相同。并且,每一个变量的值应该与其对应的话的逻辑表达式的值相等。如: A应该等于( B=FALSE)这个逻辑表达式。程序如下:
Var a,b,c:boolean;
Begin
For a:=false to true do begin
For b:=false to true do begin
For c:=false to true do begin
If (a=(b=false)) and (b=(c=false)) and (c=((a=false) and (b=false)))
then Begin
Writeln(a:10,b:10,c:10);
End;
End;
End;
End;
End.
|
浙公网安备 33010602011771号