1、Pascal语言,第5课,【回顾】,在Pascal中,实现循环程序设计的语句有三种:For语句:规定循环次数的循环形式;While语句:满足条件时执行循环的形式;Repeat语句:反复执行直到满足条件停止的循环形式。在Pascal中,实现循环结构的For语句的一般形式为: For := To Do For语句还有另外的一种形式: For := Downto Do ,输入10个学生成绩,分别统计出成绩在85-100分,60-85分和60分以下的各分数段的人数并输出。,If then else ;For 循环变量=初值 to 终值 do,参考格式,【复习题】,参考,【While语句循环结构 】,W
2、hile语句的一般形式是: While Do ,程序的执行过程为:,(1)检查布尔表达式的值,如果它为真,则执行循环体 ; (2)执行完循环体之后,再次检查布尔表达式的值,如果仍为真,继续执行循环体,否则结束循环; (3)执行While语句后面的语句。,注意:While循环体中一定要有能改变布尔变量值的语句,否则循环将不能结束,而形成死循环。,看下列程序的功能:,Program Exam12; Var a: byte; BeginWhile a:=200 doBEGIN Writeln (a);A:=a+1; END;Readln,例:输入一串字符,以“?”结束,统计输出其中的字母个数和数字个
3、数。,分析:首先读如第一个字符,如果不是“?”,执行循环。在循环中,判断它是否是字母,若是将x的值加1,否则判断判断它是否是数字,若是将y的值加1,然后读入下一个字符,如果不是“?”,继续执行循环,直到输入“?”时结束循环,输出结果。,算法:1、将存放字母和数字个数的变量x和y置零;2、读入第一个字符;3、while ch? do Begin 4、 If (ch=a)and(ch=0)and(ch=9) 字符形式 7、 Then y:=y+1;end;8、输出x 和y。,例:输入一串字符,以“?”结束,统计输出其中的字母个数和数字个数。,Program c1(input,output);Var
4、 ch:char;x,y:integer;Begin x:=0; 将字母个数清0 y:=0; 将数字个数清0 read(ch);while ch? do beginIf (ch=a)and(ch=0)and(ch=9) Then y:=y+1;read(ch);end; writeln(x=,x,y=,y );End.,参考程序:,【Repeat语句循环结构 】,Repeat语句的一般形式是: Repeat Until ,程序的执行过程为:,(1) 执行循环体; (2) 检查Until后的布尔表达式的值,直到布尔表达式为真时结束循环 ; (3) 执行Repeat语句后面的语句。,【while和
5、Repeat的主要区别】,a、Repeat语句是在执行完循环体后才检查布尔表达式的值,所以循环至少执行一次;而while语句是在执行循环体以前检查布尔表达式的值,有可能一次循环也不执行(布尔表达式开始就为假)。 b、Repeat语句在布尔表达式为真时结束循环,而while语句在表达式为真时执行循环。,例:计算 直到最后一项的绝对值小于10-7时停止计算,其中x由键盘输入。,分析:这是一个级数求和的问题,其项数决定于最后一项的绝对值的大小是否小于10-7,如果它大于10-7,继续求下一项,并累加到和上,否则结束求和。 设自变量为x,和为sum,每一项为t,都说明为实型。另外定义一个常量w表示误差
6、10-7,可以用来控制精确度。,例:计算 直到最后一项的绝对值小于10-7时停止计算,其中x由键盘输入。,算法: 1、读入x的值; 2、置sum和t的初值为x; 3、Repeat语句 4、计算下一项t; 5、将下一项加到sum上; 6、Until t的绝对值小于w,结束Repeat循环; 7、输出和sum。,其中第4步需要进一步精确,我们可以通过每一项的前一项的值来计算这一项。我们让多项式的每一项与一个变量n相对应,其中n的值依次为1,3,5,7,9,从多项式的前一项 算后一项 ,只需要将前一个式子乘上一个因子 即可。 例如根据 计算 ,需要做以下运算: 。,例:计算 直到最后一项的绝对值小于
7、10-7时停止计算,其中x由键盘输入。,Program example16(input,output);Constw=1e-7;Var x,sum,t:real;n:integer;Begin read(x);writeln(x=,x);n:=1;t:=x;sum:=x;Repeat n:=n+2;t:=t*(-x*x)/(n-1)/n;sum:=sum+t;Until abs(t)w ;结束Repeatwriteln(sin(x)=,sum);End.,【多重循环 】,如果一个循环结构内部(循环体)又包含一个循环结构,就称之为多重循环结构。 任意循环语句的循环体部分都可以包含另一个循环结构语
8、句,多重循环的嵌套次数是任意的,按照嵌套层次数,分别叫做二重循环、三重循环等。 处于内部的叫内循环,处于外部的叫外循环。,例:求100-999中的水仙花数(若三位数abc,abc=a3+b3+c3,则程abc为水仙花数,如:13+53+33=1+125+27=153,则153是水仙花数)。,Program example17a(input,output);Var m,a,b,c:integer;Begin For m:=100 to 999 do 每个数都验证一遍Begina:=m div 100; 计算百位上的数b:= (m mod 100) div 10; 计算十位上的数c:=m mod
9、10; 计算个位上的数if a*a*a+b*b*b+c*c*c=mthen write(m:6);End;ForEnd.,参考程序1:,例:求100-999中的水仙花数(若三位数abc,abc=a3+b3+c3,则程abc为水仙花数,如:13+53+33=1+125+27=153,则153是水仙花数)。,Program example17b(input,output);Var a,b,c:integer;Begin For a:=1 to 9 do 百位上的数For b:=0 to 9 do 十位上的数For c:=0 to 9 do 个位上的数 if a*a*a+b*b*b+c*c*c=a*
10、100+b*10+cthen write(a*100+b*10+c):6);End.,参考程序2:,在上面的两种算法当中,后一种算法效率更高。第一种算法运行的循环次数为999-100+1=900次,每次运行4条语句,总共运行3600条语句;而第二种算法运行的循环次数为9*10*10=900次,每次运行1条语句,共运行900条语句。,For m:=100 to 999 doBegina:=m div 100;b:= (m mod 100) div 10;c:=c mod 10; if a*a*a+b*b*b+c*c*c=mthen write(m:6);End;,For a:=1 to 9 do
11、 百位上的数 For b:=0 to 9 do 十位上的数 For c:=0 to 9 do 个位上的数 if a*a*a+b*b*b+c*c*c=a*100+b*10+cthen write(a*100+b*10+c:6);,练习1:编写能够打印输出如下图形的程序。 # # # # # 练习2:用5元钱买100只纽扣,其中金属纽扣每只5角有机玻璃纽扣每只1角,小摁扣1分钱买3个,编程求出各种纽扣各买多少只?,练习,Program Fuxi(input,output);Var i,a,b,c :integer;x,:real;Begin a:=0;b:=0; c:=0;For i:=1 to 10 dobeginread(x);if (x=0) and (x=85) then a:=a+1else if (x=60) then b:=b+1else c:=c+1;end;Write(a,b,c);End.,用键盘输入30个学生成绩,分别统计出成绩在85-100分,60-85分和60分以下的各分数段的人数。,返回,