while 循环语句.ppt

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
循环结构程序设计
安庆四中 丁贤友
while 循环语句
格式:
while 布尔表达式do
循环体;
功能:
(1)计算布尔表达式的值;
(2)若布尔表达式的值为true ,则转(3) ,否则, 转(5) ;
(3)执行循环体;
(4)转(1) ;
(5)循环结束,执行循环体后面的语句。
while 循环语句的执行过程
begin
s:=s+i;
i:=i+1 ;
end ;
begin 和end 括起来的就是while 循环语句的循环体。
while 循环语句的应用
【例4‐8】 输入一串以“ ?”为结束标志的字符,统 计其中字母和数字的个数。
问题分析:
很明显,本题是一个计数问题:重复读入字符,根据字符 的类别,进行统计。但是,输入多少个字符呢? 题目中 没有明确说明,只说明了结束输入的标记。由于这个重复 操作的次数未知,不适于应用for 循环语句了。而解决未 知次数的循环是while 循环语句所擅长的,因此本题应用 while 循环语句来解决。
read(ch) ; //继续读入字符
end ;
writeln('The numberof letters is :',zm) ;
writeln('The numberof figures is :',sz) ;
end .
【例4‐9】 求两个正整数m 和n 的最大公约数。
问题分析: 最大公约数(greatest common divisor ,简写为gcd)
算法描述:
(1)计算被除数m 除以除数n 的余数r ; (2)当r ≠ 0 时,重复下面操作: ①m←n; ②n←r; ③ r ← m mod n ; (3)输出最大公约数n ; (4)结束。
程序设计:
program exam4_9 ;
varm ,n ,r∶ integer ;
begin
write('Please input m ,n :') ;
readln(m ,n) ;
r∶= m mod n ; //r取m 和n的余数
while r< > 0 do //辗转相除
begin
m ∶= n ;
n∶= r ;
r∶= m mod n ;
end ;
writeln('The greatestcommon divisor is :', n) ;
begin
n∶= n+ 1 ; //人数加1
tot∶= tot+ score ; //分数累加
ifm in> score thenm in ∶= score ;//更新最低分
ifmax< score thenmax ∶= score ;//更新最高分
read(score) ;
end ;
If n= 0 then writeln('Not inputatall !')
说明:
(1)在进入循环体之前测试布尔表达式的值,若最初的值为false ,则 根本不进入循环体。
(2)为了使循环能终止,循环体中一定要有影响布尔表达式的操作,否 则该循环将陷入死循环。
(3)循环体只能是一条简单的语句或一条复合语句。
例如:
s:= 0 ;
i:= 1 ;
while (i<= 4) do
算法描述:
(1)计数器初始化:字母个数zm←0 ,数字个数sz←0 ; (2)读入一个字符给ch ; (3)当该字符ch 不是“ ?”时,重复操作:
① 若ch 是字母,则字母个数加1 ∶ zm ← zm + 1 , ② 若ch 是数字,则数字个数加1 ∶ sz ← sz + 1 , ③ 读入一个新字符给ch ;
是指几个数共有的因数之中最大的一个,例如8 和12 的最大公约数是4 ,记作gcd(8 ,12) = 4 。 辗转相除法的算法思想是:对于给定的两个正整数,用较 大的数除以较小的数,若余数不为零,则将余数和较小的 数构成一对新数,继续进行上面的除法,直到大数被小数 除尽,这时较小的数就是原来两个数的最大公约数。
writeln(' themax score is',max∶ 0 ∶ 2) ;
end ;
end .
while 循环语句与for 循环语句应用的互换
(4)输出统计结果zm 和sz ; (5)结束。
program exam4_8 ;
var ch∶ char ;
zm ,sz∶ integer ;
begin
zm ∶= 0 ;
sz∶= 0 ;
read(ch) ; //在循环外读入第一个字符,使while的条件能正 常判断
while ch< > '? 'do
begin
if ((ch> = 'a') and (ch< = 'z')) or ((ch> = 'A')
and (ch< = 'Z')) then
zm ∶= zm + 1 //输入的是字母
else if (ch> = '0') and (ch< = '9')入的是数字
end .
【例4‐10】 设计问题4‐3 的程序。
program exam4_10 ; var n∶ integer ; score ,tot ,min ,max∶ real; begin writeln('Please input the scores ,and end the inputby
print - 1 !') ; n∶= 0 ; //初始化人数 tot∶= 0 ;//初始化分数,先存放总分,最后除以人数,即得平均分 min∶= maxint ;//初始化最低分 max∶= - 1 ; //初始化最高分 read(score) ;
while score< > - 1 do //当输入非- 1 时,重复统计
else
begin
writeln('The numberof studentswho take the exam is ',n) ;
writeln('The average score is',tot/n∶ 0 ∶ 2) ;//由总分生成
平均分
writeln('Among them ,') ;
writeln(' themin score is ',m in ∶ 0 ∶ 2) ;
相关文档
最新文档