第2章 Object Pascal程序设计语言.ppt_第1页
第2章 Object Pascal程序设计语言.ppt_第2页
第2章 Object Pascal程序设计语言.ppt_第3页
第2章 Object Pascal程序设计语言.ppt_第4页
第2章 Object Pascal程序设计语言.ppt_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第2章 Object Pascal程序设计语言,2.1 控制台程序 2.2 注释 2.3 标识符与关键字 2.4 基本数据类型 2.5 复杂数据类型 2.6 常量与变量 2.7 运算符与表达式 2.8 语句 2.9 过程与函数 2.10 消息框过程和函数,2.1 控制台程序,控制台程序是指一些没有图形用户界面的32位Windows应用程序,通常在控制台窗口中运行,也就是在类似以前的DOS环境下运行。这些程序很少要求用户输入大量的信息,一般只实现有限的特定的功能。如Windows目录下的Ping.exe等。 控制台程序的代码比较小,一般在几十千字节左右,占用的系统资源少。在开发阶段,编译、链接的

2、速度比较快。在学习计算机语言的过程中,可以上机编写一些短小的控制台程序进行练习。所以我们利用它可以方便学习和掌握Object Pascal语言。 控制台程序相关文件少。最少情况下可以只有一个工程文件(.dpr)和一个可执行文件(.exe)。 下面我们通过一个具体的例子进行讲解:,实例讲解,【例2.1】创建一个控制台程序。 1)创建指定目录下新建一个 “控制台” 文件夹。 2)在Delphi集成开发环境中,通过菜单【File】|【New】打开【New Items】对话框,选中【New】标签中的【Console Application】项,如图2-1所示,按下【OK】按钮。系统会自动创建一个控制台

3、程序的工程,并在代码编辑窗口中打开Project1.dpr文件。 3)通过菜单【File】|【Save All】将工程文件保存在创建的目录中。本章后面的例程都可以利用本工程来方便地实现。 4)现在可以编译、链接和运行程序,将顺利生成一个可执行程序,只是该程序不做任何工作就退出了。 5)修改文件Project1.dpr中的程序。,6)编译、链接和运行程序,测试效果。 在程序提示“请输入一行文字:”后,输入“Hello World !”。运行结果界面如图2-2所示。,Read和Write函数 1)Read 功能:read在DOS屏幕下通过键盘读入n个数据,并将这些数据赋值给n个变量。各个数据之间可

4、以通过指定字符,如果没有指定字符用空格字符或用回车符分隔。用法与C语言的scanf函数用法相似。 格式:read(V1, V2, .,Vn ) 说明:V1可以是基本数据类型的变量,也可以是字符常量。 例如: var a,b:integer; read(a,b); /读入2个整型数据,并将这2个整型数据赋值给a、b这两个变量。 在DOS屏幕下输入1 2回车后,a的值是1,b的值是2。,2)write 功能:write在DOS屏幕下输出n个数据,并将这些数据赋值给n个变量。 格式:write(P1,P2, .,Pn) 说明:P1可以是基本数据类型的变量,也可以是字符常量。 例如: var a,b:

5、integer; a=1;b=2; write(a,b); /输出a、b两个整型变量的数据。,3)readln 功能:readln与read的功能相似,只是在最后多读入一个回车符。 格式:readln(V1, V2, .,Vn ) 4)writeln 功能:writedln与write的功能相似,只是在输出的后面多输出一个回车符。 格式:writeln(V1, V2, .,Vn ) 注意:这4个函数只能在DOS环境下使用。,2.2 注释,Object Pascal语言中的注释有下面三种形式: 组合符号“”与“”的成对使用表示它们之间的内容为注释部分。 组合符号“( *”与“* )”的成对使用表

