循环结构

文档属性

名称 循环结构
格式 rar
文件大小 172.3KB
资源类型 教案
版本资源 通用版
科目 信息技术(信息科技)
更新时间 2010-10-18 08:09:00

文档简介

(共24张PPT)
Pascal程序的调试
F9 编译
Ctrl+F9 运行
Alt+F5 查看结果
PROGRAM ex43(input,output);
VAR x, A, B, C, D : real ; i : integer ;
BEGIN
A:=0 ; B:=1 ; C:=0 ;
FOR i:=1 TO 10 DO
BEGIN
read(x) ;
A:=A+x ;
B:=B*x ;
C:=C+sqr(x)
END ;
D:=sqr(A) ;
writeln(‘A=’, A:5:0 , ‘ B=’ , B:5:0 , ‘ C=’ , C:5:0 , ‘ D=’ , D:5:0 )
END.
PROGRAM ex44(input,output);
VAR fac : real ; i , n : integer ;
BEGIN
fac:=1 ;
read(n) ;
FOR i:=2 TO n DO
fac:=fac*n ;
writeln(n , ‘!=’, fac:10:3 )
END.
程序4.5 求菲波拉契数a0,a1,a2,…,a20
a0=0
a1=1
a2=a0+a1
a3=a1+a2

an=an-2+an-1
PROGRAM fibo (input,output) ;
VAR a0 , a1 , a2 , i : integer ;
BEGIN
a0:=0 ; a1:=1 ;
write( a0:5 , a1:5 );
FOR i :=2 TO 20 DO
BEGIN
a2:=a0+a1;
write( a2 : 5 ) ;
IF i MOD 5 = 4 THEN writeln ;
a0:=a1 ; a1:=a2
END;
END.
程序4.6 输入10个学生成绩,分别统计成绩
在85~100分,60~85分和60分以下的分数
段中的人数。
PROGRAM count(input,output) ;
VAR n1 , n2 , n3 , i : integer ; x : real ;
BEGIN
n1:=0; n2:=0; n3:=0;
FOR i :=1 TO 10 DO
BEGIN
read( x ) ;
IF x >=85 THEN n1:=n1+1
ELSE IF x >=60 THEN n2:=n2+1
ELSE n3:=n3+1
END ;
writeln( ‘ 85-100: ’ , n1 , ‘ 60-85: ’ , n2 , ‘ 0-60: ’ , n3)
END.
习题4.7 输入20个数,统计其中的正、负和零的个数
IF x > 0
THEN n1:=n1+1
ELSE IF x < 0
THEN n2:=n2+1
ELSE n3:=n3+1
程序4.7 输入10个数,求出其中的最大值、最小值。
PROGRAM maxmin(input,output) ;
VAR x , max , min : real ; i : integer ;
BEGIN
read(x) ; max:=x ; min:=x ;
FOR i :=2 TO 10 DO
BEGIN
read(x) ;
IF x>max THEN max:=x
ELSE IF xEND;
writeln( ‘ max= ’ , max:5:0 , ‘ min= ’ , min:5:0 )
END.
作业:P87
4.6
4.7
4.8
4.10
4.12
4.13 max,min,ave
习题4.6 利用下列公式计算并输出π的值
PROGRAM ex46(input,output) ;
VAR n : integer ; s : real ;
BEGIN
s:=0 ;
FOR i :=1 TO 10000 DO
s:=s+1/(4*n-3)-1/(4*n-1) ;
writeln(‘pi=’, 4*s)
END.
4 3 5 7 4n-3 4n-1
π 1 1 1 1 1
— = 1- — + — - — + —— - ——
习题4.8 在1-500中,找出能同时满足用3
除余2,用5除余3,用7除余2的所有整数
(选自《孙子算经》)
PROGRAM ex48(input,output) ;
VAR i : integer ;
BEGIN
FOR i :=1 TO 500 DO
IF (i MOD 3=2) AND (i MOD 5=3) AND (i MOD 7=2)
THEN write(i:5) ;
writeln
END.
习题4.10 求100-999中水仙花数(若三位数abc,a3+b3+c3=abc,则称abc为水仙花数。
PROGRAM ex410(input,output) ;
VAR i , a , b , c : integer ;
BEGIN
FOR i :=100 TO 999 DO
BEGIN
a:=i DIV 100 ; b:=i DIV 10 MOD 10 ;
c:=i MOD 10 ;
IF a*a*a+b*b*b+c*c*c=i THEN write( i : 5 )
END;
writeln
END.
打印九九乘法表
VAR i , j : integer ;
BEGIN
writeln ;
FOR i :=1 TO 9 DO
BEGIN
FOR j :=1 TO i DO
write( i, ‘*’, j, ‘=’, i*j , ‘’:3) ;
writeln
END ;
END.
用*号打印出如下图案
****** ******
******
****** ******
VAR i , j : integer ;
BEGIN
writeln ;
FOR i :=1 TO 5 DO
BEGIN
FOR j :=1 TO 6 DO
write( ‘*’ ) ;
writeln
END ;
END.
用*号打印出如下图案
****** ******
******
****** ******
VAR i , j : integer ;
BEGIN
writeln ;
FOR i :=1 TO 5 DO
BEGIN
FOR j :=1 TO 6 DO
write( ‘*’ ) ;
writeln
END ;
END.
用*号打印出如下图案
 ****** ****** ****** ****** ******
VAR i , j : integer ;
BEGIN
writeln ;
FOR i :=1 TO 5 DO
BEGIN
write( ‘’: 5-i ) ;
FOR j :=1 TO 6 DO
write( ‘*’ ) ;
writeln
END ;
END.
用*号打印出如下图案
****** ****** ****** ****** ******
VAR i , j : integer ;
BEGIN
writeln ;
FOR i :=1 TO 5 DO
BEGIN
write( ‘’: i-1 ) ;
FOR j :=1 TO 6 DO
write( ‘*’ ) ;
writeln
END ;
END.
用*号打印出如下图案
* ** *** **** *****
VAR i , j : integer ;
BEGIN
writeln ;
FOR i :=1 TO 5 DO
BEGIN
FOR j :=1 TO i DO
write( ‘*’ ) ;
writeln
END ;
END.
用*号打印出如下图案
* *** ***** ******* *********
VAR i , j : integer ;
BEGIN
writeln ;
FOR i :=1 TO 5 DO
BEGIN
FOR j :=1 TO 2*i-1 DO
write( ‘*’ ) ;
writeln
END ;
END.
用*号打印出如下图案
* ** *** **** *****
VAR i , j : integer ;
BEGIN
writeln ;
FOR i :=1 TO 5 DO
BEGIN
write( ‘’: 5-i ) ;
FOR j :=1 TO i DO
write( ‘*’ ) ;
writeln
END ;
END.
用*号打印出如下图案
* *** ***** ******* *********
VAR i , j : integer ;
BEGIN
writeln ;
FOR i :=1 TO 5 DO
BEGIN
write( ‘’: 10-2*i ) ;
FOR j :=1 TO 2*i-1 DO
write( ‘*’ ) ;
writeln
END ;
END.
* *** ***** ******* *********
VAR i , j : integer ;
BEGIN
writeln ;
FOR i :=1 TO 5 DO
BEGIN
write( ‘’: 5-i ) ;
FOR j :=1 TO 2*i-1 DO
write( ‘*’ ) ;
writeln
END ;
END.
  * *** ***** *** *
VAR i , j : integer ;
BEGIN
writeln ;
FOR i :=1 TO 3 DO
BEGIN
write( ‘’: 3-i ) ;
FOR j :=1 TO 2*i-1 DO
write( ‘*’ ) ;
writeln
END ;
FOR i :=2 DOWNTO 1 DO
BEGIN
write( ‘’: 3-i ) ;
FOR j :=1 TO 2*i-1 DO
write( ‘*’ ) ;
writeln
END ;
END.(共26张PPT)
Pascal程序的调试
F9 编译
Ctrl+F9 运行
Alt+F5 查看结果
调试习题4.26 4.27的程序
本次作业:P87
4.6
4.7
4.8
4.10
4.11
4.13 max,min,ave
习题4.6 利用下列公式计算并输出π的值
PROGRAM ex46(input,output) ;
VAR n : integer ; s : real ;
BEGIN
s:=0 ;
FOR i :=1 TO 10000 DO
s:=s+1/(4*n-3)-1/(4*n-1) ;
writeln(‘pi=’, 4*s)
END.
4 3 5 7 4n-3 4n-1
π 1 1 1 1 1
— = 1- — + — - — +… +—— - ——
习题4.7 输入20个数,统计其中的正、负和零的个数。
PROGRAM ex47(input,output) ;
VAR n1 , n2 , n3 , i : integer ; x : real ;
BEGIN
n1:=0; n2:=0; n3:=0;
FOR i :=1 TO 20 DO
BEGIN
read( x ) ;
IF x > 0
THEN n1:=n1+1
ELSE IF x = 0
THEN n2:=n2+1
ELSE n3:=n3+1
END ;
writeln( ‘ x>0 ’ , n1:5 , ‘ x=0 ’ , n2:5 , ‘ x<0 ’ , n3:5)
END.
习题4.8 在1-500中,找出能同时满足用3
除余2,用5除余3,用7除余2的所有整数
(选自《孙子算经》)
PROGRAM ex48(input,output) ;
VAR i : integer ;
BEGIN
FOR i :=1 TO 500 DO
IF (i MOD 3=2) AND (i MOD 5=3) AND (i MOD 7=2)
THEN write(i:5) ;
writeln
END.
习题4.10 求100-999中水仙花数
(若三位数abc,a3+b3+c3=abc,则称abc为水仙花数。
例如13+53+33=1+125+27=153,则称153为水仙花数)。
PROGRAM ex410(input,output) ;
VAR i , a , b , c : integer ;
BEGIN
FOR i :=100 TO 999 DO
BEGIN
a:=i DIV 100 ; b:=i DIV 10 MOD 10 ;
c:=i MOD 10 ;
IF a*a*a+b*b*b+c*c*c=i THEN write( i : 5 )
END;
writeln
END.
习题4.11 求2-1000中的守形数
(若某数的平方,其低位与该数本身相同,则称该数为守形数。
例如25,252=625,625的低位25与原数相同,则称25为守形数。
PROGRAM ex411(input,output) ;
VAR i , j : integer ;
BEGIN
FOR i :=2 TO 1000 DO
BEGIN
j:=i*i ;
IF (j MOD 10=i) OR (j MOD 100=i) OR
(j MOD 1000=i) THEN write( i : 10)
END;
END.
习题4.13 输入20个数,求出它们的最大值、最小值、平均值。
PROGRAM ex413(input,output) ;
VAR x , max , min , ave : real ; i : integer ;
BEGIN
read(x) ; max:=x ; min:=x ; ave:=x ;
FOR i :=2 TO 20 DO
BEGIN
read(x) ;
IF x>max THEN max:=x
ELSE IF xave:=ave + x
END;
writeln( ‘ max= ’ , max:8:2 , ‘ min= ’ , min:8:2 , ‘ave=’ ,ave:8:2 )
END.
WHILE语句(当型循环)
格式:WHILE 〈布尔表达式〉 DO
〈循环体〉
循环体


布尔表达式
例1:编一个程序,求1+2+3+…+100=
PROGRAM while1(input,output) ;
VAR i , sum : integer ;
BEGIN
sum:=0 ; i:=1 ;
WHILE i<=100 DO
BEGIN
sum:=sum+i ;
i:= i+1
END;
writeln( ‘ 1+2+3+…+100= ’, sum)
END.
例2:编一个程序,求1× 2 × 3 × … ×10=
PROGRAM while2(input,output) ;
VAR i : integer ; mul :real ;
BEGIN
mul:=1 ; i:=1 ;
WHILE i<=10 DO
BEGIN
mul:=mul*i ;
i:= i+1
END ;
writeln( ‘ 1× 2 × 3 × … ×10= ’, mul:10:0 )
END.
例3:求恰好使s=1+1/2+1/3+…+1/n大于10时n的值
PROGRAM while3(input,output) ;
VAR n : integer ; s : real ;
BEGIN
s:=0.0 ; n:=0 ;
WHILE s<=10 DO
BEGIN
n:=n+1 ;
s:= s+1/n
END;
writeln( ‘ n= ’, n )
END.
例4:求1!+2!+…+10!的值
PROGRAM while4(input,output) ;
VAR n : integer ; s , t : real ;
BEGIN
s:=0 ; t:=1 ; n:=1 ;
WHILE n<=10 DO
BEGIN
t:= t*n ;
s:= s+t ;
n:=n+1
END;
writeln( ‘ 1!+2!+…+10! = ’, s : 10 : 0 )
END.
例4.9:输入一串字符,以‘ ’结束,输出其中字母个数与数字个数。 (书本67)
PROGRAM count(input,output) ;
VAR num1 , num2 : integer ; ch :char ;
BEGIN
num1:=0 ; num2:=0 ;
read(ch) ; write(ch) ;
WHILE ch<>‘ ’ DO
BEGIN
IF (ch>=‘a’) AND (ch<=‘z’)
THEN num1:=num1+1
ELSE IF (ch>=‘0’) AND (ch<=‘9’)
THEN num2:=num2+1;
read(ch) ; write(ch)
END;
writeln( ‘ number of letter: ’, num1) ;
writeln( ‘ number of digit: ’, num2)
END.
例5:求1—100之间所有的素数(素数是大于1,
且除1和它本身外,不能被任何其它整数所整除
的整数)。
PROGRAM sushu(input,output) ;
VAR i , j : integer ;
BEGIN
FOR i:=2 TO 100 DO
BEGIN
j:=2 ;
WHILE (j<=round (sqrt (i))) AND
( i MOD j <> 0 ) DO
j:=j+1 ;
IF j > round(sqrt(i)) THEN write(i:5)
END.
习题4.20:输入两整数,求出它们的最大公约数和最小公倍数。
思路1:
用两数中较小的数作为因子去除两数,若均能除尽,表明它就是最大公约数。否则将它减1以后再去除,直到除尽为止。
最小公倍数可由两数的乘积除以最大公约数得到。
PROGRAM ex420(input,output) ;
VAR m , n , gys , gbs : integer ;
BEGIN
read(m , n) ; writeln( ‘m=’, m , ‘n=’, n ) ;
IF mWHILE (m MOD gys<>0 ) OR (n MOD gys<>0 ) DO
gys:=gys-1 ;
gbs:=m*n DIV gys ;
writeln(‘ gys=’, gys , ‘gbs=’ , gbs)
END.
习题4.20:输入两整数,求出它们的最大公约数和最小公倍数。
思路2:辗转相除法
分别用m, n, r表示被除数、除数、余数
①求m/n的余数r
②若r=0,则n为最大公约数。若r<>0,则执行③
③将n的值放在m中,将r的值放在n中。
④返回重新执行①
PROGRAM ex420(input,output) ;
VAR m , n , r , gys , gbs : integer ;
BEGIN
read(m , n) ; writeln( ‘m=’, m , ‘n=’, n ) ;
gbs:= m*n ;
WHILE n <>0 DO
BEGIN
r:= m MOD n ;
m:=n ; n:=r ;
END ;
gys:=m ; gbs:=gbs DIV gys ;
writeln(‘ gys=’, gys , ‘ gbs=’ , gbs)
END.
本次作业:
4.6 (用WHILE语句)
4.18
4.20
4.28
例4.10:一个较复杂的计算器程序设计。
PROGRAM calculator (input,output) ;
VAR x , y : real ; oper : char ;
BEGIN
read ( x , oper) ; write ( x : 8 : 2 , oper ) ;
WHILE oper < > ‘=’ DO
BEGIN
read( y ) ; write( y:8:2 ) ;
CASE oper OF
‘+’ : x :=x+y ;
‘-’ : x :=x-y ;
‘*’ : x :=x*y ;
‘/’ : x :=x/y
END ;
read (oper) ; write (oper)
END;
writeln( x : 8 : 2 )
END.(共22张PPT)
作业:
4.6 (用WHILE语句)
4.18
4.20
4.28
4.6 利用下列公式计算并输出π的值
PROGRAM ex46(input,output) ;
VAR n : integer ; s : real ;
BEGIN
s:=0 ; n:=1 ;
WHILE n<=10000 DO
BEGIN
s:=s+1/(4*n-3)-1/(4*n-1) ;
n:=n+1
END ;
writeln(‘pi=’, 4*s)
END.
4 3 5 7 4n-3 4n-1
π 1 1 1 1 1
— = 1- — + — - — +… +—— - ——
4.18 输入一串字符,以‘ ’结束。统计其中字母个数,数字个数,其它符号个数。
n1, n2, n3
PROGRAM ex418 (input,output) ;
VAR n1 , n2 , n3 : integer ; ch :char ;
BEGIN
n1:=0 ; n2:=0 ; n3:=0 ;
read(ch) ; write(ch) ;
WHILE ch<>‘ ’ DO
BEGIN
IF (ch>=‘a’) AND (ch<=‘z’) OR (ch>=‘A’) AND (ch<=‘Z’)
THEN n1:=n1+1
ELSE IF (ch>=‘0’) AND (ch<=‘9’)
THEN n2:=n2+1
ELSE n3:=n3+1
read(ch) ; write(ch)
END;
writeln( ‘letter:’, n1);writeln( ‘digit:’, n2);writeln( ‘others:’, n3)
END.
4.20 输入两整数,求出它们的最大公约数和最小公倍数。
PROGRAM ex420(input,output) ;
VAR m , n , r , gys , gbs : integer ;
BEGIN
read(m , n) ; writeln( ‘m=’, m , ‘n=’, n ) ;
gbs:= m*n ;
WHILE n <>0 DO
BEGIN
r:= m MOD n ;
m:=n ; n:=r ;
END ;
gys:=m ; gbs:=gbs DIV gys ;
writeln(‘ gys=’, gys , ‘ gbs=’ , gbs)
END.
4.28 求1—100之间所有的素数(素数是大于1,
且除1和它本身外,不能被任何其它整数所整除
的整数)。
PROGRAM ex428(input,output) ;
VAR i , j , count : integer ;
BEGIN
count:=0 ;
FOR i:=2 TO 100 DO
BEGIN
j:=2 ;
WHILE (j<=round(sqrt (i))) AND (i MOD j<>0) DO
j:=j+1 ;
IF j>round(sqrt(i)) THEN BEGIN
write(i:5) ;
count:=count+1
END
END
END.
PROGRAM ex428(input,output) ;
VAR i , j , count : integer ; flag : boolean ;
BEGIN
count:=0 ;
FOR i:=2 TO 100 DO
BEGIN
flag:=true ;
FOR j:=2 TO round (sqrt (i)) DO
IF i MOD j = 0 THEN flag:=false ;
IF flag THEN BEGIN
write(i:5) ;
count:=count+1 ;
IF count MOD 5=0 THEN writeln
END
END
END.
REPEAT语句(直到型循环)
格式:REPEAT
〈循环体〉
UNTIL 〈布尔表达式〉
循环体


布尔表达式
例1:计算 S =1 + 3 + 5 + … + n
(n为大于1的奇数)
PROGRAM repeat1 (input,output) ;
VAR m , n , s : integer ;
BEGIN
write(‘please input an odd data:’) ; readln(m) ;
s:=0 ; n:=1 ;
REPEAT
s:=s+n ;
n:=n+2
UNTIL n > m ;
writeln( ‘1+3+5+…+’, m , ‘=’ , s )
END.
例2: 计算
直到最后一项的绝对值小于10-7时停止计算,x由键盘输入。
3! 5! 7!
x3 x5 x7
sin(x) = x - — + — - — + …
PROGRAM repeat2 (input,output) ;
VAR x , term , sum : real ; n : integer ;
BEGIN
read(x) ; writeln(‘x=’, x) ;
n:=1 ; term:=x ; sum:=x ;
REPEAT
n:=n+2 ;
term:=term*(-x*x)/n/(n-1) ;
sum:=sum+term ;
UNTIL abs(term)< 1e-7 ;
writeln(‘sin(x)=’, sum:8:4)
END.
例3:利用泰勒公式求e的值,直到最后一项小于10-7为止。泰勒公式如下:
e= 1 + 1/1! + 1/2! + 1/3! + … + 1/n!
PROGRAM repeat3 (input,output) ;
VAR e , m : real ; n : integer ;
BEGIN
e:=1 ; m:=1 ; n:=1 ;
REPEAT
m:=m/n ;
e:=e+m ;
n:=n+1
UNTIL n < 1e-7 ;
writeln(‘e=’, e)
END.
例4.17 验证歌德巴赫猜想:任一充分大的偶数,可以用两个素数之和表示。例如
4=2+2
6=3+3
8=3+5
98=19+79
PROGRAM godbah(input,output) ;
VAR n , p , q , j : integer ; flagp , flagq : boolean ;
BEGIN
read(n) ; p:=1 ;
REPEAT
p:=p+1 ;
q:=n-p ;
flagp:=true ;
FOR j:=2 TO round (sqrt (p)) DO
IF i MOD j = 0 THEN flagp:=false ;
flagq:=true ;
FOR j:=2 TO round (sqrt (q)) DO
IF i MOD j = 0 THEN flagq:=false ;
UNTIL flagp AND flagq ;
writeln( n , ‘=’ , p , ‘+’ , q )
END.
本次作业:
4.21 (用REPEAT语句)
4.22
4.29
4.33
4.30 求2—100中,每个数的质因子,输入如下形式:
2=2
3=3
4=2*2

100=2*2*5*5
PROGRAM ex430(input,output) ;
VAR i , x , y , n : integer ;
BEGIN
FOR i:= 2 TO 100 DO
BEGIN
write( i:3 , ‘=’ ) ; x:=i ; y:=2 ; n:=1;
REPEAT
IF x MOD y=0
THEN BEGIN
x:=x DIV y ;
IF n<>1 THEN write(‘*’) ;
write( y:2 ) ; n:=2
END
ELSE y:=y+1
UNTIL x=1 ;
writeln
END
END.
4.33 要将一张100元的大钞票,换成等值的10元、5元、2元、1元一张的小钞票。要求每次换成40张小钞票,每种至少一张。编程输出所有可能的换法,程序应适当考虑减少重复次数。
(i、j、k、l分别表示10元、5元、2元、1元的张数)(共34张PPT)
Pascal程序的调试
F9 编译
Ctrl+F9 运行
Alt+F5 查看结果
打印九九乘法表
VAR i , j : integer ;
BEGIN
writeln ;
FOR i :=1 TO 9 DO
BEGIN
FOR j :=1 TO i DO
write( i, ‘*’, j, ‘=’, i*j:2, ‘’:2) ;
writeln
END ;
END.
用*号打印出如下图案
****** ******
******
****** ******
VAR i , j : integer ;
BEGIN
writeln ;
FOR i :=1 TO 5 DO
BEGIN
FOR j :=1 TO 6 DO
write( ‘*’ ) ;
writeln
END ;
END.
用*号打印出如下图案
 ****** ****** ****** ****** ******
VAR i , j : integer ;
BEGIN
writeln ;
FOR i :=1 TO 5 DO
BEGIN
write( ‘’: 5-i ) ;
FOR j :=1 TO 6 DO
write( ‘*’ ) ;
writeln
END ;
END.
用*号打印出如下图案
****** ****** ****** ****** ******
VAR i , j : integer ;
BEGIN
writeln ;
FOR i :=1 TO 5 DO
BEGIN
write( ‘’: i-1 ) ;
FOR j :=1 TO 6 DO
write( ‘*’ ) ;
writeln
END ;
END.
用*号打印出如下图案
* ** *** **** *****
VAR i , j : integer ;
BEGIN
writeln ;
FOR i :=1 TO 5 DO
BEGIN
FOR j :=1 TO i DO
write( ‘*’ ) ;
writeln
END ;
END.
用*号打印出如下图案
* *** ***** ******* *********
VAR i , j : integer ;
BEGIN
writeln ;
FOR i :=1 TO 5 DO
BEGIN
FOR j :=1 TO 2*i-1 DO
write( ‘*’ ) ;
writeln
END ;
END.
用*号打印出如下图案
* ** *** **** *****
VAR i , j : integer ;
BEGIN
writeln ;
FOR i :=1 TO 5 DO
BEGIN
write( ‘’: 5-i ) ;
FOR j :=1 TO i DO
write( ‘*’ ) ;
writeln
END ;
END.
用*号打印出如下图案
* *** ***** ******* *********
VAR i , j : integer ;
BEGIN
writeln ;
FOR i :=1 TO 5 DO
BEGIN
write( ‘’: 10-2*i ) ;
FOR j :=1 TO 2*i-1 DO
write( ‘*’ ) ;
writeln
END ;
END.
* *** ***** ******* *********
VAR i , j : integer ;
BEGIN
writeln ;
FOR i :=1 TO 5 DO
BEGIN
write( ‘’: 5-i ) ;
FOR j :=1 TO 2*i-1 DO
write( ‘*’ ) ;
writeln
END ;
END.
  * *** ***** *** *
VAR i , j : integer ;
BEGIN
writeln ;
FOR i :=1 TO 3 DO
BEGIN
write( ‘’: 3-i ) ;
FOR j :=1 TO 2*i-1 DO
write( ‘*’ ) ;
writeln
END ;
FOR i :=2 DOWNTO 1 DO
BEGIN
write( ‘’: 3-i ) ;
FOR j :=1 TO 2*i-1 DO
write( ‘*’ ) ;
writeln
END ;
END.
程序4.5 求菲波拉契数a0,a1,a2,…,a20
a0=0
a1=1
a2=a0+a1
a3=a1+a2

an=an-2+an-1
PROGRAM fibo (input,output) ;
VAR a0 , a1 , a2 , i : integer ;
BEGIN
a0:=0 ; a1:=1 ;
write( a0:5 , a1:5 );
FOR i :=2 TO 20 DO
BEGIN
a2:=a0+a1;
write( a2 : 5 ) ;
IF i MOD 5 = 4 THEN writeln ;
a0:=a1 ; a1:=a2
END;
END.
习题4.12 求数列a0,a1,a2,…,a20。已知
a0=0, a1=1, a2=1
a3 = a0 + 2a1 + a2
a4 = a1 + 2a2 + a3

PROGRAM ex412(input,output) ;
VAR a0 , a1 , a2 , a3 , i : integer ;
BEGIN
a0:=0 ; a1:=1 ; a2:=1 ;
write( a0:10 , a1:10 , a2:10);
FOR i :=3 TO 20 DO
BEGIN
a3:=a0+2*a1+a2;
write( a3:10 ) ;
IF i MOD 5 = 4 THEN writeln ; (每行显示5个数)
a0:=a1 ; a1:=a2 ; a2:=a3
END;
END.
习题4.26 输出下列图形
a
a b
a b c
……
a b c … x y z
PROGRAM ex426 (input,output) ;
VAR i , j : char ; k : integer ;
BEGIN
writeln ; k:=1 ;
FOR i :=‘a’ TO ‘z’ DO
BEGIN
write( ‘’: 26-k) ;
FOR j :=‘a’ TO i DO
write( j:2 ) ;
writeln ; k:=k+1
END ;
END.
习题4.27 打印数字金字塔
1
1 2 1
2 3 2 1
……
1 2 3 … 8 9 8 … 3 2 1
PROGRAM ex427 (input,output) ;
VAR i , j : integer ;
BEGIN
writeln ;
FOR i :=1 TO 9 DO
BEGIN
write( ‘’: 18-2*i ) ;
FOR j :=1 TO i DO
write( j:2 ) ;
FOR j:=i-1 DOWNTO 1 DO
write( j:2 ) ;
writeln ;
END ;
END.
程序4.6 输入10个学生成绩,分别统计成绩
在85~100分,60~85分和60分以下的分数
段中的人数。
PROGRAM count(input,output) ;
VAR n1 , n2 , n3 , i : integer ; x : real ;
BEGIN
n1:=0; n2:=0; n3:=0;
FOR i :=1 TO 10 DO
BEGIN
read( x ) ;
IF x >=85 THEN n1:=n1+1
ELSE IF x >=60 THEN n2:=n2+1
ELSE n3:=n3+1
END ;
writeln( ‘ 85-100: ’ , n1 , ‘ 60-85: ’ , n2 , ‘ 0-60: ’ , n3)
END.
习题4.7 输入20个数,统计其中的正、负和零的个数
IF x > 0
THEN n1:=n1+1
ELSE IF x < 0
THEN n2:=n2+1
ELSE n3:=n3+1
程序4.7 输入10个数,求出其中的最大值、最小值。
PROGRAM maxmin(input,output) ;
VAR x , max , min : real ; i : integer ;
BEGIN
read(x) ; max:=x ; min:=x ;
FOR i :=2 TO 10 DO
BEGIN
read(x) ;
IF x>max THEN max:=x
ELSE IF xEND;
writeln( ‘ max= ’ , max:5:0 , ‘ min= ’ , min:5:0 )
END.
调试习题4.26 4.27的程序
本次作业:P87
4.6
4.7
4.8
4.10
4.11
4.13 max,min,ave
习题4.6 利用下列公式计算并输出π的值
PROGRAM ex46(input,output) ;
VAR n : integer ; s : real ;
BEGIN
s:=0 ;
FOR i :=1 TO 10000 DO
s:=s+1/(4*n-3)-1/(4*n-1) ;
writeln(‘pi=’, 4*s)
END.
4 3 5 7 4n-3 4n-1
π 1 1 1 1 1
— = 1- — + — - — +… +—— - ——
习题4.8 在1-500中,找出能同时满足用3
除余2,用5除余3,用7除余2的所有整数
(选自《孙子算经》)
PROGRAM ex48(input,output) ;
VAR i : integer ;
BEGIN
FOR i :=1 TO 500 DO
IF (i MOD 3=2) AND (i MOD 5=3) AND (i MOD 7=2)
THEN write(i:5) ;
writeln
END.
习题4.10 求100-999中水仙花数
(若三位数abc,a3+b3+c3=abc,则称abc为水仙花数。
例如13+53+33=1+125+27=153,则称153为水仙花数)。
PROGRAM ex410(input,output) ;
VAR i , a , b , c : integer ;
BEGIN
FOR i :=100 TO 999 DO
BEGIN
a:=i DIV 100 ; b:=i DIV 10 MOD 10 ;
c:=i MOD 10 ;
IF a*a*a+b*b*b+c*c*c=i THEN write( i : 5 )
END;
writeln
END.
习题4.11 求2-1000中的守形数
(若某数的平方,其低位与该数本身相同,则称该数为守形数。
例如25,252=625,625的低位25与原数相同,则称25为守形数。
PROGRAM ex411(input,output) ;
VAR i , j : integer ;
BEGIN
FOR i :=2 TO 1000 DO
BEGIN
j:=i*i ;
IF (j MOD 10=i) OR (j MOD 100=i) OR
(j MOD 1000=i) THEN write( i : 10)
END;
END.
程序4.8 画y=sinx图形。
PROGRAM graph (input,output) ;
CONST pi=3.14159 ;
VAR i , wide : integer ; y : real ;
BEGIN
FOR i :=0 TO 24 DO
BEGIN
y:=sin(i*15*pi/180) ;
wide:=round(35*y+40) ;
writeln( ‘*’: wide )
END
END.
程序4.8 画y=cosx图形。
PROGRAM graph (input,output) ;
CONST pi=3.14159 ;
VAR i , wide : integer ; y : real ;
BEGIN
FOR i :=0 TO 24 DO
BEGIN
y:=cos(i*15*pi/180) ;
wide:=round(35*y+40) ;
writeln( ‘*’: wide )
END
END.
习题4.15 在同一坐标轴上画出sin(x)与
cos(x)的图形。
PROGRAM ex415 (input , output) ;
CONST pi=3.14159 ;
VAR i , wide1 , wide2 : integer ; y , z :real ;
BEGIN
FOR i=0 TO 24 DO
BEGIN
y:=sin(i*15*pi/180) ; z:=cos(i*15*pi/180) ;
wide1:=round(y*35+40); wide2:=round(y*35+40) ;
IF wide1> wide2
THEN BEGIN
write(‘*’:wide2) ; write(‘.’:wide1-wide2)
END
ELSE BEGIN
write(‘.’:wide1) ; write(‘.’:wide2-wide1)
END ;
writeln
END ;
END.(共21张PPT)
Pascal软件的安装
1、将C:\bak\Pascal7.0\tp7.exe 解压到 D:\
2、进入D:\ TP7 \ BIN,将 TURBO.EXE 发送到桌面快捷方式
3、双击桌面的快捷方式
PROGRAM ex35(input,output);
VAR ch1 , ch2 , ch3 , t : char ;
BEGIN
write(‘please input ch1,ch2,ch3= ’); readln(ch1,ch2,ch3);
IF ch1>ch2 THEN BEGIN
t:=ch1; ch1:=ch2; ch2:=t
END;
IF ch1>ch3 THEN BEGIN
t:=ch1; ch1:=ch3; ch3:=t
END;
IF ch2>ch3 THEN BEGIN
t:=ch2; ch2:=ch3; ch3:=t
END;
writeln(ch1,ch2,ch3)
END.
PROGRAM ex35(input,output);
VAR ch1 , ch2 , ch3 : char ;
BEGIN
readln(ch1,ch2,ch3);
IF (ch1>ch2) AND (ch1>ch3)
THEN IF ch2>ch3 THEN writeln(ch3,ch2,ch1)
ELSE writeln(ch2,ch3,ch1) ;
IF (ch2>ch1) AND (ch2>ch3)
THEN IF ch1>ch3 THEN writeln(ch3,ch1,ch2)
ELSE writeln(ch1,ch3,ch2) ;
IF (ch3>ch1) AND (ch3>ch2)
THEN IF ch1>ch2 THEN writeln(ch2,ch1,ch3)
ELSE writeln(ch1,ch2,ch3)
END.
PROGRAM ex35(input,output);
VAR ch1 , ch2 , ch3 : char ;
BEGIN
readln(ch1,ch2,ch3);
IF ch1>ch2
THEN IF ch3>ch1
THEN writeln(ch2,ch1,ch3)
ELSE IF ch3>ch2
THEN writeln(ch2,ch3,ch1)
ELSE writeln(ch3,ch2,ch1)
ELSE IF ch3>ch2
THEN writeln(ch1,ch2,ch3)
ELSE IF ch3>ch1
THEN writeln(ch1,ch3,ch2)
ELSE writeln(ch3,ch1,ch2) ;
END.
PROGRAM ex37(input,output);
VAR x , y , z : real ;
BEGIN
readln(x , y) ;
IF x>0
THEN IF y>0
THEN z:=ln(x)+ln(y)
ELSE z:=sin(x+y)/cos(x+y)
ELSE IF y>0
THEN z:=sin(x)+sin(y)
ELSE z:=exp(2*x)+exp(3*x) ;
writeln(‘z=’ , z:6:2)
END.
PROGRAM ex38(input,output);
VAR x , y , z : real ; s : integer ;
BEGIN
readln(x , y , s) ;
CASE s OF
1 : z:=ln(x)+ln(y) ;
2 : z:=sin(x)+cos(x) ;
3 : z:=exp(2*x)+exp(3*x) ;
4 : z:=sin(x+y)/cos(x+y)
END ;
writeln(‘z=’ , z:6:2)
END.
PROGRAM ex39(input,output);
VAR class , num : integer ;
BEGIN
write (‘please input class’) ;
readln( class ) ;
CASE class OF
91, 93, 94 : num:=30;
92, 95 : num:=32;
96 : num:=25
END ;
writeln(‘num=’ , num)
END.
第四章 循环结构程序设计
FOR语句(计数循环)
形式
FOR〈循环变量〉:=〈初值〉TO〈终值〉DO
〈循环体〉
FOR〈循环变量〉:=〈初值〉DOWNTO〈终值〉DO
〈循环体〉
循环体


循环变量 := 初值
循环变量:=succ(循环变量)
循环变量<=终值
FOR〈循环变量〉:=〈初值〉TO〈终值〉DO
〈循环体〉
例1:输出1~20的自然数
PROGRAM for1(input,output) ;
VAR i : integer ;
BEGIN
FOR i :=1 TO 20 DO
write( i :5 )
END.
例1:输出1~20的自然数 (每行显示5个)
PROGRAM for1(input,output) ;
VAR i : integer ;
BEGIN
FOR i :=1 TO 20 DO
BEGIN
write( i :5 ) ;
IF i MOD 5 = 0 THEN writeln
END
END.
思考:
1、输出20 ~ 1的自然数
2、输出1 ~ 100的偶数(每行显示10个)
PROGRAM for2(input,output) ;
VAR i : integer ;
BEGIN
writeln;
FOR i :=1 TO 50 DO
BEGIN
write( 2*i ) ;
IF (2*i) MOD 20 = 0 THEN writeln
END
END.
例2:输出1 ~ 100的偶数(每行显示10个)
例3:编一个程序,求从1至100的自然数的和
PROGRAM for3(input,output) ;
VAR i , sum : integer ;
BEGIN
sum:=0 ;
FOR i :=1 TO 100 DO
sum:=sum+i ;
writeln( ‘ 1+2+3+…+100= ’, sum)
END.
例4:编一个程序,求从1至10的自然数的积
PROGRAM for4(input,output) ;
VAR i : integer ; mul :real ;
BEGIN
mul:=1 ;
FOR i :=1 TO 10 DO
mul:=mul*i ;
writeln( ‘ 1× 2 × 3 × … ×10= ’, mul:10:0 )
END.
程序4.3 计算n!
PROGRAM for4(input,output) ;
VAR i , n : integer ; mul :real ;
BEGIN
read(n) ;
mul:=1 ;
FOR i :=1 TO n DO
mul:=mul*i ;
writeln( ‘1× 2 × 3 × … ×n= ’, mul:10:0 )
END.
读下列程序
s:=0 ;
for i :=1 to 5 do
s:=s+2 ;
write(s)
s:=0 ;
for i :=1 to 5 do
s:=s+i ;
write(s)
s:=0 ;
for i :=1 to 5 do
s:=s+2*i ;
write(s)
s:=0 ;
for i :=1 to 5 do
s:=s+2*i-1 ;
write(s)
例5:按正序和反序输出字母表
PROGRAM for5(input,output) ;
VAR ch : char ;
BEGIN
FOR ch :=‘a’ TO ‘z’ DO
write( ch :2 ) ;
writeln;
FOR ch :=‘z’ DOWNTO ‘a’ DO
write( ch :2 ) ;
writeln
END.
例6:读入10个数,计算它们的和、积、平均值
PROGRAM for6(input,output) ;
VAR i : integer ; x , sum , mul , ave : real ;
BEGIN
sum:=0 ; mul:=1 ;
FOR i :=1 TO 10 DO
BEGIN
read(x) ;write(x);
IF i MOD 5=0 THEN writeln;
sum:=sum+x ; mul:=mul*x
END;
ave:=sum/10;
writeln( ‘ sum= ’, sum , ‘ mul= ’, mul , ‘ ave= ’, ave )
END.
作业:P87
4.3
4.4
同课章节目录