freePascal教程

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

PASCAL语言程序设计

在上一册教材中,我们已经初步了解了P ASCAL语言的三种基本结构、程序设计的基本思想和方法。本单元是在上册内容的基础上进一步深入学习P ASCAL语言的数组、子程序、字符串处理等基础知识。随着学习的深入,程序设计的题目类型越来越广泛,难度也越来越大,程序设计者不能“完全”把求解的任务推给计算机,而应对题目作较充分的分析,用较优的算法去求解,因此在计算机上编程解题是一项极好的实践活动,它可以训练观察能力、逻辑思维能力、形式化描述问题能力、规划能力、动手动脑分析问题和解决问题的能力。

第一课循环结构的程序设计

在程序设计中,经常处理一些需要重复执行某些操作的问题,这就需要循环结构程序设计,循环结构是程序设计的三种基本结构之一,循环结构是指当某个条件满足时反复执行某些语句,否则不执行。利用循环结构,使得我们能用少而精的程序编码,来完成大量的重复计算。

在Pascal语言中,实现循环程序设计的主要语句有For语句(计数循环)、While语句(当型循环)、Repeat语句(直到型循环)。上册教材已经介绍了For语句,本节课介绍While语句、Repeat 语句及多重循环结构。

一、W hile语句结构

For循环语句适用于已知次数的循环结构,而在实际的问题中,有时我们并不能确切知道循环要执行多少次,我们判断是否结束循环的依据是某个条件是否满足,比如“当……时就做……”,或者是“一直做到……时为止”,这种循环我们称之为条件循环。在Pascal中条件循环语句有两种,分别是While循环语句和Repeat循环语句。下面分别介绍这两种语句的使用方法。

While语句用于“当满足某一条件时进行循环”的情况,因此它也被称为“当型循环”。While 语句的语法格式如下:

While <布尔表达式> do <循环体语句>;

While循环语句的执行流程如图1-1-1所示。

图1-1-1 While循环语句执行流程

While语句使用说明:

(1)当布尔表达为true则执行循环体,若为false,则根本不进入循环体;

(2)如果一开始布尔表达式的值就为假时,While循环就会一次循环体都不执行;

(3)相反的,如果布尔表达式永远是真的,那么循环就无法结束,从而成为“死循环”,为了避免这种情况的发生,在循环体中就一定要有能改变布尔表达式结果的操作;

(4)循环体中的语句一般情况下是多条语句,必须使用begin和end将它们括起来形成一条复合语句。

[例1] 计算S=1+3+5+……+n(n为大于1的奇数)。

程序如下:

program ex1_1;

var

odds,n,sum:integer;

begin

write(…input a odd data:‟);readln(n);

sum:=0; odds:=1;

while odds<=n do

begin

sum:=sum+odds;

odds:=odds+2;

end;

writeln(sum);

end.

[例2] 输入若干个字符,它的终止符是“?”,计算输入的字符中字母“a”出现的次数(包括大小写)。

程序如下:

program ex1_2;

var

ch:char;

i:integer;

begin

i:=0;

read(ch);

while ch<>‟?‟ do

begin

if (ch=‟a‟) or (ch=‟A‟)

then i:=i+1;

read(ch);

end;

writeln(…i=‟,i)

end.

在执行时,每当输入的字符为“a”或“A”时,则将变量i原有的值加上1再赋给i,相当于使i在原有的基础上加1。当输入一个“?”的时候,循环条件不成立,循环结束,输出结果。在本程序中,输入数据“?”就是循环结束的标志,这种在程序中人为设置循环结束条件的方法我们将它叫作结束标志法,在设计循环结构程序时经常要用到这种方法。

二、R epeat语句结构

Repeat语句与While语句正好相反,Repeat语句用于“重复执行循环体,一直到指定的条件为真时为止”的循环结构,它又被称为“直到型循环”。

Repeat语句的语法格式为:

repeat

循环体语句

until 布尔表达式;

Repeat循环语句的执行流程如图1-2-1所示。

图1-2-1 Repeat循环语句执行流程

Repeat语句使用说明:

1、先执行循环体,然后判断布尔表达式的值,为false,则继续循环,为true则终止循环;

2、为了使repeat循环重复能终止,与while循环一样,循环体中一定要有影响布尔表达式值的操作,否则该循环就是一个死循环;

3、repeat语句的特点是:先执行循环,后判断结束条件,因而至少要执行一次循环体;

4、repeat-until是一个整体,它是一个(构造型)语句,不要误认为repeat是一个语句,until 是另一个语句;

5、repeat循环体可以是若干个语句,不需用begin和end。

另外需要说明的是,由于while循环与repeat语句都属于条件循环语句,因此一般可以将这两种语句互相转换,而具体使用哪条语句时要看实际情况决定。

[例3] 利用泰勒公式求e的值,直到最后一项小于10-7为止。泰勒公式如下:

e=1+1/1!+1/2!+1/3!+……+1/n!

分析:逐步往后递推,直到最后一项小于10-7为止。

程序如下:

program ex1-3;

var

e,p:real;

i:longint;

Begin

e:=1;p:=1;i:=1;

repeat

p:=p/i;

e:=e+p;

i:=i+1

until p<1e-7;

writeln(‘e=’,e);

end.

[例4] 求两个正整数m和n的最大公约数。

分析:求两个正整数的最大公约数采用的辗转相除法求解。以下是辗转的算法:

分别用m,n,r表示被除数、除数、余数。

①求m/n的余数r;

②若r=0,则n为最大公约数,若r≠0,执行第③步;

③将n的值放在m中,将r的值放在n中;

④返回重新执行第①步。

程序如下:

program ex1_4;

相关文档
最新文档