6、示它们之间的内容为注释部分。 符号“/ ”的单个使用表示所在行的该符号之后的内容为注释。 注意: 注释符“”与“”、“( *”与“* )”在使用时不支持注释的嵌套,而且必须成对使用。 建议对于单行和少量几行的注释使用符号“ / ”,对于大块注释使用“ ”和“”或“( *”和“* )”。,有时可以利用注释在代码中形成一个醒目的标志。比如利用注释符号形成一个矩形方框,在其中可以添加一些重要的说明文字。 在注释符“”或“( *”后紧接着的是一个美元符号“ $”时,表示该句是一个编译器指令,它与普通的注释不同,通常用来对编译过程进行设置。比如前面的例2.1中的第二句就是一个编译器指令。 由于Delph

7、i集成开发环境中的代码编辑器在显示不同类型的代码时通过使用不同的颜色来加以区别,所以在编程的过程中,只要注意文件中代码的颜色,一般就不会错误地使用注释符了。,2.3 标识符与保留字,2.3.1 标识符的组成和作用,在Object Pascal语言中使用的是ASCII码字符集,包括英语字母A.Z、a.z、数字0.9和其他的一些标准字符。 下面的单个字符作为特殊符号存在: # $ 另外,有些字符对也作为单个的特殊符号存在,具体有: (* (. *) .) . / := = 其中,左中括号“ ”等价于“ ( .”,右中括号“ ”等价于“ . )”,左大括号“ ”等价于“( *”,右大括号“)”等价于

8、“* )”。,标识符可以由任意长的一个不带空格的字符串组成,但是只有前面的255个字符有效。标识符的第一个字符必须是字母或下划线,其余字符可以是字母、数字或下划线。 下面是一些正确或错误标识符命名的实例。 正确形式错误形式 count123count test123 14_count timenew$123 _123 abc 123 一般标识符可以由一个或多个具有适当意义的英文单词组成。,Pascal语言对于字母的大小写不敏感。当然,字符串中的大小写字母是需要分清的。在编写程序的时候要保持一定的风格,不要有时候全部大写标识符,另一些时候又实行大小写混写。 标识符是用来对常量、变量、函数标号和其

9、他用户定义对象等进行命名的。在程序设计语言中,程序中的数据定义、流程控制语句等都是由标识符组成的。,2.3.2 保留字和指令字,在标识符中,有一些是系统已经使用的,它们已有特定的含义,用户不能再用它们对自己定义的量命名。下面我们来学习下Object Pascal的保留字。 Object Pascal语言本身使用的一组标识符亦称为保留字,你必须了解它的含义,以便于正确的使用,否则会造成错误。Object Pascal语言定义了65个保留字,这些保留字不能被定义为标识符。,2.4 基本数据类型,2.4.1 整型,整型数据(integer)用来存放整数。Object Pascal支持五种预定义整型,

10、它们是shortint(短整型)、smallint(整型)、 longint(长整型)、 byte(字节型)、word(字类型)和longword(双字型),每一种类型规定了相应的整数取值范围以及所占用的内存字节数。它们的特性如下表2-3所示。,实例讲解,【例2.2】将输入一个整数值并把它输出到屏幕上。 program Project1; $APPTYPE CONSOLE var x:integer; begin writeln(请输入一个整数:); readln(x); writeln(你输入整数的是:,x); /下面的代码是为了在按下回车键前始终显示运行界面 writeln(按下回车键退出

11、。); readln; end.,2.4.2 实型,实型数据(real)用类存放实数。Object Pascal支持五种预定义实型,它们是real(基本实型)、single(单精度实型)、double(双精度实型)、extended(扩展实型)、comp(装配实型)和currency(货币实型),每一种类型规定了相应的实数取值范围、所占用的内存字节数以及它们所能达到的精度。 类型 数值范围 占字节数 有效位数 Real 2.910-391.71038 6 1116 Single 1.510-453.41038 4 78 Double 5.010-3241.710308 8 1516 Comp

12、-263+1263-1 8 1920,2.4.3 布尔型,布尔型(boolean)数据用来存放逻辑值(布尔值)。布尔型的值只有两个:false和True,并且false的序号是0,True的序号是1。false 和True都是预定义常数标识符,分别表示逻辑假和逻辑真。boolean是布尔型的标识符。,2.4.4 字符型,字符型(character)用char作为标识符。字符型必须用单引号“”括起来,字母作为字符型时,大小写是不等价的,并且字符型只允许单引号中有一个字符,否则就是字符串。 字符型是ASCII字符的集合,包括2种类型:标准字符和宽字符。 AnsiChar是传统的Pascal语言的字

