DELPHI语法基础 循环嵌套
- 格式:pdf
- 大小:91.19 KB
- 文档页数:2
delphi语法基础-循环嵌套
循环嵌套用于一个循环的循环体中又包含循环结构程序时。
例5_6、1!+2!+…+10!的值。
分析:这个问题是求1到10自然数的阶乘之和。
var s,t:longint;
i,j:integer;
begin
s:=0;
for i:=1to10do
begin
t:=1;
for j:=1to i do t:=t*j;{求N!的值t}
s:=s+t;{累加N!的值t}
end;
writeln('s=',s);
end.
以上的程序是一个二重for循环嵌套。
这是比较容易想到的方法,但实际上对于求n!,可以求出的(n-1)!再乘上n即可得到,而无需重新从1再累乘到n。
程序可改为:
var s,t:longint;
i:integer;
begin
S:=0;t:=1;
for i:=1to10do
begin t:=t*i;s:=s+t end;
writeln('s=',s);
end.
显然程序二的效率要比程序一高得多。
程序一要进行1+2+…+10=55次循环,而程序二进行10次循环。
例5_7、上街采购,用500元钱买了90只鸡,其中母鸡一只15元,公鸡一只10元,小鸡一只5元,正好把钱买完。
问母鸡、公鸡、小鸡各买多少只?
var i,j,k:integer;
begin
for i:=1to33do
for j:=1to50do
begin
k:=90-i-j;
if15*i+10*j+5*k=500then writeln(i:5,j:5,k:5);
end;
end.
例5_8、求100-200之间的所有素数。
分析:我们可对100-200之间的每一整数进行判断,判断它是否为素数,是则输出。
而对于任意整数i,根据素数定义,我们从2开始到找到i的第一个约数。
若找到第一个约数,则i必然不是素数。
否则i为素数。
var i,x:integer;
begin
for i:=101to200do
begin
x:=2;
while(x<=trunc(sqrt(i)))and(i mod x<>0)do
begin
x:=x+1;
if x>trunc(sqrt(i))then write(i:6)
end;
end;writeln
end.
将for循环改为while循环可以减少循环次数。
例5_9、输出下面的数字图形:
1
222
33333
4444444
555555555
var row,column,n,d:integer;
begin
writeln('n=');readln(n);
d:=20;
for row:=1to n do
begin
write('':d-row);
for column:=1to2*row-1do write(row);
writeln;
end
end.
例5_10、三人对ABCD的比赛名次预测如下:
A B C D
甲13
乙14
丙32
比赛结果,三人都只说对了一个,问A、B、C、D的实际名次。
var a,b,c,d:shortint;
begin
for a:=1to4do
for b:=1to4do
if a<>b then
for c:=1to4do
if(a<>c)and(b<>c)then
begin
d:=10-a-b-c;
if(ord(a=1)+ord(b=3)=1)and(ord(c=1)+ord(d=4)=1)
and(ord(a=3)+ord(d=2)=1)
then writeln('A=',a,'B=',b,'C=',c,'D=',d)
end;
end.
五、用GOTO语句实现循环
例5_11、两个正整数的最大公约数,可用GOTO实现循环
label a;
var m,n,r:integer;
begin
write('Input m,n=');readln(m,n);
write('The greatest common divide of',m,'and',n,'is')
a:r:=m mod n;m:=n;n:=r;
if r<>0then goto a;
writeln(m);
end.
GOTO语句是无条件转向语句,GOTO语句的使用可能会使程序出现乱线团式的结构,应限制使用。
Pascal语言的发明者沃思说过:“如果一个程序员在Pascal程序中使用goto语句,往往说明他还没有学会用Pascal语言来思考。
”。