




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
DELPHI程序设计基础教程 第五章高级数据类型.第五章高级数据类型本章学习导读5.1枚举类型5.2子界类型5.3集合类型5.4数组5.5记录类型5.6指针本章小结2023/2/3.本章学习导读本章介绍了枚举、子界、集合、数组、记录、指针这几种常用高级数据类型的使用。这些高级数据类型能够描述和扩展定义较复杂的数据的存储类型,通过结构类型,程序中可以存储结构复杂的数据。2023/2/3.5.1枚举类型枚举类型就是一种用户自定义数据类型,它是通过枚举的方式将该类型中的值用标识符的形式一一列举出来。枚举类型是一个以标识符标识的有序整型常数的集合,这些常数是该类型变量可取的合法值。定义和变量声明枚举类型定义的格式如下:type<类型名称>=(<标识符1>,<标识符2>,…,<标识符n>);其中type是定义枚举类型的保留字,“类型名称〞即用户自定义的枚举类型变量的名称,枚举值表示该种类型的值,又称为枚举常量,这些枚举值规定了枚举类型的值域。2023/2/3.5.1枚举类型运算枚举类型的值是枚举常量,因此对枚举类型的运算实际是对枚举常量的运算。如有以下函数运算:Ord(Mon)=1//返回有序类型表达式的序号,Mon的序数值为1Pred(Mon)=Sun//返回有序类型的先行数,Mon的先行值是SunSucc(Mon)=Tue//返回有序类型的后继数,Mon的后继值是Tue枚举常量可以进行比较,即可进行关系运算,返回结果为true或false,如:Sun<>Mon//结果为false〔因为0>1为false)2023/2/3.5.2子界类型子界类型也是一种用户自定义数据类型,它是由整型、字符型、枚举型、布尔型中某两个常量制定的该类型的值区域。定义和变量声明子界类型定义的格式如下:type <类型名称>=<常量1>…<常量2>;运算例5-1:顺序读入年、月、日,输出该日期是这一年的第几天〔子界类型的使用)。2023/2/3.5.3集合类型集合类型是一组相同类型元素的组合,即一组相对对象的整体,每个对象都称为集合的一个元素。集合类型通常用于检查一个值是否属于一个特定集合。定义和变量声明集合类型是ObjectPascal允许用户定义的一个结构数据类型,它使用户可以运用通常的集合运算。例如:交集、并集和差集。集合类型是一些同类型元素的集合,这些基类型元素可以是整型、布尔型、字符型、枚举型或子界类型。它通常的作用是用来检验某个元素是否被包含在一个集合当中。集合类型声明的格式如下:type集合类型标识符=setof基类型;2023/2/3.5.3集合类型变量集合取值变量集合的取值是用"["和"]"括起来,中间为用逗号隔开的若干个集合的元素。如:[]空集[1,2,3]['a','e','i','o','u']运算赋值运算集合的并、交、差运算集合的关系运算2023/2/3.5.3集合类型例5-2:输入一系列字符,对其中的数字字符、字母字符和其它字符分别计数。输入'?'后结束。2023/2/3.5.4数组5.4.1静态数组5.4.2动态数组5.4.3查找5.4.4排序5.4.5数组参数2023/2/3.5.4数组数组类型数据是一种用户定义的结构数据类型,它是一些具有相同数据类型的元素的集合。逗号隔开的下标类型个数表示数组的维数。根据数组的维数可以将数组分为一维数组、二位数组以及多维数组,每一维度的下标指明了元素的数目。其下标类型必须是有序的,包括了除长整型以外的所有有序类型以及长整型的子界类型,如整型、字符型、布尔型、枚举型、子界型等。数组类型数据表示的是同种类型数据的集合。数组类型的数据是排列有序的,每个数据元素都有一个唯一的索引号。与集合类型不同的是,数组类型的数据可以重复。数组类型分为静态数组和动态数组。2023/2/3.5.4.1静态数组一维静态数组静态数组在程序的初始化时就已经分配好内存单元,在声明时指定了数组的大小。数组类型定义的格式如下:type{<类型标识符>=array[下标1..下标2]of基类型};var<数组变量表>:<类型标识符>;例5-3:从数组中找出最大的一个元素,并指出它是哪一个元素。例5-4:将一个十进制自然数转换成二进制数。2023/2/3.5.4.1静态数组二维静态及多态静态数组一维静态数组只有一个下标,而二维静态数组有两个下标,多维静态数组则有多个下标,可以用来表示一个矩阵或空间。多维静态数组定义的格式如下:type{类型标识符=array[下标11..下标12]ofarray[下标21..下标22]…ofarray[下标n1..下标n2]of基类型};也可以定义为:type{类型标识符=array[下标11..下标12,下标21..下标22,…,下标n1..下标n2]of基类型};例5-5:读入5个学生的学号和成绩,计算他们的平均分,若比平均分高10分的等第为A,若比平均分高小于10分的等地为B,若低于平均分,则等第为C,输出他们的成绩和等第。2023/2/3.5.4.2动态数组动态数组在使用前并没有说明数组的大小,只是在程序运行当中,根据需要为数组开辟相应的内存空间进行存储。一维动态数组 一维动态数组定义的格式如下:type{类型标识符=arrayof基类型};二维及多维动态数组二维及多维动态数组定义的格式如下:type{数组类型标识符=arrayofarrayof…arrayof基类型};2023/2/3.5.4.2动态数组例5-6:有N张牌,记为1,2,...,N,应当怎样排放,才能使:打开第一张是1,然后报两张依次放在末尾;打开上面一张,刚好是2;再依次报三张放在末尾,打开上面一张,刚好是3;如此继续下去,直至打开最后一张是N。写一个程序解决这个问题。2023/2/3.5.4.3查找顺序查找顺序查找也称线性查找,是一种最简单的查找技术,它顺序地查阅各个数据记录,直到找到所要的一个数据记录,或抵达终点宣告查找失败。例5-7:假设有n个记录a[1],a[2],…,a[n],顺序地存放在一记录数组a中,其中,第i个记录的键码值为a[i].key。现在已给一个关键数据x,将x依次与r[1].key,a[2].key,…进行相等比较,当找到第一个r[1].key=x,则查找成功,回送下标i;否则,查找失败,回送0。2023/2/3.5.4.3查找二分查找二分查找也称折半查找。二分查找不像顺序查找那样从第一个记录开始逐个顺序搜索,而是每次把要找的关键数据与中间位置的键码值进行比较。例5-8:设有序记录数组a中每个记录的键码值按升序排列为a[1].key,a[2].key,…a[m].key,…,a[n].key。其中,n为记录个数,当i<j时有a[i]≤a[j]。开始时,中间位置的序号为m=(n+1)/2,相应记录的键码值为a[m].key。将已给的关键数据x与a[m].key比较,有三种可能的结果:x<a[m].key。x=a[m].key。x>a[m].key。重复上述过程,当最后只剩下一个记录,而且此记录不是要找的记录,则宣告失败。2023/2/3.5.4.4排序排序的方法有很多种,我们这里只简单介绍两种:选择排序和冒泡排序。选择排序选择排序的基本思想是:首先从要排序的数中选中最大的数,将它放在第一个位置,然后从剩下的数中选中最大的数放在第二个位置,如此继续,直到最后从剩下的两个数中选中最大的数放在倒数第二个位置,剩下的一个数放在最后位置,完成排序。例5-9:输入20个数,将它们从大到小的次序排列以后输出。2023/2/3.5.4.4排序冒泡排序冒泡排序的基本思想时:依次比较相邻的两个数,将大数放在前面,小数放在后面。即首先比较第一个和第二个数,将大数放前,小数放后。然后比较第二个数和第三个数,将大数放前,小数放后。如此继续,直到比较最后两个数,将大数放前,小数放后,此时第一次比较结束,在最后的数必是所有数中的最小数。重复以上过程,仍从第一对数开始比较〔因为可能由于第二个数和第三个数的交换,使得第一个数不再大于第二个数),将大数放前,小数放后,已知比较到最小数前的一对相邻数,将大数放前,小数放后,第二次比较结束,在倒数第二个数中得到一个新的最小数。如此继续,直到最后一次比较,只比较第一对数,大数放前,小数放后,从而最终完成排序。例5-10:输入20个数,用冒泡排序将它们从大到小的次序排列以后输出。2023/2/3.5.4.5数组参数数组在所有的编程语言中都是一个很重要的数据类型,是一个应用和广泛的技术。数组可以作为函数或过程的参数,但要注意在对数组参数进行声明中不能包含数组索引类型的声明。2023/2/3.5.5记录类型记录类型(record)可以由不同类型的元素组成,这些元素称为域。在记录类型中为每个域指定了一个名称和数据类型。数据类型可以是对象Pascal语言中预定义的类型,可以是相同的数据类型,也可以是不同的数据类型;这些数据可以是数值型的,也可以是非数值型的;还可以包括也可以是程序员自定义的类型。定义和变量声明记录类型的定义方式如下:typerecordTypeName=recordfieldList1:type1;…fieldListn:typen;end2023/2/3.5.5记录类型定义和变量声明域为记录类型的元素。记录的每个域都有名称,不同域的数据类型可以各不相同,这一点是数组所不能做到的。引用记录变量的元素采用以下标记法:直接引用,其形式为:记录变量名.域名使用with开域语句,其形式为:with记录变量名do语句记录的应用例5-11:该例说明了记录类型的定义与使用,同时也对with语句进行了说明。2023/2/3.5.6指针5.6.1指针的声明5.6.2指针的赋值5.6.3无类型指针5.6.4字符指针类型5.6.5指针的动态使用2023/2/3.5.6.1指针的声明在pascal中,指针变量(也称动态变量)存放某个存储单元的地址;也就是说,指针变量指示某个存储单元。在定义指针类型数据时,要说明它所指向变量的类型。指针类型的定义形式如下:Type指针类型名称=^基类型;(typepointerTypeName=^type)例5-12:该例对指针的定义和使用进行了说明。(见教材)2023/2/3.5.6.2指针的赋值对指针所指向的变量可以进行指针的基类型所允许的全部操作。对指针变量本身,除可用New、Dispose过程外,允许下列操作:具有同一基类型的指针变量之间相互赋值例5-13:把x变量的值赋给指针p的变量。可以给指针变量赋nil值nil是Pascal的关键字,它表示指针的值为"空"。例5-14:给指针p赋空值,程序见教材。2023/2/3.5.6.3无类型指针无类型指针是指在指针变量声明时不指明其基类型的指针类型,无类型指针用类型标识符pointer声明。例如,以下定义的变量p可以指向任何变量类型。Varp:pointer;2023/2/3.5.6.4字符指针类型有一种特殊的指针,我们称为字符指针,可以用来操作以零作为结束的字符串。在了解以零作为结束的字符串,我们必须先了解一种不固定长度的数组,但它有固定的形式,即:Array[0..x]ofchar;这种数组的索引从0开始,因此也可把它称为以“0为基数的字符数组”,它通常用来保存以零作为结束的字符串。字符指针是事先定义好的指针类型,其中基本的字符指针类型有两种,即PAnsiChar和PWideChar。PAnsiChar是指向AnsiChar类型的值的指针,而PWideChar则是指向WideChar类型的指针。还有一种通用的字符指针PChar,代表指向Char类型的值的指针。例5-15:使用三种特殊的指针类型,完成加减运算。2023/2/3.5.6.5指针的动态使用开辟动态存储单元在pascal中,指针变量的值一般是通过系统分配的,开辟一个动态存储单元必须调用标准过程new。new过程的调用的一般格式:New(指针变量)功能:开辟一个存储单元,此单元能存放的数据的类型正好是指针的基类型,并把此存储单元的地址赋给指针变量。2023/2/3.5.6.5指针的动态使用释放动态存储单元dispose语句的一般格式:dispose(指针变量)功能:释放指针所指向的存储单元,使指针变量的值无定义。动态存储单元的引用在给一个指针变量赋以某存储单元的地址后,就可以使用这个存储单元。引用动态存储单元一般格式:<指针变量>^例5-16:设有下列说明:varp:^i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 辽宁省营口市大石桥市水源镇2024-2025学年高中毕业班质量检测试题生物试题含解析
- 四川省成都市双流棠湖中学2025年高三联考数学试题(联考)试题含解析
- 吉林省吉林市第七中学2025年初三教学质量检查(二统)数学试题含解析
- 武汉传媒学院《人体解剖与组织学》2023-2024学年第一学期期末试卷
- 陕西省西安电子科技中学2025届下学期初三期末考试生物试题含解析
- 山西经贸职业学院《生物统计与试验设计Ⅰ》2023-2024学年第二学期期末试卷
- 四川建筑职业技术学院《建设法规与实务》2023-2024学年第一学期期末试卷
- 苏南京一中学2024-2025学年初三元月月考化学试题含解析
- 南京中医药大学《长沙文化研究》2023-2024学年第二学期期末试卷
- 江苏海洋大学《和声基础》2023-2024学年第二学期期末试卷
- 高中政治第3课时《正确对待外来文化》教学设计
- 2024年度社区工作者练习题库可打印
- 2024年形势与政策 第二讲 中国经济高质量发展扎实推进(课件)
- 《游园》课件统编版高中语文必修下册
- 数字乡村农村信息化服务平台建设方案-数字农村信息化云服平台建设方案
- 专题04 三角函数-备战2025年高考数学真题题源解密(新高考卷)解析版
- GB/T 44442-2024智能制造远程运维系统评价指标体系
- 部编版《综合性学习:中华传统节日》课件
- DBJ33T 1319-2024 住宅小区供配电工程技术标准
- 腕踝针疗法完整版本
- 提升质量意识-强化质量管理
评论
0/150
提交评论