标签:for语句 while语句 repeat语句 多重循环 pascal入门
步长型循环(For语句)
for 语句用来描述已知重复次数的循环结构。
for 语句有两种形式:
(1) for 循环变量:=初值 to 终值 do 语句;
(2) for 循环变量:=初值 downto 终值 do 语句;
例:计算1+2+3+……+99+100的和
program jia; var
i,n,sum:integer;
begin
sum:=0;
for i:=1 to 100 do
begin
sum:=sum+i;
end;
writeln(sum);
readln
end.
For 语句
第一种形式的for 语句是递增循环。首先将初值赋给控制变量,接着判断控制变量的值是否小于或等于终值,若是,则执行循环体,在执行了循环体之后,自动将控制变量的值变为它的后继值,并重新判断是否小于或等于终值。当控制变量的值大于终值时,退出for循环,执行for语句之后的语句。
第二种形式的for 语句是递减循环。首先将初值赋给控制变量,接着判断控制变量的值是否大于或等于终值,若是,则执行循环体,在执行了循环体之后,自动将控制变量的值该为它的前趋值,并重新判断是否大于或等于终值。当控制变量的值小于终值时,退出for循环,执行for语句之后的语句。
说明
①循环控制变量必须是顺序类型。例如,可以是整型、字符型等,但不能为实型。
②循环控制变量的值递增或递减的规律是:选用to则为递增;选用downto则递减。
③循环体可以是一个基本语句,也可以是一个复合语句。
④循环控制变量的初值和终值一经确定,循环次数就确定了。但是在循环体内对循环变量的值进行修改,常常会使得循环提前结束或进入死环。建议不要在循环体中随意修改控制变量的值。
不允许在循环体内再对循环控制变量赋值。
a:=10;
b:=50;
for k:=a to b do
begin
k:=k+1;{这一句是错误的!!!!!}
writeln (k);
end;
例题1
输入整数n,输出1——n之间的偶数和
思路:
1、枚举1到n之间的每个整数,
2、判断该整数是否为偶数
3、如果为偶数,则累加起来
program ex3_1;
var
n,i,sum:integer;
begin
sum:=0;
readln(n);
for i:=1 to n do
begin
if then
sum:=sum+i;
end;
writeln(sum);
end.
练习1
1、输入N,求N!(N!=1*2*3*…*N) ,这里N不大于10,输出N!的值
2、编程计算并输出1+1/2+1/3+……+1/100的和
3、编程计算12+22+32+……+1002
例题2
一个两位数x,将它的个位数字与十位数字对调后得到一个新数y,此时y恰好比x大36,请编程求出所有这样的两位数。
思路:
1、枚举所有的两位数x,从10到99
2、对该两位数进行数位分离,
ge:=x mod 10
shi:=x div 10
3、组成一个新数nx
y:=ge*10+shi
4、将新数与原数进行比较
y-x=36
5、如果条件成立,则输出
program ex3_2;
var
x,y,ge,shi:integer;
begin
for x:=10 to 99 do
begin
ge:= ;
shi:= ;
y:=ge*10+shi;
if then
writeln(x);
end;
end.
练习2
1、编程输出1000以内(包括1000)所有既能被3整数又能被5整数的自然数
2、在自然数中,如果一个三位数等于自身各位数字之立方和,则这个三位数就称为是水仙花数。如: 153=1^3+5^3+3^3,所以153是一个水仙花数。求所有的水仙花数
例题3
输入10个数,打印出最大的数
思路:
1、设定变量max,将其赋值为最小值
2、循环读入10个数,每读入一个数x,都将其跟max变量比较
3、如果x>max,则将x赋值给max
4、比较完所有数后,max所存储的则是最大的数,将其输出。
program ex3_3;
var
max,x,i:integer;
begin
max:=-32768;
for i:=1 to 10 do
begin
read(x);
if x>max then
;
end;
writeln(max);
end.
练习3
1、编写一个评分程序,接受用户输入10个选手的得分(0-10分),然后去掉一个最高分和一个最低分,求出某选手的最后得分(平均分)。
例题4
编程输入一个自然数x(x<=10000),求这个自然数的所有约数(包括1和x本身)的个数。
思路:
1、对于输入整数x,判断其约数的方法为:枚举1至x之间的所有整数i(思考:是不是一定要从1枚举到x)
2、如果x能被i整数,则累计其个数
program exam4;
var
x,sum,i:integer;
begin
sum:=0;
readln(x);
for i:=1 to x do
begin
if x mod i=0 then
sum:=sum+1;
end;
writeln(sum);
end.
练习4
输入一个整数,判读其是否为素数,如果是则输出‘YES’,不是则输出‘NO’(不含引号)
思路:
1、素数亦称质数,是指只能被1和它本身整除的自然数。
2、对于输入整数x,判断其是否为素数的方法为:枚举2——x-1的所有自然数i,将x整除i,如果可以整除,则x不是素数。如果对于所有的i,x都不能整除,则x是素数。
program ex3_4;
var
x,i:integer;
f:boolean;
begin
f:=true;
readln(x);
for i:=2 to x-1 do
begin
if x mod i=0 then
f:=false;
end;
if f=true then writeln(‘YES‘)
else writeln(‘NO‘);
end.
练习5
1、求2-1000中的守形数(若某数的平方,其低位与该数相等,则称守形数。如:25的平方等于625,625的低位与25相同,故25是守形数。)
2、求菲波拉契数列第n项的值(n不大于30)。菲波拉契数列是这样的数列: a0=0, a1=1, a2=a1+a0, a3=a2+a1,……,ai=ai-1+ai-2; 如0,1,1,2,3,5,8,13,21,……。要求输出n,输出an的值
当(while)语句
当语句的语法格式是:
while 布尔表达式 do
begin
语句序列;(循环体)
end;
其作用是,当布尔表达式的值为 TRUE时,才会运行语句序列(循环体),否则循环将不会被执行,即从循环头部就退出,而转向执行 END后的语句。
while语句的执行过程为:
这里while和do为保留字,while语句的特点是先判断,后执行。 当布尔表达式成立时,重复执行do后面的语句(循环体)。 while语句用于“当满足某一条件时进行循环”的情况,也就是说while循环是是属于当型循环。为了能使while重复能终止,循环体中一定要有影响布尔表达式的操作,否则该循就是一个死循环。
例题1
求恰好使s=1+1/2+1/3+…+1/n的值大于10时n的值
思路:
1、能不能用for循环解决问题
2、循环的终止条件:n>10
3、如果n<=10,则不断累加
var
n:integer;
s:real;
begin
n:=0;
s:=0;
while s<=10 do
begin
n:=n+1;
s:=s+1/n;
end;
writeln(n);
end.
例题2
求两个正整数m和n的最大公约数
思路1:枚举出1至m、n之间的数i,将如果m、n能同时整除i且i最大,则i为m、n的最大公约数
var
m,n,i,min,gcd:integer;
begin
readln(n,m);
if n>m then min:=m else min:=n;
for i:=1 to min do
begin
if (m mod i=0) and (n mod i=0) then
gcd:=i;
end;
writeln(gcd);
end.
思路2:利用辗转相除法求最大公约数
var
m,n,r:integer;
begin
readln(n,m);
r:=n mod m;
while r<>0 do
begin
n:=m;
m:=r;
r:=n mod m;
end;
writeln(m);
end.
例题3
输入一个自然数M,请分离出它各位上的数字,并按个位、十位、百位……顺序输出。
输入样例:
79823
输出样例:
3 2 8 9 7
思路:
1、分离出个位,输出
2、原数去掉个位
3、循环1、2步,直到原数为0
var
n,g:integer;
begin
readln(n);
while n<>0 do
begin
g:=n mod 10;
write(g,‘ ‘);
n:=n div 10;
end;
end.
练习
1、编程求出满足下列式子的n的最大值:22+42+62+…+n2<1500
2、小球从100高处自由落下,着地后又弹回高度的一半再落下。求第20次着地时, 小球共通过多少路程?
3、输入任意的自然数a、b,求a、b的最小公倍数
4、输入一个数,如果该数是7的倍数或者含有7的数字,则输出‘yes’,否则输出‘no’
repeat-until语句(直到循环)
repeat 语句用于“重复执行循环体,一直到指定的条件为真时为止”。语法格式为:
repeat
语句1;
……
语句n;
until 布尔表达式;
其中Repeat、until是Pascal保留字,repeat与until之间的所有语句称为循环体。
注意
①repeat语句的特点是:先执行循环,后判断结束条件,因而至少要执行一次循环体。
②repeat-until是一个整体,它是一个(构造型)语句,不要误认为repeat是一个语句,until是另一个语句。, repeat 和until已经起了begin和end的作用,不需用begin和end把它们包起来。
③repeat语句在布尔表达式的值为真时不再执行循环体,且循环体可以是若干个语句。while循环和repeat循环是可以相互转化的。
求sum=1+2+3+......+n 的和
program he;
var
n,i,sum:integer;
begin
readln(n);
sum:=0;
i:=1;
repeat
sum:=sum+i;
i:=i+1;
until i>n;
writeln (sum);
end.
例题1
求1992个1992的乘积的末两位数是多少?
var
a,t : integer;
Begin
a := 1;
t := 0;
repeat
t := t+1;
a := (a*92) mod 100;
until t=1992;
writeln(a);
End.
练习
1、用repeat语句求两个数的最大公约数
2、找出被2、3、5除时余数为1的最小十个数
3、将一根长为369cm的钢管截成长为69cm和39cm两种规格的短料。在这两种规格的短料至少各截一根的前提下,如何截才能余料最少。
多重循环结构
当一个循环的循环体中又包含循环结构程序时,我们就称之为循环嵌套。
例题1
求1!+2!+…+10!的值
program ex4_5;
var
t,s:real;
i,j,n:integer;
begin
s:=0;
for n:=1 to 10 do
begin
t:=1;
for j:=1 to n do t:=t*j;
s:=s+t;
end;
writeln(‘s=’,s:0:0);
end.
program ex4_5;
var
t,s:real;
i,j,n:integer;
begin
s:=0;
t:=1;
for n:=1 to 10 do
begin
t:=t*n;
s:=s+t;
end;
writeln(‘s=’,s:0:0);
end.
例题2
一个炊事员上街采购,用500 元钱买了90 只鸡, 其中母鸡一只15 元,公鸡一只10 元,小鸡一只5元,正好把钱买完。问母鸡、公鸡、小鸡各买多少只?
programr ex4_6;
var
i,j,k:integer;
begin
for i:=1 to 33 do
for j:=1 to 50 do
for k:=1 to 100 do
if 15*i+10*j+5*k=500 then
writeln(i:5,j:5,k:5);
end.
programr ex4_6;
var
i,j,k:integer;
begin
for i:=1 to 33 do
for j:=1 to 50 do
begin
k:=90-i-j;
if 15*i+10*j+5*k=500 then
writeln(i:5,j:5,k:5);
end;
end.
例题3
求100-200之间的所有素数
programr ex4_7;
var
i,x :integer;
begin
for i:=100 to 200 do
begin
x:=2;
while (x<=trunc(sqrt(i)))and(i mod x<>0)do
begin
x:=x+1;
end;
if x>trunc(sqrt(i)) then write(i:8);
end;
end.
练习
1、求s=11+22+33+..+NN
2、把一张一元钞票换成一分,二分和五分的硬币,每种至少一枚。问有哪几种换法?
3、输出一列图形(数字金字塔)
1
1 1
1 2 1
. .
1 2 3 ……3 2 1
4、编写一程序,验证角谷猜想。所谓的角谷猜想是:“对于任意大于1的自然数n,若n为奇数,则将n变为3*n+1,否则将n变为n的一半。经过若干次这样的变换,一定会使n变为1。”
5、有一堆100多个的零件,若三个三个数,剩二个;若五个五个数,剩三个;若七个七个数,剩五个。请你编一个程序计算出这堆零件至少是多少个?
循环控制语句
continue;
继续下一步循环
break;
退出当前循环
Halt;
Exit;
求素数(标准版)
var
n,i:integer;
f:boolean;
begin
readln(n);
f:=true;
for i:=2 to trunc(sqrt(n)) do
begin
if n mod i=0 then
begin
f:=false;
break;
end;
end;
if f then writeln(‘yes‘) else writeln(‘no‘);
end.
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:for语句 while语句 repeat语句 多重循环 pascal入门
原文地址:http://blog.csdn.net/boyxiejunboy/article/details/46967459