内容发布更新时间 : 2024/11/19 0:38:48星期一 下面是文章的全部内容请认真阅读。
第六课 基本语句(四)
§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.