ObjectPascal语言的语法基础.ppt

上传人:sh****n 文档编号:7400267 上传时间:2020-03-21 格式:PPT 页数:257 大小:2.26MB
返回 下载 相关 举报
ObjectPascal语言的语法基础.ppt_第1页
第1页 / 共257页
ObjectPascal语言的语法基础.ppt_第2页
第2页 / 共257页
ObjectPascal语言的语法基础.ppt_第3页
第3页 / 共257页
点击查看更多>>
资源描述
第2章ObjectPascal语言的语法基础 2 1符号集2 2语句2 3常用函数与过程2 4异常处理2 5小结习题二 2 1符号集任何一种程序设计语言都具有自己的符号集 符号集由字母 数字 特殊字符 关系运算符 赋值运算符等组成 2 1 1字符集ObjectPascal语言的字符集使用的是ASCII码的字符集 它包括英文字母 数字 特殊字符和字符组合作为特殊符号等 1 英文英文包括26个大小写英文字母 即 A Z 和 a z 2 数字数字包括0 9这10个数字 3 特殊字符除了英文字母和数字外的其他字符都属于特殊字符 1 可见的特殊字符 1 单个字符作为特殊符号 如 2 字符组合作为特殊符号 是指由两个字符组成并表示一定的特殊意义 如 2 不可见的特殊字符 空格字符 ASCII码值为32 和不可见的ASCII控制字符 ASCII码值为0 31 常见的有 Enter 符 其ASCII码值为13 其中 有些字符是等价的 例如 等价于 等价于 等价于 等价于 注意 1 ObjectPascal语言对英文字母的大小写不敏感 即 A 等价于 a 但是字符串中的大小写字母应该区分清楚 一般是将标识符的首字母大写 其余的小写 2 不属于特殊字符 2 1 2标识符标识符 Identifiers 是用来表示常量 常数 类型 属性 过程 函数 单元和程序等语法成分的符号 标识符分为标准标识符和用户自定义标识符两类 1 标准标识符标准标识符具有一定的意义 是事先分配给标准类型 标准常量 标准过程 标准函数和标准文件使用的标识符 1 标准类型 Integer String Char 2 标准常量 True False 3 标准过程 Get Pack Put 4 标准函数 Abs Spr Sin Cos Date 5 标准文件 Output Input 2 用户自定义标识符用户根据程序的需要可以自定义标识符 如常量 变量 过程和函数 用户自定义标识符须注意以下几点 1 必须由字母或者下划线开头 后跟字母 数字或者下划线 2 标识符的长度可以是任意的 但只有前255个字符有效 3 标识符中不允许有空格符 4 标识符的定义尽可能地避免与标准标识符相同 不能与保留字相同 正确的标识符 d122 d122d 122ddd dd 122和dd 122等 错误的标识符 122dd 122 dd dd122 dd 122和 dd等 2 1 3保留字与命令符保留字与命令符是Delphi保留的完成特定功能的字符串 1 保留字保留字是系统规定的具有特殊意义 特殊用途的字符串 它不能被用户重新定义或者作为其他标识符使用 ObjectPascal语言中的保留字如表2 1所示 表2 1ObjectPascal语言中的保留字 除了上述的保留字外 在对象定义类型时 private protected public published和automated也可作为保留字 而其他情况下作为命令符 2 命令符命令符又称为指令字 命令符和保留字的区别是命令符只有在特殊的情况下才有意义 一般情况下可以被用户定义为变量使用 程序不会出现错误 但是程序的条理不清晰 ObjectPascal语言中的命令符如表2 2所示 表2 2ObjectPascal语言中的命令符 2 1 4常量和变量在一段程序中 有两种不同类型的数据 即常量和变量 它们的区别是在程序执行过程中其值是否发生改变 1 常量常量是在程序执行过程中其值一直保持不变的量 使用常量的好处是代码简洁 修改代码容易 常量可分为直接常量 符号常量和类型常量 1 直接常量 在程序中直接引用的常数 如整型常数 实型常数 字符型常数 字符串型常数和布尔型常数 1 整型常数即整数 包括正整数 负整数和零 如2005 2005 2005 2 实型常数即实数 包括定点实数和浮点实数 定点实数即带有小数点形式的实数 如0 005 0 325 25 32 25 32 0 0 浮点实数即以科学计数形式表示的实数 如5 68E13 2 65E 3 6 255E 5 3 字符型常数是由单撇号 括起的字符 如 f F 2 4 字符串型常数是由单撇号 括起的字符串 如 delphi delphi8 0 和 程序设计 5 布尔型常数仅有两个值 即True和False True表示逻辑判断的结果为真 False表示逻辑判断的结果为假 2 符号常量 它是以标识符形式出现的常量 使用符号常量可以使程序简洁 修改容易 如果在一段程序中同一个常数反复出现 此时可以定义一个标识符来表示此常数 这个标识符称为符号常量 定义常量的语法格式如下 CONST常量名1 常量值1 常量名n 常量值n 其中 CONST是常量声明的保留字 是常量定义字段的开始 常量名是常量的标识符 即常量的名称 常量值是直接常量或者自定义符号常量组成的表达式 例如 CONSTX 15 Y X 3 Message 我喜欢Delphi 注意 1 保留字CONST可以单独成行 也可以写成CONSTX 15 为了使程序的结构更加清晰 建议使用第一种书写形式 2 在程序中不可以给常量赋值 否则Delphi编译器将出错 3 类型常量 具有数据类型的符号常量称为类型常量 其类型可以定义为标准数据类型或高级数据类型 定义类型常量的语法格式如下 CONST常量名 类型名 常量值 例2 1常量的声明 程序代码如下 CONSTPi real 3 14 Max integer 89555 Dd string 4 name 2 变量变量是程序的最基本要素之一 变量是在程序执行过程中其值可以改变的量 它是程序中某个内存地址的标识符 变量中可以存放数值 字符和字符串等 1 变量的组成 1 变量名 即变量的标识符 调用变量时直接调用变量名 2 变量类型 字符型 字符串型和整型等 3 变量值 即某一变量所代表的内存单元中的数据值 2 变量的声明 变量声明的基本语法格式如下 Var变量名1 类型名1 变量名n 类型名n 其中 Var是变量声明的保留字 变量名是变量的标识符 即变量名称 类型名是任何有效的数据类型 例如 VarX integer Y double Z string 当定义多个相同类型的变量时 定义的语法格式如下 变量名1 变量名2 变量名n 类型名 变量名之间用逗号隔开 例如 Vara b c integer 一般情况下 变量声明要使用保留字Var 但有时在类中声明变量时可以不使用保留字Var 例2 2变量声明不需要保留字Var 程序代码如下 typeTForm1 class TForm Button1 TButton Edit1 TEdit procedureFormCreate Sender TObject procedureButton1Click Sender TObject privated string 此处定义变量不需要保留字Var Privatedeclarations public Publicdeclarations end 3 变量的使用 在程序中变量必须先声明 后使用 通常先定义变量 然后初始化变量 初始化变量即给变量赋值 然后在程序中使用变量 变量初始化的一般格式如下 Var变量名 类型名 常量表达式 例如 VarI integer 12 变量声明I 并初始化为12 4 变量的作用域 变量的作用域是指变量的作用范围 根据作用域范围的类别变量分为公有变量与私有变量 全局变量与局部变量 1 公有变量与私有变量 在单元接口 Interface 部分声明的变量属于公有变量 可以被其他单元引用 如果某些变量从一个单元传到另一个单元 则需要用公有变量 在单元的实现 Implementation 部分声明的变量属于私有变量 此变量只能在本单元中使用 不能被其他单元引用 2 全局变量与局部变量 全局变量又称为全程变量 作用域是整个程序 在子程序之前 单元的实现部分之后声明的变量可以为本单元任何一个子程序使用 而局部变量是在一定区域范围内使用的变量 如果一个子程序使用 则其他子程序不能使用 全局变量占用内存空间时间较长 贯穿了整个程序的始终 局部变量则随着子程序运行的结束而释放内存空间 所以在一般情况下 不要把变量定义为全局变量 例2 3公有变量与私有变量 全局变量与局部变量的应用 单元文件1的程序代码如下 unitUnit1 interfaceusesWindows Messages SysUtils Variants Classes Graphics Controls Forms Dialogs Borland Vcl StdCtrls System ComponentModel Var name1 string 公有变量可以在单元2中使用 name是命令符 所以定义变量使用name1typeTForm1 class TForm Edit1 TEdit Button1 TButton procedureButton1Click Sender TObject private Privatedeclarations public Publicdeclarations end VarForm1 TForm1 implementationusesUnit2 引用Unit2Var sex string 全局变量 R nfm procedureTForm1 Button1Click Sender TObject Varage integer 局部变量beginname1 edit1 Text 把输入的值赋给变量name1form2 Show end end 单元文件2的程序代码如下 unitUnit2 interfaceusesWindows Messages SysUtils Variants Classes Graphics Controls Forms Dialogs System ComponentModel Borland Vcl StdCtrls typeTForm2 class TForm Button1 TButton Label1 TLabel procedureButton1Click Sender TObject private Privatedeclarations public Publicdeclarations end VarForm2 TForm2 implementationusesUnit1 与公有变量name1配合使用 R nfm procedureTForm2 Button1Click Sender TObject begin Label1 Caption name1 调用单元1中的变量并显示end end 注意 当全局变量和局部变量重名时 局部变量的优先级高于全局变量 在局部变量使用的范围内 程序使用局部变量则不使用全局变量 2 1 5数据类型数据是描述客观世界的字符 数字和所有输入到计算机中并能被程序加工 运算的符号集 数据类型是描述变量的表示形式和取值范围及数据能够参加的各种运算 在ObjectPascal语言中变量声明必须确定变量的类型 在ObjectPascal语言中 用户可以根据需要定义自己需要的数据类型 ObjectPascal语言具有丰富的数据类型 包括简单类型 结构类型 指针类型 过程类型 可变类型 如图2 1 1所示 1 简单类型简单类型可分为有序类型 实数类型 字符串类型和日期时间类型四大类 1 有序类型又包括整数类型 字符类型 布尔类型 枚举类型和子界类型 图2 1 1数据类型 1 整数类型 它是全体整数的统称 包括所有的正整数 负整数和零 整数类型可分为基本整数类型和通用整数类型 基本整数类型包括Shortint Smallint Longint Int64 Byte Word和Longword等类型 基本整数类型的名称 类型 长度和取值范围如表2 3所示 表2 3基本整数类型 通用整数类型包括Integer和Cardinal两种 它们的长度都是32位 其区别是Integer类型表示有符号整数 Cardinal类型表示无符号整数 通用整数类型的名称 类型 长度和取值范围如表2 4所示 表2 4通用整数类型 不同的整数类型占用内存空间的大小也不同 所以在定义整数变量时要根据自己的需要选择合适的整数数据类型 定义的太小将出现内存溢出 太大会造成内存空间的浪费 例如 编一个循环10次的程序 用Byte类型定义变量就足够了 适用于整数类型的运算如下 算术运算 div mod 关系运算 在Delphi中 不同变量类型之间的运算有可能出错 当位数少的向位数多的方向赋值时不会出错 反过来就要出错 例2 4变量声明的应用 程序代码如下 procedureTForm1 Button1Click Sender TObject Vari integer 定义i是整型变量j byte 定义j是字节型变量beginj 255 i j 不会出错i 5985 j i 超出了j的取值范围 出错end 2 字符类型 所有ASCII码都属于字符类型 一般的字符只占用1个字节的内存空间 字符类型可分为AnsiChar和WideChar AnsiChar是单字节字符 占用1个字节 它是Ansi字符集中的字符 WideChar占用2个字节的空间 即16位 是Unicode字符集中的字符 Char是一般字符类型 即通用类型 在不同的CPU和不同的操作系统下占用的内存空间不同 可能是1个字节 也可能是2个字节 字符数据类型的名称 类型 长度和取值范围如表2 5所示 Ansi字符集是ASCII字符集的扩展 每个字符占用1个字节 即8位 Unicode字符集中前256个字符是Ansi字符集 最常用的字符类型是Char类型 表2 5字符数据类型 适用于字符类型的运算符如下 关系运算 3 布尔类型 它是最简单 最常用的数据类型之一 用于逻辑运算 布尔类型的值等于两个预先定义的常量标识符True False 布尔类型可分为3种基本类型 即ByteBool WordBool和LongBool 其通用类型是Boolean 布尔数据类型的名称 类型 长度和取值范围如表2 6所示 ByteBool和Boolean类型占用内存空间为1个字节 WordBool类型占用内存空间为2个字节 LongBool类型占用内存空间为4个字节 在一般编程时最好使用Boolean 而ByteBool WordBool LongBool主要用于其他语言和Windows环境兼容 表2 6布尔数据类型 适用于布尔类型的运算符如下 关系运算 逻辑运算 and or not 关于布尔数据类型的逻辑运算 例如 设A B是两个变量 两者之间进行的逻辑运算结果如表2 7所示 表2 7A B逻辑运算 4 枚举类型 它是通过列举表示其值的标识符来定义的有序集合 有时需要变量引用一个固定集合中的值 如一周七天 Week可以表示Sunday Monday Tuesday Saturday 此种情况就要用枚举类型 使用枚举类型用户可以定义一组具有特殊意义的值 最多可定义255个子项 枚举类型的定义格式如下 Type类型定义符 标识符1 标识符2 标识符n 其中 Type是定义枚举类型的保留字 类型定义符是枚举变量的名称 标识符1 标识符n是自定义的一组有意义的标识符 且n必须小于等于255 例如 TypeWeek Sunday Monday Tuesday Wednesday Thursday Friday Saturday Week被定义为枚举类型 括号中的值称为枚举常量 即可以使用枚举类型Week定义变量 例如 VarD Week 定义D是Week类型的变量也可以同时定义枚举类型和变量声明 例如 VarD Sunday Monday Tuesday Wednesday Thursday Friday Saturday D Sunday 对枚举类型变量D赋值 注意 枚举类型不能进行输入 输出操作 5 子界类型 它是在有序类型的取值范围内重新定义部分取值范围 枚举类型需要把所有的项逐一写出来 当数量较少时不太复杂 而当数量较多时枚举类型非常烦琐 例如 定义1 100之间的整数 使用枚举类型 1 2 3 100 要写100个数 这不是用户所想要的 此种情况用子界类型定义非常简单 子界类型的定义格式如下 Type子界类型 常量下界 常量上界 Var子界类型变量 子界类型 其中 常量下界和常量上界必须是同一种有序类型 常量下界要小于等于常量上界 下面通过一个例子来说明子界类型 例如 TypeNum 1 15 Letter a z VarI Num 因此 子界类型必须要求是有序类型 如整型 布尔型 字符型 枚举型等 而无序类型不能作为子界类型的元素 对Num赋值应为在1 15之间的整数 超出这个范围编译器将提示出错 2 实数类型 又称为浮点类型 包括整数部分和小数部分 实数不是有序类型 因为它的值域是无限的 主要用于数值较大或者精度较高的运算 运算时占用大量的CPU资源 运算的速度也低于整型 实数类型包括以下几种基本类型 Double Real48 Single Extended Currency和Real 它们之间的区别主要是取值范围 占用空间的大小不同 实数类型的类型 名称 取值范围 有效数字和长度如表2 8所示 表2 8实数类型 除此之外 还有Comp也属于实数类型 但很少使用 其中Double Real48 Single Extended Currency为基本类型 Real为一般类型 注意 1 Extended类型比Real类型的精度高 但是它与其他语言或者操作平台的兼容性较差 尽可能的避免使用 2 Real类型与Double类型是等价的 3 Currency类型是专为财务货币处理设计的 此类型至少有4位有效小数位 3 字符串类型 它是存储字符串数据的类型 可分为ShortString AnsiString WideString和String 字符串类型的类型 名称 最大长度和所需的内存空间如表2 9所示 表2 9字符串类型 其中 ShortString AnsiString WideString是基本字符类型 String是一般字符类型 即通用类型 当编译开关的状态为 H 时 用保留字String声明的是短字符串 即ShortString 当编译开关的状态为 H 时 用保留字String声明的是长字符串 即AnsiString 在默认情况下 编译开关的状态为 H 字符串变量声明的语法格式如下 Var类型标识符 String 长度 在程序中一般使用String 很少使用ShortString AnsiString和WideString来声明字符串变量 例如 VarStr1 string Str2 string 10 其中 可以通过字符串的下标来访问字符串中的字符 10是限制字符串的长度不能超过10 如果赋初值时字符串的长度超过了10 则系统自动识别前10位 剩余的字符将被丢失 但是AnsiString和WideString类型的字符串没有长度的限制 例2 5超过定义字符串范围的长度将被丢失的应用 程序代码如下 procedureTForm1 Button1Click Sender TObject Varstr string 2 beginstr asdjgh 给str赋值Label1 Caption str end 执行这段程序后结果是as 说明变量str把字符串asdjgh中的后4位数据 djgh 丢失 在一段程序中如果字符串变量str赋的值是汉字 则用str 来显示其字符可能是乱码 下面通过一个例子说明这个问题 例2 6输出 我喜欢Delphi 的第一个字节 程序代码如下 procedureTForm1 Button1Click Sender TObject Varstr string 10 beginstr 我喜欢Delphi 给str赋值Label1 Caption str 1 end 执行这段程序显示的不是 我 而是乱码 可改为下面的程序 procedureTForm1 Button1Click Sender TObject Varstr string beginstr 我喜欢Delphi 给str赋值Label1 Caption str 1 end 执行这段程序后显示字符 我 4 日期时间类型 该类型是Delphi常用的一种类型 用来存储 控制日期和时间 和日期时间类型相似的是日期类型和时间类型 日期时间类型实际上是浮点类型的一种 在变量中存储年 月 日 小时 分和秒这些信息 声明一个日期时间型的变量和声明其他变量类似 例如 VarMydatetime datetime 例2 7日期时间类型的应用 程序代码如下 procedureTForm1 Button1Click Sender TObject Varmy datetime 定义变量beginmy now 获取系统日期时间 Label1 Caption datetimetostr my 显示系统日期时间end 这段程序的作用是显示当前系统的日期时间 其中 now 是获取系统日期时间的函数 而datetimetostr 是将日期时间类型转换成字符类型 2 结构类型结构类型比简单类型的数据复杂 结构类型在程序中也是非常重要的 它包含很多类型 下面重点介绍集合类型 数组类型和记录类型 1 集合类型 它是把一组相关的对象作为一个整体参加运算 每一个对象称为集合的一个元素 这点和枚举类型 子界类型类似 但是它们之间也有区别 集合类型是一个整体 而枚举类型和子界类型的变量只是它的一个元素 集合类型中元素没有先后顺序关系 相同的元素不能在同一个集合中出现 1 定义集合类型 其类型的格式如下 Type集合标识符 setof基本类型 其中 集合元素的个数不能超过256个字符 Type setof是保留字 基本类型可以是任意有序类型 如整数类型 字符类型 布尔类型 枚举类型和子界类型 但不能是实数类型 例如 TypeNum setof1 10 以子界类型为基类MyChar setofchar 以字符类型为基类Orient east west south north 以枚举类型为基类 需要注意的是在使用集合类型时 要先定义集合类型 集合类型的变量声明与其他类型变量的声明类似 例如 VarMynum Num 也可以同时声明集合类型和变量 例如 VarMynum setof1 10 注意 集合中元素上界应大于等于下界 集合元素的个数不能超过256个字符 如Mychar setofWidechar 是错误的 因为Widechar的位数为2 包含65535个字符 2 集合类型变量赋值 给集合类型变量赋值时用方括号表示 例如 TypeNum setof1 10 Var Mynum Num beginMynum 1 2 3 4 5 end 先定义了集合类型Num 然后声明集合变量 最后给它赋值 其中Mynum是num的类型变量 集合类型允许值为空集 如Mynum 3 集合类型的运算 该运算包括等于 与不等于 关系运算 集合类型的关系运算返回结果是布尔值 真或假 元素的排列顺序和集合没有关系 例如 1 2 3 4 2 3 4 1 真 true 1 2 3 4 2 3 4 5 假 false 小于等于 关系运算 集合A中的元素在集合B中都存在 称为集合A小于等于集合B 反之称为集合A大于等于集合B 例如 a b c a b c d 真 true c b a a b c d 真 true c b a a b c d 假 false 注意 集合的运算关系不存在大于 小于 只存在大于等于和小于等于 2 数组类型 该类型是一组具有相同类型的元素并按一定的顺序组成的序列 数组中的每一个元素都通过数组名和下标来存取 数组可分为一维数组和多维数组 也可分为静态数组和动态数组 1 一维数组 它是数组中最简单的数组 定义一个一维数组类型的格式如下 数组标识符 array 下标号下限 下标号上限 of元素类型 其中 下标号下限 下标号上限 指的是类型变量的分量个数 其下标的类型是任何有序类型 一般的下标类型是整数类型 元素类型可以是任何类型 例2 8定义一个一维数组 程序代码如下 TypeMyarray array 1 10 ofinteger Mychar array a z ofchar 声明一维数组变量 VarI Myarray 数组赋初值 procedureTForm1 Button1Click Sender TObject TypeMyarray array 1 10 ofinteger Vari myarray begini 1 55 i 2 5 Label1 Caption inttostr i 2 end 其中 数组变量i得到55和5这两个值 其余的数组元素值系统默认为0 Label1的标题显示5 一般采用循环语句给数组赋值 关于循环语句将在后面章节中讲解 2 多维数组 它是指数组中的元素本身也是一维数组 其中二维数组属于多维数组 二维数组是一维数组的推广 它是最常用的多维数组 定义二维数组的格式如下 Type数组标识符 array 下标号下限 下标号上限 下标号下限 下标号上限 of元素类型其中 数组标识符和一维数组的标识符相同 只是增加了一个 下标号下限 下标号上限 定义二维数组 例如 TypeMyarray array 1 5 1 5 ofinteger Vari myarray 定义了一个二维数组Myarray 声明数组变量i 例2 9二维数组的赋值和应用 程序代码如下 procedureTForm1 Button1Click Sender TObject Type Myarray array 1 5 1 5 ofinteger Vari myarray begini 1 1 55 给数组赋值i 2 2 5 给数组赋值Label1 Caption inttostr i 1 1 显示数组 1 1 中的值end 执行这段程序后 结果是55 除数组中 1 1 2 2 元素外 其他的元素值均为0 赋值方法和一维数组相同 一般采用循环语句给数组赋值 注意 i 1 1 等价于i 1 1 3 记录类型 前面介绍的枚举类型 子界类型和数组类型都是相同数据类型的集合 然而 在实际应用中 常把一些不同数据类型的数据集中在一起 作为一个整体 因此 引入了记录类型 记录类型和数据库的记录相似 如一个通信录由下列字段组成 编号 整型 姓名 字符串型 年龄 整型 地址 字符串型 电话 整型 这是数据库中的字段 同样记录类型也可以定义这组数据 定义记录类型在声明时 需要为每个字段定义名称和类型 定义记录类型的一般格式如下 Type记录类型标识符 Record字段标识符1 类型1 字段标识符2 类型2 字段标识符n 类型n end 其中 Record end是保留字 记录类型以end结束 记录类型标识符是记录类型名 字段标识符是字段名 类型是该字段的数据类型 可以是任意类型 例如 上述通信录可以定义成下列程序 TypeFriend recordId integer Name string Age integer Addr string Tele integer end 其中 定义了Friend类型的记录 该记录由5个字段组成 且每个字段都有其标识符和类型 声明记录类型变量和声明其他变量类似 声明记录类型变量的格式如下 Var记录变量 记录类型标识符 例如 VarFri friend 声明记录变量后就可以访问记录中的任何一个字段 访问记录中某字段的语法格式如下 记录变量名 字段名例如 Fri Id 1 Fri name 张宏进 Fri age 20 Fri addr 陕西 Fri tele 86525652 由程序可见 给记录字段赋值 每个字段前都有 Fri 这样重复的工作量增大 用with语句可以解决这个问题 with语句的语法格式如下 With记录变量名dobegin end With后的记录变量名允许有多个 且记录变量名之间要用逗号隔开 do后一般是复合句 使用begin和end括起来 with语句的功能是为了节约输入量 如果with语句后面只跟一条语句 这样增加了用户的输入量 例2 10With语句的应用 程序代码如下 WithFridobegin Id 1 Name 张宏进 Age 20 Addr 陕西 Tele 86525652 end 3 指针类型指针类型是一种特殊的类型 前面讲述的类型变量都是静态的 程序运行时占用固有的内存空间 运行结束后才释放内存空间 指针类型不太复杂 但是在任何一种语言中都比较难理解 因为它的灵活性很高 指针类型是以 开始 后跟类型名 定义指针类型的语法格式如下 Type指针类型 类型名 其中 类型名是指针所指向的数据类型 例如 TypePinteger integer Pchar char 其中 定义了两个指针类型 一个是Pinteger 指向integer类型的数据 另一个是Pchar 指向char类型的数据 先定义指针 再声明指针变量 例如 VarIp pinteger Cp pchar 定义指针和变量声明也可以同时进行 例如 VarIp integer Cp char 指针类型可以是简单类型 也可以是构造类型 4 可变类型可变类型又称为变体类型 主要用于支持OLE自动化操作 还用于经常变动的类型 它是一种功能强大的类型 声明可变类型的变量如下 VarMyVar Variant 可变类型变量MyVar声明后 默认初始化为一个特殊的值Unassigned 表示MyVar没有被赋值 当变量MyVar的值为特殊值Null时 表明变量MyVar的值未知或者是数据丢失 可变类型的变量可以是整型 实型 日期时间型 字符型和布尔型等 编译器自动进行类型转换 可变类型的主要用途是可以动态地改变其数据类型 例2 11可变类型变量的声明和应用 程序代码如下 procedureTForm1 Button1Click Sender TObject Varv1 v2 v3 v4 v5 Variant beginv1 123 v1整型v2 asd v2字符串型 v3 25 36 v3实数型v5 v1 v2 v5字符串型v4 v3 v1 v4实数型Label1 Caption v5 v5字符串型Label2 Caption v4 v4字符串型end 在按钮单击事件中 可变类型使用整型 字符串型 实数型 Label1的标题显示 123asd Label2的标题显示 148 36 2 1 6类型的转换两个数据在赋值或者计算时类型必须相同 不相同将出现错误 这时就需要将不同类型的数据转换成同一种类型 数据类型的转换分为自动类型转换和强制类型转换 1 自动类型转换自动类型转换是指系统自动将一种类型A转换成另一种类型B 自动转换的条件是类型A在类型B的取值范围内 从精度低的方向向精度高的方向转换 例2 12自动类型转换的应用 程序代码如下 procedureTForm1 rClick Sender TObject Vari integer f real c char s string begin i 3 f i 2 22 编译时不会出错c j s c 编译时不会出错Label1 Caption s Label2 Caption floattostr f end 其中 f i 2 22 在编译时不会出错 如果i f 将出现错误 2 强制类型转换强制类型转换是指从一种类型强制转换成另一种类型 并不是所有的类型都可以强制转换成另一种类型 例2 13强制类型转换的应用 程序代码如下 procedureTForm1 rClick Sender TObject Vari integer c char beginc a i integer c 强制转换成整型Label1 Caption inttostr i inttostr是类型转换函数i 98 Label2 Caption char i 强制转换成字符型end 执行该段程序后 Label1的标题是 97 Label2的标题是 b 注意 强制类型转换有可能造成数据的丢失 2 1 7标号 数值和字符串在ObjectPascal语言中标号 数值和字符串是常用的 并对它们做了相应的规定 1 标号在Delphi语言中 保留了goto语句 goto语句的语法格式如下 goto标号 其中 标号是0 9999之间的整数 并允许使用标识符作为标号 goto语句的功能是转到有 标号 的语句执行 使用goto语句前必须先声明标号 且在同一段程序中不允许跳出过程和函数 例2 14goto语句定义的应用 程序代码如下 implementationVari integer R nfm procedureTForm1 Button1Click Sender TObject labelasd beginasd i 1 i Label1 Caption inttostr i sleep 1000 暂停1000毫秒 gotoasd end 该程序的功能是实现i的累加 在结构化程序中一般不使用goto语句 因为使用goto语句容易使程序混乱 可读性差 2 数值在Delphi语言中 一般使用的数值是十进制数 但也可写成十六进制数 1 十进制数 一般的书写都是十进制数 如10 526 21 58等 也可用科学计数法表示 如54 25e 3表示54250 2 十六进制数 十六进制数值可以表示整数 以 开始 例如 54B表示十进制整数1355 3 字符串字符串是用单撇号括起来的一串字符 单撇号内可以是特殊字符 如 和 等 也可以是字符串的表示形式 如 我喜欢Delphi 你好 如果要表示单撇号时 需要使用两个单撇号表示为一个单撇号 例如 表示 在Delphi语言中允许在字符串中嵌入控制符 控制符是由特殊符号 和紧跟其后的0 255之间的无符号整数构成 表示ASCII码中的字符 例如 97 表示字符 a 97 98 99 表示 abc 注意 书写 97 时 不要用单撇号括起来 如 97 输出的是 97 而不是字母 a 直接书写 97即可输出字母 a 2 1 8运算符运算是对数据进行加工的过程 而运算符是各种运算的符号 例如 加 减 乘 除运算符 在ObjectPascal语言中 运算符主要包括赋值运算符 算术运算符 逻辑运算符 位运算符 字符串运算符 关系运算符和布尔运算符等 1 赋值运算符赋值运算符比较简单 在前面大多数程序中都用到了赋值运算符 在此不再赘述 赋值运算符是用 来表示的 例2 15赋值运算符的应用 程序代码如下 VarI D integer I 25 D I 其中 I赋值为25 I又赋值给D 所以D的值是25 2 算术运算符 1 算术运算符 它可分为单目运算符和双目运算符 单目运算符如表2 10所示 双目运算符如表2 11所示 表2 11双目运算符 表2 10单目运算符 说明 1 取正 取负与加减乘除的运算和数学中的运算相同 操作数可以是整型或实型 2 除的结果是实型 例2 16除法的应用 程序代码如下 procedureTForm1 Button1Click Sender TObject Vari integer f real begini 5 f i 4 i 4 值是实型Label1 Caption floattostr f end 3 参加整数除法和求余运算的操作数必须是整型 其结果也是整型 例2 17div和mod的应用 程序代码如下 5div2 整除取商 结果为2 5div 2 整除取商 结果为25div 2 整除取商 结果为 2 5div2 整除取商 结果为 25mod2 整除取余 结果为15mod 2 整除取余 结果为1 5mod2 整除取余 结果为 1 5mod 2 整除取余 结果为 14 在除 整数除 整数求余运算的表达式中除数不能为0 2 算术表达式 它是由常量 变量 函数 运算符和括号组成的 运算结果是一个数值 如2 5 9 8 6 5 其结果自动转换成实数型 结果为 63 8 算术表达式和数学中的表达式十分相似 但也有一些区别 1 数学中x平方的表达式为x2 而在算术表达式中为x x 2 在数学表达式中 小括号外面还可以有中括号或大括号 但在算术表达式中不允许 只能使用多重小括号 如数学表达式中65 23 23 36 66 表示成算术表达式为65 23 23 36 66 3 算术表达式不能简写 如8x需要表示成8 x 3 算术运算符的优先级 算术表达式运算符包括加 减 乘 除 取正 取负 mod和div 它们的优先级顺序从高到低如下 取正 取负 乘 除 mod div 加 减在算术表达式中 同一级别运算符的结合性是自左向右 如果表达式中包括括号 先运算括号中的表达式 如果是多重括号 最里面括号中表达式的优先级最高 3 逻辑运算符逻辑运算又称为布尔运算 其运算结果是布尔型 逻辑运算符可以连接若干表达式 如不等式0 x 99表示成0 xandx 99 逻辑运算符如表2 12所示 表2 12逻辑运算符 其中 除not是单目运算符外 其余的均为双目运算符 设a b为逻辑值 其运算结果如表2 13所示 表2 13a b逻辑运算 在逻辑运算中 如果两个表达式均为真 两个表达式进行and逻辑运算 其结果为真 否则为假 如果两个表达式均为假 两个表达式进行or逻辑运算 其结果为假 否则为真 如果两个表达式的布尔值不同 两个表达式进行xor逻辑运算 其结果为真 否则为假 not运算是由真变假 由假变真 4 位运算符位运算是二进制运算 即把整数先换算成二进制的形式 然后再运算 结果是整型 并按二进制形式进行位的移动和比较 位运算符如表2 14所示 表2 14位运算符 其中 除not是单目运算符外 其余的位运算符都是双目运算符 下面讲述各个位运算符的运算过程 1 not位运算符 是按位非 即把操作数的每一位都取反 0变成1 1变成0 例如 I not6 I的值是 7 6的二进制形式是00000110 而 7的二进制形式是11111001 2 and位运算符 是按位与 当两个数都为1时 结果才为1 例如 V1 2 00000010V2 3 00000011I V1andV2 00000010所以I的值是2 3 or位运算符 是按位或 两位中有一位是1时 其结果为1 例如 V1 2 00000010V2 3 00000011I V1orV2 00000011所以I的值是3 4 xor位运算符 两位相异或时 其结果为1 例如 V1 5 00000101V2 3 00000011I V1xorV2 00000110所以I的值是6 5 shl位运算符 左移 即每个二进制的数值向左移 例如 I 7shl2 00000111左移2位I的结果是28 即00011100 6 shr位运算符 右移 即每个二进制的数值向右移 例如 I 7shr2 00000111右移2位I的结果是1即00000001 5 字符串运算符在ObjectPascal语言中 字符串运算符只有一种 即连接运算符 该运算符可以使两个或两个以上的字符串连接起来 连接运算符可以连接字符常量 字符串常量 字符变量和字符串变量等 字符串表达式的语法格式如下 字符串表达式 字符串 字符 例如 Str 我喜欢 Delphi str的值是 我喜欢Delphi Str 123 Delphi 456 str的值是 123Delphi456 Str a bcdef str的值是 abcdef 6 关系运算符关系运算符又称为比较运算符 是用来比较两个表达式的值 其结果是布尔型 在ObjectPascal语言中关系运算符有7种 如表2 15所示 注意 1 关系运算符的优先级别相同 2 关系运算符两侧的表达式的类型可以是任意的 但是类型必须一致 在比较两个字符串时 如果第一个字符大 其字符串也大 如果第一个字符相同再比较第二个 依此类推 常见字符值的大小如下 表2 15关系运算符 空格 0 9 A Z a z 任何汉字7 运算符的优先级前面讲述了ObjectPascal的基本运算符 在ObjectPascal语言中可以使用任意的运算符来连接任意表达式 例如 F 6 3 6 89 5mod3 如果不知道其优先级 就无法计算整个算术表达式 下面讲述它们的优先级别 优先级由高到低的顺序如下 1 2 函数 3 not 4 div mod and shl shr 5 or xor 6 in例如 F 6 3 6 89 5mod3 F值是640449438202247 6 3 5 结果是true 6 3 5 语法错误8in 2 8 结果是true 88 99 结果是88992 1 9注释程序的注释是对一段程序或者一行程序的解释 在编译过程中不参与编译 用来增强程序的可读性 程序中常使用 注释程序 注释有两种方式 即整行注释和行内注释 1 整行注释整行注释是以 开始 后的所有内容都属于注释的内容 一般情况下都采用整行注释 用来注释此行的内容 2 行内注释行内注释常使用 或 只要在 或者 中的部分都属于注释 与 和 的区别是 只可用于单行的注释 如果按回车键 下一行就不起注释的作用 和 可以换行 只要在 和 之间或者 和 之间都属于注释 例2 18注释的应用示例 程序代码如下 ImplementationusesUnit2 Varsex string 全局变量 R nfm 不属于注释procedureTForm1 Button1Click Sender TObject Varage integer 局部变量 beginname1 edit1 Text 把输入的值赋值给变量name1 form2 Show end 此单元程序完全结束 end 注意 在 或者 中注释的第一个字符不可以使用 否则编译器将编译此注释 以致发生错误 2 2语句程序是由多条语句组成的 而语句是由保留字 运算符 属性 函数和Delphi编译器识别的指令等组成的 书写语句时必须符合语句的语法规则 只有书写正确的语句才能被编译器识别 否则就会出现编译错误 2 2 1语句的一般概念正确地书写语句必须了解其语法 使每个语句的语法都正确 不出现语法错误和逻辑错误 这样的语句组合才称为程序段 下面讲述语句的书写规则和格式符号的规定 1 语句的书写规则 1 对英文字母的大小写不敏感 ObjectPascal语句的书写比较自由 它不区分英文字母的大小写 即对英文字母的大小写不敏感 如保留字 定义的数据类型和声明的变量等不区分大小写 例如 VarI integer 和下面变量声明的是相同的 Vari integer 2 语句以 结束 书写语句时可以把一个语句拆成多行写 也可以把多个语句写在同一行 每一个语句都以 结束 但是在一个复合语句中 最后的一个语句可以不加 例2 19语句书写规则示例 程序代码如下 VarI j integer beginI 10 J 15 I i j end 也可以写成VarI j integer beginI 10 J 15 两个语句写在同一行I i j 此语句拆开写 并不以 结束end 3 复合语句 它是由多条语句组成的 一个复合语句的开始用 begin 结束用 end 在 begin 和 end 之间可以有多条语句 复合语句的语法格式如下 begin语句1 语句2 语句n end 注意 end后面要加分号 表示整个程序段的结束 4 语句格式 一条语句可以写成多行 多条语句也可以写成一行 虽然编译时不会出现错误 但语句层次结构不清晰 可读性差 所以书写语句时要尽量避免多条语句写在同一行 一条语句可以写成多行但是一般不分行写 除非一条语句太长 否则尽量避免一个语句拆成多行写 特别是嵌套语句或构造语句 复合语句 条件语句和循环语句 要在每层语句的开始空两个空格 这样使程序结构更清晰 例2 20语句格式的书写应用 程序代码如下 procedureTForm1 Button1Click Sender TObject Vari j integer sum real beginj strtoint edit1 Text sum 1 i 0 ifedit1 Text thenshowmessage 请输入数值 elsebeginrepeati i 1 sum sum i untili j Label1 Caption floattostr sum end end 虽然ObjectPascal语言对英文字母不敏感 但是为了语句的通俗易懂 要尽量避免英文的大小写混合使用 如beGin 2 格式符号的规定为了便于解释语句 方法和函数 使用统一的符号 如 和 等 格式符号如表2 16所示 表2 16格式符号 例如 Case语句格式如下 Caseof else其他语句 end 3 语句的分类根据语句的复杂性 语句分成两大类 即基本语句和构造语句 如图2 2 1所示 图2 2 1语句的分类 2 2 2基本语句基本语句又称为简单语句 执行程序语句的顺序是从上向下依次执行 基本语句包括赋值语句 读写语句 转向语句和空语句 1 赋值语句赋值语句是除空语句外最简单 最常用的一种语句 其语法格式如下 变量名 属性名 注意 1 赋值符号的写法是 而不是 2 赋值符号两侧的类型要一致 例如 VarI integer I 4 I 4 0 语法错误2 读写语句读写语句是系统的输入 输出语句 用保留字read和write来完成此功能 1 读语句 它完成的是输入功能 标准输入终端是键盘 读语句的格式有两种 Read 变量1 变量2 变量n Readln 变量1 变量2 变量n 例2 21read语句的应用 程序代码如下 Vara b c integer read a 读取一个整数 保存在变量a中readln b c 读取两个整数 保存在变量b c中 并跳过回车符readln 跳过回车符 2 写语句 它完成的是输出功能 标准输出终端是显示器 写语句的格式有两种 Write 项1 项2 Writeln 项1 项2 其中 项可以是常量 变量 表达式和函数 例如 Write abc 输出abcWriteln 输出一个回车换行符例2 22read和write的应用 程序代码如下 Vara b c sum integer readln a b c 读取一个整数 保存在变量a b c中 sum a b c write sum 说明 程序的输入一般使用文本框edit text 输出一般使用label caption 3 转向语句转向语句是由保留字break continue组成的 它们通常和while语句 repeat语句 for语句结合使用 4 空语句空语句是最简单的语句 即只由一个分号组成 例如 此语句表示空语句 2 2 3条件控制语句条件控制语句又称为选择语句 用于实现分支结构 首先判断条件表达式是否成立 如果成立 则执行下面的语句 否则不执行 条件控制语句有两种 即if语句和case语句 if语句主要用于分支较少的情况 在分支较多的情况下 使用case语句比较简单 1 if语句if语句是最简单的条件语句 也是最重要的条件语句 其语法格式如下 ifthen else 其中 条件是关系表达式或布尔表达式 如果条件为真 则执行语句1 否则执行语句2 语句if then else是一个完整的语句 在语句1后不加分号 否则出错 语句可以是简单语句 也可以是复合语句 语句1和语句2中的一个可以为空语句 如果两个语句都为空语句 则没有任何意义 当语句2为空语句时 可以省略 else 语句 复合条件语句是由两个或两个以上的if语句嵌套构成的 if语句的结构流程有两种形式 如图2 2 2所示 1 简单条件语句 该语句不包含其他条件语句 一般由 语句1 和 语句2 两部分组成 程序只能执行其中一个语句 跳过另一个语句 图2 2 2if语句的结构流程
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!