13、符,是标准的一字节的ANSI字符;WideChar用于保存单个两字节的Unicode字符。Unicode字符集的前256个字符与ANSI字符集相同。一般的Char表示一个AnsiChar字符。,2.4.5 枚举类型,枚举类型(enumerated)是由一组有序的标识符组成的,形式如下: type typeName = (标识符1,标识符n); 通过预定义列出所有值的标识符来定义一个有序集合,这些值的次序和枚举类型说明中的标识符的次序识一致的。 例如: type Weektype=(Sun,Mon,Tue,Wed,Thur,Fri,Sat); 枚举元素只能是标识符,而不能是数值常量或字符常量。不

14、要把作为枚举元素的标识符视作变量名,它不能被赋值。同一个枚举元素不能出现在两个或两个以上的枚举类型定义中。,2.4.6 字界类型,子界类型(subrange)为某个有序类型的子集。例如开始定义了一个表示颜色的枚举类型: type TColors = (Red, Blue,Green,Yellow,Orange,Purple,White,Black); 接着就可以定义一个子界类型如下: type TMyColors = Green.White; 其中TMyColors包括了Green、Yellow、Orange、Purple和White。,2.5 复杂数据类型,结构类型(Struct)包括集合类

15、型(set)、数组类型(array)、记录类型(record)、文件类型(file)、类类型(class)、类引用类型(class reference)和接口类型(interface)等。,2.5.1 集合类型,集合类型(set)由有序类型的一些数值组成。定义方法如下: set of 基类型 例如: type TSomeInts = 1.250; / 基本类型为有序类型 TIntSet = set of TSomeInts; / 定义集合类型 TACopyOfByte = set of Byte; TSuit = set of (Club, Diamond, Heart, Spade); TA

16、CopyOfChar = set of Char;,2.5.2 数组类型,数组类型(array)的数据为某一类相同类型的元素按一定的顺序组成的序列,包括静态数组和动态数组两种。 1静态数组的定义方式如下: array 下标下限.下标上限 of 基类型 例如: var MyArray: array 1.100 of Char; / 一维数组 type TMatrix = array 1.10 of array 1.50 of Real; / 两维数组 type TMatrix = array 1.10, 1.50 of Real; / 与上面的两维数组相同,2动态数组的定义方式如下: array

17、 of 基类型 例如: var a:array of Real; /定义动态数组 可以通过过程SetLength来为动态数组指定空间大小,例如: SetLength(a,20); /为动态数组指定空间大小 其中数组a的索引值为0.19。,2.5.3 记录类型,记录类型(record)可以由不同类型的元素组成,这些元素称为域。在记录类型中为每个域指定了一个名称和数据类型。数据类型可以是Object Pascal语言中预定义的类型,也可以是程序员自定义的类型。记录类型的定义方式如下: type 标识符 = record 域1: 数据类型; 域n: 数据类型; end;,实例讲解,【例2.3】该例说

18、明了记录类型的定义与使用,同时也对with语句进行了说明。 program Project1; $APPTYPE CONSOLE type TDateRec = record / 记录类型的定义 Year:integer; Month:(Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec); Day: 1.31; end;,var Record1, Record2: TDateRec; / 记录类型变量的声明 begin Record1.Year:= 1975; / 给记录中的域赋值 Record1.Month:= Sep; R

