while循环和repeat-until循环

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
while循环和 循环和 repeat-until循环 循环
主讲人:山成虎
1. while循环 循环 2. repeat-until循环 循环 3.多重循环结构 多重循环结构
对于for循环有时也称为计数循环,当循环次数未知, 对于 循环有时也称为计数循环,当循环次数未知,只能根 循环有时也称为计数循环 据某一条件来决定是否进行循环时, 语句或repeat语句实 据某一条件来决定是否进行循环时,用while 语句或 语句实 现循环要更方便。 现循环要更方便。 1. while循环 循环 1.1while语句的形式为: 语句的形式为: 语句的形式为ห้องสมุดไป่ตู้while <布尔表达式 do <语句 ; 布尔表达式> 语句>; 布尔表达式 语句
真(true) ) i>100 假(false) )
下一条语句 循环语句结束) (循环语句结束)
求两个正整数m和 的最大公约数 的最大公约数。 例6 求两个正整数 和n的最大公约数。 程序采用repeat-until循环实现。 循环实现。 程序采用 循环实现 program xy; var m,n,r : integer; begin readln(m,n); repeat r : =m mod n; m: =n; n: =r; until r=0; writeln(m); end. 为什么用while语句结果是 语句结果是 为什么用 n, repeat –until语句结果是 语句结果是m? 语句结果是 //辗转相除法 辗转相除法
2.2 说明 语句的特点是: (1)repeat语句的特点是:先执行循环,后判断结束条件,因而至 ) 语句的特点是 先执行循环,后判断结束条件, 少要执行一次循环体。 少要执行一次循环体。 是一个整体, (2)repeat-until是一个整体,它是一个(构造型)语句,不要误 ) 是一个整体 它是一个(构造型)语句, 认为repeat是一个语句, until是另一个语句。 是一个语句, 是另一个语句。 认为 是一个语句 是另一个语句 语句在布尔表达式的值为真时不再执行循环体, (3)repeat语句在布尔表达式的值为真时不再执行循环体,且循环 ) 语句在布尔表达式的值为真时不再执行循环体 把它们包起来, 体可以是若干个语句,不需用begin和end把它们包起来, repeat 和 和 把它们包起来 体可以是若干个语句,不需用 until已经起了 已经起了begin和end的作用。while循环和 的作用。 循环和repeat循环是可以相 已经起了 和 的作用 循环和 循环是可以相 互转化的。 互转化的。 之间的语句构成循环。 (4)在repeat和until之间的语句构成循环。在它们之间可以有任意 ) 和 之间的语句构成循环 多个语句,这一点和for, 循环不同, , 循环体在语 多个语句,这一点和 ,while循环不同, for,while循环体在语 循环不同 法上只允许一条语句。要想循环多条语句必须用复合语句。 法上只允许一条语句。要想循环多条语句必须用复合语句。
1.3 举例 例 1: 求s=1+2+…+99+100. : program xy; var i,sum:interger; begin i:=1; : ; sum:=0; while i<=100 do begin sum:=sum+i; i:=i+1; end; writeln(sum); end. 假(0) ) i<=100 真(非0) ) sum:=sum+i i:=i+1;
2.4举例 举例 例 5: 求s=1+2+…+99+100. : program xy; var i,sum:interger; begin i:=1; : ; sum:=0; repeat sum:=sum+i; i:=i+1; until i>100; writeln(sum); end. sum:=sum+i i:=i+1;
其意义为:当布尔表达式的值为true时,执行do后面的语句。 其意义为:当布尔表达式的值为true时 执行do后面的语句。 true do后面的语句
1.2 while语句的执行过程为: 语句的执行过程为: 语句的执行过程为 判断布尔表达式的值,如果其值为真 执行步骤2,否则执行步骤 如果其值为真,执行步骤 否则执行步骤4; ①判断布尔表达式的值 如果其值为真 执行步骤 否则执行步骤 执行循环体语句(do后面的语句 后面的语句); ②执行循环体语句 后面的语句 返回步骤1; ③返回步骤 结束循环,执行 执行while的下一个语句。 的下一个语句。 ④结束循环 执行 的下一个语句 说明:这里 为保留字, 语句的特点是先判断 说明:这里while和do为保留字,while语句的特点是先判断,后执 和 为保留字 语句的特点是先判断, 当布尔表达式成立时,重复执行do后面的语句 循环体)。 后面的语句(循环体 行。当布尔表达式成立时,重复执行 后面的语句 循环体 。
2. repeat-until循环 循环 语句可以实现"当型循环 语句可以实现"直 用while语句可以实现 当型循环 ,用repeat-until 语句可以实现 直 语句可以实现 当型循环", 到型循环"。 语句的含义是: 重复执行循环 重复执行循环, 到型循环 。repeat-until语句的含义是:"重复执行循环,直到指定 语句的含义是 的条件为真时为止"。 的条件为真时为止 。 2.1 repeat-until语句一般格式 语句一般格式 repeat <语句 语句1>; 语句 : <语句 语句n>; 语句 until <布尔表达式 布尔表达式>; 布尔表达式 其中repeat、until是Pascal保留字,repeat与until之间的所有语句称 、 保留字, 其中 是 保留字 与 之间的所有语句称 为循环体。 为循环体。
校体操队到操场集合,排成每行 排成每行2人 最后多出 最后多出1人 排成每行 排成每行3人 也多出 也多出1人 分 例7 校体操队到操场集合 排成每行 人,最后多出 人;排成每行 人,也多出 人;分 别按每行排4,5,6人,都多出 人;当排成每行 人时 正好不多。求校体操队至少是多 都多出1人 当排成每行 人时,正好不多 当排成每行7人时 正好不多。 别按每行排 人 都多出 少人? 少人 分析】 设校体操队为X人 根据题意 应是7的倍数 因此X的初值为 根据题意X应是 的倍数,因此 的初值为7,以后用 【分析】①设校体操队为 人,根据题意 应是 的倍数 因此 的初值为 以后用 inc(x,7)改变 值;②为了控制循环 用逻辑变量 为真 改变X值 为了控制循环, 用逻辑变量yes为真 为真(True) 使循环结束; 使循环结束; 改变 如果诸条件中有一个不满足, 的值就会为假(false),就继续循环。 ③如果诸条件中有一个不满足 yes 的值就会为假 ,就继续循环。 program xy; var x: integer; yes : boolean; begin x:=0; repeat yes :=true; inc(x,7); if x mod 2 < > 1 then yes:=false; if x mod 3 < > 1 then yes:=false; if x mod 4 < > 1 then yes:=false; if x mod 5 < > 1 then yes:=false; if x mod 6 < > 1 then yes:=false; until yes; //直到 的值为真 直到yes的值为真 直到 writeln('All =', x) ; readln end.
r 2 0
利用格里高公式求π。 例4:利用格里高公式求 。π/4=1-1/3+1/5-1/7+…,直到最后一项的 利用格里高公式求 , 值小于10-6为止。 为止。 值小于 为止 分析】解本题的关键就是求右边数值序列的和, 【分析】解本题的关键就是求右边数值序列的和,序列有明显的特 分母是从1开始的奇数 开始的奇数, 减号轮流出现,因此, 点:分母是从 开始的奇数,加、减号轮流出现,因此,我们可以 表示序列数值的变化, 来设置它们知项的符号位。 用n=n+2表示序列数值的变化,用f=-f来设置它们知项的符号位。 表示序列数值的变化 来设置它们知项的符号位
program xy; var n,f : integer; t,pai : real; begin pai : =0; t : =1; n : =1;f : =1; while abs(t)>=1e-6 do begin pai : =pai+t;n : =n+2;f : =-f; t : =f/n; end; pai : =pai*4; writeln(pai : 10 : 8); end. 运行程序会发现没有结果,为什么? 运行程序会发现没有结果,为什么?因 为布尔表达式abs(t)>=1e-6,即1/n>=1e为布尔表达式 , 6,而程序的说明部分 是整型数,它的 是整型数, ,而程序的说明部分n是整型数 范围是-32768~32767,条件永远成立, 范围是 ~ ,条件永远成立, 所以形成死循环 从而没有运行结果。 死循环, 所以形成死循环,从而没有运行结果。 while循环不需要用顺序型数据来控制循 循环不需要用顺序型数据来控制循 环的次数,改程序的说明部分中的n为 环的次数,改程序的说明部分中的 为 实型数或说明为长整型即可, 实型数或说明为长整型即可,请同学们 自己修正,以后要对变量的取值范围引 自己修正,以后要对变量的取值范围引 起重视。 起重视。
求两个正整数m和 的最大公约数 的最大公约数。 例3:求两个正整数 和n的最大公约数。 求两个正整数
分析:求两个正整数的最大公约数采用的辗转相除法求解。以下是辗转的算法: 分析:求两个正整数的最大公约数采用的辗转相除法求解。以下是辗转的算法: 辗转相除法求解 分别用m,n,r表示被除数、除数、余数 一般 表示被除数、 一般m>n)。 分别用 表示被除数 除数、余数(一般 。 的余数r. ①求m/n的余数 的余数 为最大公约数.若 执行第③ ②若r=0,则n为最大公约数 若r≠0,执行第③步. 则 为最大公约数 执行第 的值放在m中 将 的值放在 的值放在n中 ③将n的值放在 中,将r的值放在 中. 的值放在 返回重新执行第① ④返回重新执行第①步。 program xy; 求两个正整数m和n的最小公 倍数, 求两个正整数m和n的最小公 倍数, var m,n,a,b,r:integer; 可以用m*n div (m和n的 最大公约 可以用 和 的 begin 例如: 和 的最小公倍数 a 的最小公倍数, 数).例如 readln(m,n); 例如:6和4的最小公倍数,可以 b 用 a:=m;b:=n;r:=a mod b; while r<>0 do div 2=12 . 6*4 6 4 begin a:=b;b:=r; 2 4 r:=a mod b; end; writeln(b:8); end.
下一条语句 循环语句结束) (循环语句结束)
求恰好使s=1+1/2+1/3+…+1/n的值大于 时n的值。 的值大于10时 的值 的值。 例2 :求恰好使 求恰好使 的值大于
分析: 恰好使 的值大于10"意思是当表达式 的前 项的和小于或等于 , 恰好使s的值大于 意思是当表达式s的前 项的和小于或等于10, 分析:"恰好使 的值大于 意思是当表达式 的前n-1项的和小于或等于 而加上了第n项后 的值大于10。从数学角度,我们很难计算这个n的值 项后s的值大于 的值。 而加上了第 项后 的值大于 。从数学角度,我们很难计算这个 的值。故从 第一项开始, 的值小于或等于 的值小于或等于10时 就继续将下一项值累加起来。 的值 第一项开始,当s的值小于或等于 时,就继续将下一项值累加起来。当s的值 超过10时 最后一项的项数即为要求的n。 超过 时,最后一项的项数即为要求的 。 program xy; var s : real; n : integer;{n表示项数} 表示项数} { 表示项数 begin s:=0.0;n:=0; while s<=10 do{当s的值还未超过 时} 的值还未超过10时 { 的值还未超过 begin n:=n+1;{项数加 } {项数加1} s:=s+1/n;{将下一项值累加到 } {将下一项值累加到s} end; writlen(n);{输出结果} {输出结果} end.
2.3repeat-until语句的执行过程 语句的执行过程 (1)遇到 遇到repeat语句后,即进入循环体,顺序执行循环体内的语句。 语句后, 遇到 语句后 即进入循环体,顺序执行循环体内的语句。 (2)遇到 遇到until语句后,求布尔表达式的值。若值为假,则返回步 语句后, 遇到 语句后 求布尔表达式的值。若值为假, 执行步骤3 骤1;若为“真”,执行步骤 ;若为“ (3)循环结束,执行until后面的下一条语句。 循环结束,执行 后面的下一条语句。 循环结束 后面的下一条语句
相关文档
最新文档