第一范文网 - 专业文章范例文档资料分享平台

广东省汕头市金山中学高中信息技术奥林匹克信息学系列教程(基础篇)pascal教程06 

来源:用户分享 时间:2025/12/4 17:54:55 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

广东省汕头市金山中学高中信息技术奥林匹克信息学系列教程(基础篇)pascal教程06

基本语句(四)

§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

33 / 7

广东省汕头市金山中学高中信息技术奥林匹克信息学系列教程(基础篇)pascal教程06 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 <条件>;

34 / 7

广东省汕头市金山中学高中信息技术奥林匹克信息学系列教程(基础篇)pascal教程06 流程图表示: 语句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. program s602; 【例】用试商法判断质数(素数)。 var x,i: integer; 问题描述:输入一个大于1的整数N, f : boolean; begin 若为质数,输出‘T’,否则输出‘F’。 readln(x); 判断质数的方法:根据质数的定义,只 f:=true; 要2到N-1都不能整除N,就可判定N i:=2; 为质数,这 repeat 种方法被称为“试商法”。 if x mod i=0 then f:=false; i:=i+1; (1)f是什么类型的变量: until (i>sqrt(x)) or (f=false); if f=true then writeln(‘T’) else writeln(‘F’); 35 / 7 end. 广东省汕头市金山中学高中信息技术奥林匹克信息学系列教程(基础篇)pascal教程06 _______________

(2) x mod i=0 表示_____________

(3)若输入 10 ,则repeat循环体执 行了_________次。

(4) 其实我们没必要从2检测到n-1, 只需测到_______________即可。

【例】数学学习机。

刚上小学的欣欣吵着要买“数学学习机”,聪明的你发现用计算机编程,就可以自己做出个“学习机”来,又省钱又锻炼了编程,一举两得! 随机给出一个100以内整数加法的式子,让欣欣去输入结果,如果对了,就输出“Very Good!”,错了则输出“Error,try again.”,然后再等待输入,直到结果正确为止。

program s603; var x,y,z: integer; begin randomize; x:=random(100); y:=random(100); write(x ,’+’ , y , ’=’ ); repeat readln(z); if x+y=z then writeln(’Very Good!’) else writeln(’Error, try again.’); until (x+y=z); end. §6.3 重复语句小结 1.FOR语句的循环次数必须事先知道,其递增或递减的步长不能改变,都是所属类型的一个单位(如控制变量是整型,步长为1);而REPEAT和WHILE语句则依赖于循环体。

2.FOR和WHILE语句是先判断后执行,故循环体语句可能一次也不执行;而REPEAT是先执行后判断,故循环体语句至少执行一次。

3.循环体语句多于一条语句时,FOR和 WHILE语句必须用begin和end括起来,成为一条复合语句;而REPEAT语句则无需加begin和end。

对于上面的例子,求 sum?1?12+25=? 111??... 中的循环部分,采用这三种语句所设计的程序23n36 / 7

广东省汕头市金山中学高中信息技术奥林匹克信息学系列教程(基础篇)pascal教程06 段如下

k := 1;

while k <= n do begin sum := sum + 1 / k ; k := k + 1 ; end;

k := 1; repeat

sum := sum + 1 / k; k := k+1; until k>n;

for k :=1 to n do sum := sum + 1 / k ;

由上述三种重复语句对同一问题的描述不难看出,当循环次数为已知时,通常采用for语句。而当循环次数为未知时,且循环至少被执行一次时,一般采用repeat语句,若循环体由于问题本身决定有可能一次也不被执行时,则采用while语句。

课后练习六:

1、阅读下面程序,写出程序的运行结果。

program ex209; 若输入 Hello!I am Tom.# var c : char; 输出:

s : integer;

begin read(c); s:=0; while c<>‘ # ’ do begin if (c>=‘A’) and (c<=’Z’) then s:=s+1;

read(c); end; writeln(s); end. 2、阅读下面程序,写出程序运行结

果。

program ex211; (1)输入: 9 var s,x : longint; 输出:

begin

readln(s); (2)输入:123456789 repeat 输出: x:=s mod 10; write(x); s:=s div 10; until s=0; end.

3、阅读资料,回答问题。

下面介绍求两个数的最大公约数的一种算法——辗转相除法。 如果 x可以被 y 整除(即 x mod y=0),则 y 为 x 和y 的最大公约数; 否则,设 z为x除以y的余数( z:=x mod y),再设 x:=y; y:=z;

37 / 7

广东省汕头市金山中学高中信息技术奥林匹克信息学系列教程(基础篇)pascal教程06 .doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c3ieje3914a3bj0w6iip07zlrl1bk8m012xc_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top