19、ecord1.Day:= 13; with Record1 do / 使用with语句可以简化代码的输入 begin Year:= 1973; / 相当于Record1.Year:=1973; Month:= Jul; Day:= 21; end;,Record2 := Record1; / 对记录进行拷贝 with Record1 do begin writeln(format(%d年%d月%d日,Year,7,Day); end; writeln(按下回车键退出。); readln; end. 运行结果如图2-4所示:,2.6 常量与变量,2.6.1 常量,常量存储的是在程序中不能被修改的

20、固定值。常量定义出现在说明部分。它的语法格式如下: const=;=; 常量标识符的类型由定义它的常量的类型决定。例如:const a=12 隐含说明a是整型;const r=3.21隐含说明r是实型 常量定义部分必须以保留字const开头,可以包含一个或几个常量定义,而且每个常量均以分号结束。,2.6.2 变量,变量存储的是在程序中可以修改的值。变量具有三个基本要素:名字、类型和值。Object Pascal的每一个变量都具有一种类型,变量的类型决定了变量的数据性质和范围、变量存储在内存中所占的大小(字节数)以及对变量可以进行的合法操作等。 1变量声明格式 一个变量由标识符、类型和可选的初始

21、化共同定义的。变量声明格式如下: var变量标识符列表1:类型1;变量标识符列表2:类型2;变量标识符列表n:类型n;,其中,保留字var表示开始一个变量说明部分。变量标识符列表是一个用逗号隔开的标识符序列,冒号后面的类型是类型标识符。每个变量说明均以分号结束。 例如: vara,b,c:integer; m,n:real; 2变量初始化 在声明变量的同时也可以对变量进行初始化,即赋初值。格式如下: var 变量标识符:类型 = 常量表达式;,例如: var i:integer = 7; 相当于声明和语句 var i:integer; i:=7; 同时声明多个变量(比如var x,y,z: R

22、eal;)时不能包括初始化,variant 和文件类型的变量声明也不能初始化。,2.7 运算符和表达式,2.7.1 运算符,运算符是在代码中对各种数据类型进行运算的符号。例如,有能进行加(+)、减(-)、乘(*)、除(/)的运算符,有能访问一个数组的某个单元地址的运算符()。按照操作数数目的多少来分,运算符分为下面两类:单目运算符(Unary Operator)和双目运算符(Binary Operator)。例如算术运算符的+、-、*和/为双目运算符,+(正)和-(负)为单目运算符来使用。单目运算符一般放在操作对象的前面,只有指针运算符()可以放在操作对象的后面。双目运算符都放在两个操作数之间

23、。 Object Pascal语言中主要的运算符有:算术运算符、逻辑运算符、关系运算符、布尔运算符、字符串运算符、集合运算符、地址运算符等。本节将主要学习这些运算符的功能、性质及其优先级。,1算术运算符 算术运算符与普通数学中的运算符意义相同。它们的操作数可以是整型或实型,包括 + 、- 、* 、 /、 div 和 mod等。以下规则适用于算术运算符: 不管x 和y 的类型是什么,x/y 的结果总是扩展类型(extended);对其它运算符,只要有一个运算数是实数类型,它的结果就是扩展类型;另外,只要有一个运算数是Int64 类型,它的结果就是Int64 类型;否则,结果就是整数类型。如果一个

24、运算数是整数的子界类型,它就像整数类型一样被对待。,x div y 的值取整数,也就是取得x/y 的值,然后以0 的方向取得最近的整数。 mod 运算返回对运算数进行整数除后得到的余数。换句话说,就是x mod y = x - (x div y)*y。 若y 为0 的话,表达式x/y、x div y 和x mod y 将发生运行时错误。 2逻辑运算符 逻辑运算符对逻辑类型的操作数进行运算,数据结果也为逻辑类型,如表2-8所示。,3关系运算符 关系运算符用来比较两个运算数。=、= 也用作集合运算符,= 和 也用作指针运算符。 对大多数简单类型,比较运算非常容易理解。比如,只有i 和j 有相同的值

25、,i = j 才是真,否则ij为真。下面的规则适用于关系运算符: 除了实数和整数能一起比较外,两个运算数必须是兼容的类型; 对字符串进行比较,是依据它的每个字符在扩展ASCII 字符集中的顺序,字符类型被当作长度为1 的字符串;,两个packed string 要进行比较,它们必须具有相同数目的元素;一个具有n 个元素的packed string与一个字符串比较时,它被看作长度为n 的字符串; 只有当两个PChar 指针都指向同一个字符数组的范围内时,、= 运算符才能作用于它们; 运算符 = 和 能以类或类引用类型作为运算数。当用于类类型时,= 和 的计算规则与指针一样,只有当C 和D 指向同

26、一个实例对象时,C = D 为真,否则C D 为真;当用于类引用时,只有当C 和D 表示同一个类时,C = D 为真,否则C D 为真。,4字符串运算符 加号(+)还可以作为字符串运算符,它可以将两个字符串联接在一起。如果两个字符串都是短字符串,那么在结果字符串长度超过255个字符的情况下,只有前面255个字符有效。 5集合运算符 以下规则适用于 +、 和 * 运算符: 当且仅当序数(集合基础类型中的一个值)O 属于集合X 或集合Y(或同时属于X 和Y)时,O 属于X + Y;当且仅当O 属于X 但不属于Y 时,O 属于X Y;当且仅当O 同时属于X 和Y时,O 属于X * Y。,+、 和 *

27、 的运算结果属于集合类型set of A.B,这里A 是结果中的最小序数,B 是结果中的最大序数。 以下规则适用于 =、=、 和 in 运算符: 只有当X(集合)中的每个成员也是Y(集合)中的成员时,X = W 等同于W V为真; 对于序数O 和集合S,只有当O 是S 的一个成员时,O in S 才为真。,6地址运算符 地址运算符为,其作用是用来获取变量、函数或对象方法的地址。它返回的是运算对象的地址,也就是说它建立了一个指向其他运算对象的指针值。 如:k:Integer; p:Integer; k:=8; p:=k; 7. 类运算符 类运算符as和is对类或类的实例进行操作。此外,关系运算符

28、=和也可以对类进行操作。,8运算符的优先级 具有较高优先级的运算符先进行运算,具有相同优先级的运算符从左边开始。因此表达式x+ y * z先执行y*z,然后加上x作为结果,*先被执行,因为它比+有较高优先级,但x-y+z先从x减去y,然后加上z作为结果,和+具有相同优先级,因此左边的运算先执行。 使用圆括号来覆盖优先级规则。有括号的表达式先被运算,然后把它作为单个运算数。比如(x+y)*z,它把x 和y 的和乘以z。 这里的明显用意是(x=y) or (x=z),但若没有括号,编译器遵循优先级规则把它读作(x=(y or x)=z,此时,若z不是布尔类型,它将导致编译错误。 括号通常使代码更容

29、易读写,即使有时候严格说来它们是多余的。这样,上面第一个例子可写作x+(y*z)。,2.7.2 表达式,表达式是算法语言的基本组成部分,它表示一种求值规则,通常由操作数、运算符和圆括号。操作数是参加运算的数据,可以是常数、常量、变量或方法引用。表达式中出现的变量名必须已经被初始化。 表达式按照运算符的优先级进行计算,求得一个表达式的值。运算符中圆括号的优先级最高,运算次序是“先内层后外层”,因此先计算由圆括号括起来的子表达式,圆括号还可以多级嵌套。大多运算符按照从左到右的次序进行计算,少数运算符的运算次序是从右向左的,如赋值运算、三元条件运算符等。 Object Pascal规定了表达式的运算

30、规则,对操作数类型、运算符性质、运算结果类型、及运算次序都做了严格的规定,程序员使用是必须严格遵循系统的规定,不能自定义。 由于操作数和运算符都是有类型的,因而表达式也是有类型的,表达式的类型不一定和操作数相同,它取决于其中的运算结果。 Object Pascal表达式即可以单独组成语句,也可以出现在循环条件、变量声明、方法的参数调用等场合。,2.8 语句,程序是由一系列语句组成的。语句描述了要执行的运算规则和动作。,2.8.1 语句的格式,1. 声明语句 声明语句主要实现对标号、常量、数据类型、变量、过程、函数、过程和函数的输出等进行声明。 1) 标号的声明格式如下: label 标号1,标

31、号n; 其中的标号1,标号n可以是一个0.9999的整数,也可以是一个标识符。 2) 常量的声明格式如下列所示: const PI = 3.1415926535897932385;,在声明常量的时候,等号右边可以使用一些预定义的函数,如abs、chr、cos、exp、frac、hi、high、int、length、lo、low、odd、ord、pred、round、sin、sizeof、sqr、sqrt、和trunc等。 3) 在基本数据类型的基础上,还可以利用保留字type自定义一些数据类型,例如: type MyType=array 1.100 of real; 4) 利用保留字var可以

