广东省汕头市金山中学高中信息技术 pascal教程06 第六 下载本文

内容发布更新时间 : 2024/12/27 17:10:49星期一 下面是文章的全部内容请认真阅读。

第六课 基本语句(四)

§6.1 while语句

其一般形式:

WHILE <布尔表达式> DO <语句>; 流程图表示:

false 条件 N-S图表示:

条件 循环体 true 循环体 下一条语句

WHILE语句主要用于循环次数未知而又需要循环的情况,它把循环和条件判断结合在一起。执行while语句时,先检查布尔表达式的值,当为真时,重复执行DO后面的语句,直到条件为假时才终止。若表达式的值从一开始为假,则DO后面的语句一次也不执行。 【例】试运行下面程序。

var i : longint; begin i:=1; while i<50 do begin writeln ( i ); i:=i+3; end; end. 这个程序将输出50以内的一个等差数列: 1 4 7 10 13 16 19 ……

DO后面的语句(即循环体),应有修改WHILE后面的条件操作,否则会死循环。 例如,上述程序中,如果少了 i:=i+3; 这句,i永远都是1,程序将无限地运行下去。 不小心出现死循环怎么办? 按Ctrl+Break强制中断程序运行。

【例】输入一串字符,以‘?’结束,输出其中小写字母个数与数字个数。

分析:输入字符包括字母(‘A’,‘B’,……,‘Z’,‘a’,‘b’,……,‘z’),数字(‘0’,

‘1’,‘2’,……,‘9’)和其它字符(‘+’,‘-’,‘$’,……),我们只统计其中的小写字母的个数和数字的个数。输入的字符用字符变量ch来存放,用num1,num2分别表示字母个数和数字个数。 一级算法: 1. 将小写字母个数和数字个数清0 2. 读入字符ch

3. while ch<>’?’ do begin

3.1 判断ch是小写字母或数字,并将相应个数加1

3.2 读入下一个字符ch

end;

4. 输出小写字母个数与数字个数

二级求精: 3.1 判断ch是小写字母或数字,并将相应个数加1:

if ch是小写字母 (ch>=’a’)and(ch<=’z’) then 小写字母个数加1

else if ch是数字 (ch>=’0’)and(ch<=’9’) then 数字个数加1 程序: program s601;

var ch :char; {ch存放读入的字符}

num1 , num2 :integer; {num1小写字母个数,num2数字个数}

begin

num1 := 0; {将小写字母个数计数器清0} num2 := 0; {将数字个数计数器清0} read(ch); {读入字符到ch} while ch<>’?’ do

begin {循环体内的语句不止一句,所以要用begin和end括起} if (ch>=’a’)and(ch<=’z’)

then num1 := num1 + 1 {注意不能加‘;’} else if (ch>=’0’)and(ch<=’9’) then num2 := num2 + 1; read(ch); {读入下一个字符到ch} end;

writeln(’number of letter :’ , num1); {输出小写字母个

数}

writeln(’number of digit :’ , num2); {输出数字个数} end. 在上面的程序中,有两个读字符ch的语句,这是必要的。如果没有第一个读ch

的语句,在while语句头部的布尔表达式ch<>’?’ 就无法确定ch的值。如果没有第二个读ch的语句(循环体中),就无法读其余字符,循环也无法结束,因为ch将永远是第一次读入的字符。

§6.2 repeat语句

REPEAT语句也是用于循环次数未知而又需要重复执行的情况。REPEAT语句的特点是先重复执行,直到条件满足。其一般形式为:

REPEAT

<语句>; ……

UNTIL <条件>;

流程图表示: 语句1 N-S图表示:

循环体 条件 语句n false 条件 true

当UNTIL后面的条件为假时,重复执行循环体的语句,直到条件为真时,循环结束,然后执行它的下一条语句。其中REPEAT和UNTIL是配对使用,它们有相当于begin和end的作用,故循环体多于一个语句时,不必采用复合语句。

REPEAT语句至少必须执行一次循环体,而且循环体中也要有影响循环结束条件的语句,否则会造成死循环。 【例】求 sum?1?111??... ,其中项数n由键盘输入,n为整数,且n >0。 23n 程序: var n , k :integer;

sum : real; { sum为累加和 }

begin

readln(n);

sum := 0; {累加和sum清0}

k := 1;

repeat

sum := sum + 1 / k; {将1/k累加进sum }

k := k + 1; { k加1 }

until k > n;

writeln (’ Sum is :’ , sum); { 输出sum }

end.