while 循环语句

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

If n= 0 then writeln('Not inputatall !')
else
begin

writeln('The numberof studentswho take the exam is ',n) ;

writeln('The average score is',tot/n∶ 0 ∶ 2) ;//由总分生成

i∶= i+ 1 ;

if n mod i= 0 then writeln('No') //由于整除而退出,说明n不是质数

else writeln('Yes') ; //一直没有整除,说明n是质数

end ;
end .
例:输入若干个字符,它的终止符是“#”, 计算输入的字符中字母’a’出现的次数(包 括大小写)。
(3)结束。
program exam4_12 ;
Var n ,i∶ integer ;
begin
readln(n) ;
if n= 2 then //单独处理2
writeln(’Yes')
else

begin
//下面判断大于2 的数是否质数

i∶= 2 ;

while (n mod i< > 0) and (i< = sqrt(n)) do
很明显,本题是一个计数问题:重复读入字符,根据字符 的类别,进行统计。但是,输入多少个字符呢? 题目中 没有明确说明,只说明了结束输入的标记。由于这个重复 操作的次数未知,不适于应用for 循环语句了。而解决未 知次数的循环是while 循环语句所擅长的,因此本题应用 while 循环语句来解决。
循环结构程序设计
安庆四中 丁贤友
while 循环语句
格式:

while 布尔表达式do

循环体;
功能:
(1)计算布尔表达式的值;
(2)若布尔表达式的值为true ,则转(3) ,否则, 转(5) ;
(3)执行循环体;
(4)转(1) ;
(5)循环结束,执行循环体后面的语句。

begin

n∶= n+ 1 ; //人数加1

tot∶= tot+ score ; //分数累加

ifm in> score thenm in ∶= score ;//更新最低分

ifmax< score thenmax ∶= score ;//更新最高分

read(score) ;

end ;
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) ;
while 循环语句的执行过程
说明:
(1)在进入循环体之前测试布尔表达式的值,若最初的值为false ,则 根本不进入循环体。
(2)为了使循环能终止,循环体中一定要有影响布尔表达式的操作,否 则该循环将陷入死循环。
(3)循环体只能是一条简单的语句或一条复合语句。
例如:

s:= 0 ;
(4)输出统计结果zm 和sz ; (5)结束。
program exam4_8 ;
var ch∶ char ;
zm ,sz∶ integer ;
begin
zm ∶= 0 ;
sz∶= 0 ;
read(ch) ; //在循环外读入第一个字符,使while的条件能正 常判断

sz∶= sz+ 1 ; //输入的是数字

read(ch) ; //继续读入字符

end ;
writeln('The numberof letters is :',zm) ;
writeln('The numberof figures is :',sz) ;
end .
【例4‐9】 求两个正整数m 和n 的最大公约数。
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') then
① 输出i , ②i←i+1;
(3)结束。
程序设计:
program exam4_11 ;
var i∶ integer ;
begin

i∶= 1 ;
//对应for循环的初值

while (i< = 10) do //对应于for循环的终值

begin

writeln(i) ; //对应于for循环的循环体
print - 1 !') ; n∶= 0 ; //初始化人数 tot∶= 0 ;//初始化分数,先存放总分,最后除以人数,即得平均分 min∶= maxint ;//初始化最低分 max∶= - 1 ; //初始化最高分 read(score) ;
while score< > - 1 do //当输入非- 1 时,重复统计

i:= 1 ;

while (i<= 4) do

begin
ห้องสมุดไป่ตู้
s:=s+i;

i:=i+1 ;

end ;
begin 和end 括起来的就是while 循环语句的循环体。
while 循环语句的应用
【例4‐8】 输入一串以“ ?”为结束标志的字符,统 计其中字母和数字的个数。
问题分析:
时,n 一定是一个质数。
算法描述: (1)读入n ; (2)如果n= 2 ,直接输出Yes ,否则
① 设定因数的初始值i ← 2 , ② 当i ≤ sqrt(n)且n mod i ≠ 0 时,重复操作:i
← i +1, ③ 若n mod i = 0 ,则输出No ,否则输出Yes ;
问题分析: 最大公约数(greatest common divisor ,简写为gcd)
是指几个数共有的因数之中最大的一个,例如8 和12 的最大公约数是4 ,记作gcd(8 ,12) = 4 。 辗转相除法的算法思想是:对于给定的两个正整数,用较 大的数除以较小的数,若余数不为零,则将余数和较小的 数构成一对新数,继续进行上面的除法,直到大数被小数 除尽,这时较小的数就是原来两个数的最大公约数。
例:求输入的一个整数的各位数字 之和
例:求两个自然数m,n的最小公倍 数。
(6)超市收银是一个很有趣的流程:扫描顾客购买的每一种商品的条形 码,屏幕会显示该商品的价格,全部扫描结束,按确认键,屏幕上将显示 顾客应付的总金额。现在,请你编写一个程序模拟这个收银过程。我们假 定输入0,表示扫描结束。

i∶= i+ 1 ; //while语句中所必须的改变布尔表达式值的操作

end ;
end .
【例4‐12】用while 循环语句判断一 个整数n(n>1)是否为质数。
问题分析:
在例4‐4 中已经用for 循环语句解决了判断n 是否质数的问题。当时我 们用2 至n -1作为因数,重复了n-1 次操作。
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
算法描述:
(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 ;
假定商品条形码与价格的对应关系如表所示:
输入:
以空格分隔的条形码编号,以0 结束。
输出:
结账金额(保留2 位小数) 。
算法描述:
(1)计数器初始化:字母个数zm←0 ,数字个数sz←0 ; (2)读入一个字符给ch ; (3)当该字符ch 不是“ ?”时,重复操作:
① 若ch 是字母,则字母个数加1 ∶ zm ← zm + 1 , ② 若ch 是数字,则数字个数加1 ∶ sz ← sz + 1 , ③ 读入一个新字符给ch ;
但是这个循环次数只对质数是必须的,对于非质数,发现第一个因数,就 应该结束循环,因为只要有一个1 和n 之外的因数,就足以证明n 不是 质数,不必再做判断了。于是,判断i 是否是n 的因数的操作只在下面两 个条件同时成立时进行就足够了:
(1)没出现整除; (2)i 小于等于sqrt(n) 。 一旦不满足条件(1) ,退出循环,n 不是质数;而不满足条件(2 )
平均分

writeln('Among them ,') ;

writeln(' themin score is ',m in ∶ 0 ∶ 2) ;

writeln(' themax score is',max∶ 0 ∶ 2) ;
end ;
end .
while 循环语句与for 循环语句应用的互换
【例4‐11】 将下面用for 循环语句编写的程序 改写成等效的应用while 循环语句的程序。
var i∶ integer ;
begin
for i∶= 1 to 10 do

writeln(i) ;
end .
算法描述:
(1)初始化i ← 1 ;
(2)当i ≤ 10 时,重复操作;
相关文档
最新文档