32、声明已存在数据类型的变量,例如: var x,y:integer; m:MyType;,赋值语句是最简单的语句, 赋值语句的作用是计算表达式的值,并赋给变量。对于任何一个变量必须首先赋值,然后才能引用,否则,未赋初值的变量将以一个随机值参与运算。另外,赋值号两边的类型必须相同,但表达式值为整数时,它可自动化为实型后赋给该实型变量,即符合赋值相容。 赋值语句的格式为: 变量:=表达式; 例如: a:=10; /把10的值赋给a b:=a+123; /把a的值与123相加,再把结果赋给b,2.8.2 赋值语句,2.8.3 goto语句,goto语句是一种无条件转向语句,它可以控制直接从程序的一条语

33、句转向另一条语句。goto语句的格式为:goto标号; 例如: a:=b+10; goto c; c: n:=i+j; ,上面的例子中,c是语句标号,语句标号要在程序说明部分用保留字label加以说明。当程序执行到goto c;这一句时就会发生跳转,转到c:n:=i+j;这里并执行。使用goto语句时,标号所指向的的语句与goto语句本身要在同一程序块内。不能用goto语句转入一个过程或函数内。Goto语句虽然增加了程序的灵活性,但是goto语句会使程序出现一种称为“乱面条”的结构,不符合结构化程序设计思想。因此,从结构化程序设计的角度来考虑,尽量不要使用goto语句。,2.8.4 复合语句,

34、复合语句用关键字begin和end将若干条语句括起来组成的,也称块语句。复合语句可以嵌套使用,也允许空的复合语句出现,也就是在begin和end之间没有其他语句。其格式为: begin 语句1; 语句2; 语句N; end; 例如: begin i:=1; s:=i+1; end; 这里,begin和end以及期间的3条赋值语句构成了一个复合语句。,2.8.5 with语句,在使用记录类型的变量时,可以通过with语句指定一些语句都是针对某一个变量来说的,这样可以简化代码的输入量。with语句的格式如下: with 目标对象 do 语句 如果with语句指定的某个变量具有某个字段,另一个变量也

35、具有该字段,则在with语句中对不指明变量的该字段来说,所有的操作都是针对with语句指定的变量来进行的。如果要对其他变量的该字段进行操作,要在with语句中指明变量名。 此外,还可以使用下面形式的with语句: with 目标对象1,目标对象n do statement,2.8.6 条件语句,条件语句用于实现分支结构。Object Pascal条件语句有两种基本形式:if 语句和case语句。 1if语句 if语句是由一个布尔表达式和两个供选择的操作序列组成。运行时根据布尔表达式求值结果,选取其中之一的操作序列执行。有两种形式的if语句: 1)if布尔表达式then 语句;2)if布尔表达式

36、then 语句1 else 语句2;,当布尔表达式的值为真,则执行then后面的语句,值为假时有两种情况:要么什么也不做,要么执行else后面的语句。 注意else前面没有分号,因为分号是两个语句之间的分隔符,而else并非语句。如果在该处添了分号,则在编译的时候就会认为if 语句到此结束,而把else当作另一句的开头,输出出错信息。例如: if ab then max:=a else max:=b; if语句的then或else之后如果又是if语句,则构成嵌套的if 语句。嵌套的if语句中,else与最近的一个if语句匹配。语法格式为:,if 表达式1 then 语句1 else if表达式

37、2 then语句2 else if 表达式n-1 then 语句n-1 else 语句n; 例如: if a1 then b:=a+1 else if a=1 then b:=a else if a1 then b:=a-1; else b:=0; 在嵌套的if语句中,只有在最后一个else下面的一条语句结尾才加分号“;”表示if语句到该处结束。,2case语句 if语句根据某种条件,最多仅有两种可能的后继流向。如果想在多个语句中选择后继流向,就要使用case流向。case语句执行的是多重选择。case语句的语法为: case 表达式 of 常量1:语句1; 常量2:语句2; 常量n:语句n;

38、,else 语句n; end; 其中表达式的值必须是有序类型,不能是实型值或字符串。常量的类型必须与表达式的类型一致。case常数冒号右边的语句可以是函数、过程调用、条件语句等,这为编写程序提供了极大的灵活性。,2.8.7 循环语句,循环语句实现循环结构。循环语句有三种:while语句、repeat语句、for语句。 while语句和repeat语句是条件型循环,当循环是由条件控制,且循环次数不确定时适用。for语句是计数型循环,在循环次数已知时适用。 1while循环 while循环结构用在先判断某些条件是否为真,然后重复执行某一段代码的情况下。While的条件是在循环体执行前进行判断的。即

39、“当满足某一条件时进行循环”,While语句的语法如下: while 布尔表达式 do 语句;,while语句的执行过程是,先计算布尔表达式的值,当其值True时,执行循环体中的语句序列,然后再重新计算布尔表达式的值,当布尔表达式的值为false时,循环终止,执行下一条语句。 我们来看一个例子: i:=0; s:=0; while i10 do begin i:=i+1; s:=s+i; end;,2repeat循环 repeat语句是“重复执行循环体,直到指定的条件为真时为止”,Repeat语句的语法如下: repeat 语句1; 语句2; 语句n; until 表达式; repeat循环与

40、while循环相似,区别在于while循环结构的布尔表达式在循环开头进行判断,循环次数最少为0次,而repeat循环是先执行后判断,重复执行repeat与until之间的语句,直到布尔表达式为True时,循环终止。循环次数最少为1次。,如上面例子可以用repeat循环来实现: i:=0; s:=0; repeat i:=i+1; s:=s+i; until i:=10; 3for循环 for循环适合用在事先知道循环次数的情况下,for语句的格式如下: for 循环变量:=初值 to 终值 do 语句/递增循环,for 循环变量:=初值 downto 终值 do 语句/递减循环 其中循环变量用来

41、控制循环次数,在程序的开头,需要声明该变量,其类型一般为整形。初值和终值可以是常数,也可以是表达式。第一种形式的for 语句是递增循环。首先将初值赋给控制变量,接着判断控制变量的值是否小于或等于终值,若是,则执行循环体,在执行了循环体之后,自动将控制变量的值该为它的后继值,并重新判断是否小于或等于终值。当控制变量的值大于终值时,退出for循环,执行for语句之后的语句。第二种形式的for 语句是递减循环。首先将初值赋给控制变量,接着判断控制变量的值是否大于或等于终值,若是,则执行循环体,在执行了循环体之后,自动将控制变量的值该为它的前趋值,并重新判断是否大于或等于终值。当控制变量的值小于终值时

42、,退出for循环,执行for语句之后的语句。,例1:计算1+2+3+99+100 var n,sum:integer; begin sum:=0; for i:=1 to 100 do sum:=sum+i; writeln(sum); end; 例2: for i:=5 downto 1 do writeln(i);,2.8.8 break过程,在while、for或repeat循环中调用break,使得程序的执行流程立即跳到循环的结尾,在循环中当某种条件满足时需要立即跳出循环,这时调用break。Object Pascal中的break类似于C语言中的break。,实例讲解,【例2.4】

43、下面的代码演示了在5次循环后跳出循环。 program Project1; $APPTYPE CONSOLE uses SysUtils; var i,j:integer; begin j:=1; for i:=1 to 100000 do begin j:=j+1; if i=5 then,break; end; writeln(j的值是:,j); writeln(按下回车键退出。); readln; end.,2.8.9 continue过程,如果想跳过循环中部分代码重新开始下一次循环,就调用Continue过程。,【例2.5】 下面的代码在执行第一次循环时continue后的代码不执行。

44、 program Project1; $APPTYPE CONSOLE uses SysUtils; var i:integer; begin for i:=1 to 3 do begin writeln(i,.before continue); if i=1 then continue;,实例讲解,writeln(i,.after continue); end; writeln(按下回车键退出。); readln ; end.,2.9 过程与函数,过程与函数是实现一定功能的语句块,可以在程序的其他地方被调用,也可以进行递归调用。 过程与函数的区别在于:过程没有返回值,而函数有返回值。,2.9

45、.1 过程,所有过程(procedure)在使用前都必须先声明。过程根据有无参数可以分为带参过程和不带参过程。过程的结构与程序类似,由过程首部和过程体组成。过程说明的语法如下: 1. 带参过程 procedure 过程名(参数列表); 变量声明; begin 过程体; end;,2. 不带参过程 procedure 过程名; 变量声明; begin 过程体; end; 过程是以保留字procedure开头的,接下来就是过程名称和过程体部分,过程体部分是位于begin和end之间的语句。 定义了有参过程后,在程序中就可以调用它了。调用的格式为: 过程名(实际参数);,实例讲解,【例2.6】定义一个求两个整数变量之和,并把和输出的过程。 program Project1; $APPTYPE CONSOLE uses

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论