




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章 基本数据类型与基本运算本章主要介绍程序设计中高级语言提供的数据类型和其上允许的基本运算。在介绍这些内容时,我们通过穿插一些实例介绍如何应用数据类型与基本运算来解决一些简单的问题。2.1 数据类型的概念2.1.1 为什么程序设计语言中要引入“数据类型”这一概念?2.1.2 数据类型的概念数据类型是程序设计语言中的一个非常重要的概念。那么,什么是数据类型呢?数据类型是由该类型的数据的值域(即值集)和在这些数据上所有施加的运算的集合(即运算集或操作集)组成。值域指出了每一种数据类型的变量合法的数据取值范围,而运算集合则规定了每一种数据类型的变量和数据其上所允许进行的运算。值域和运算集是数据类型的两个基本属性。在下面介绍Pascal语言的数据类型的有关章节中,对每一种数据类型均将说明这两种属性。2.1.3 数据类型的代数理论基础一个数据类型是一个二元组(D,R)。其中,D是一个数据类型的值域,R是建立在D上的运算(操作)的集合。这个二元组构成了一个代数系统。其中,D叫做该系统的基集。从本质上说,一个代数系统就是一个带运算的集合,而一个数据类型就是一个代数系统。从这个概念出发,程序设计语言理论在数据结构的基础上发展了一些数据和类型的代数理论。这些理论属于程序设计语言语义学的范畴,将来,有兴趣的学生在具备了比较深入的基础之后,可以作进一步的了解。2.1.4 Pascal语言中数据类型的分类Pascal语言的优点之一是有丰富的数据类型,按照其定义者的不同可分为下面几类,如表2-1所示。 整数类型 实数类型 系统预定义的数据类型 布尔类型(逻辑类型) 基本(标准)数据类型 字符类型 Pascal 枚举类型数据类型 子界类型 数组类型 用户自定义的数据类型 记录类型 构造型数据类型 集合类型 文件类型 指针类型图2-1 Pascal的数据类型2.2 基本数据类型本节介绍四种基本数据类型(Elementary Date Type),它们是整数类型、实数类型、布尔类型(逻辑类型)和字符类型。基本数据类型又称为标准数据类型(Standard Date Type),我国国家标准中将它改称为需求数据类型。基本数据类型是语言系统预先定义或规定的数据类型。2.2.1 整数类型整数类型(Integer Date Type)简称整型,在Pascal语言中用类型标识符integer表示整数类型。整型的数据可以是正整数、负整数和零,其中,正整数和零可以省略“+”号。1整数类型的值域任何计算机系统由于受机器字长的限制,它所能表示的整数只是数学中整数集合的一个有穷的子集合。其中,最大整数为maxint,它的值与具体机器的字长有关。一般地,若机器的字长为W时(假设用一位表示数符),由于整数在机器内采用二进制补码表示,因此,maxint=2w-1-1,其原因在“计算机组成原理”课程中将有详细解答。整数类型的值域为-maxint,maxint。2整数类型的数据允许进行的运算(1) 算术运算若a,b为整型数,两者进行算术运算如表2-1所示。 表2-1 整型数据的算术运算运算符含义运算规则结果的数据类型+加a+b,与数学相同integer-减a-b,与数学相同integer*乘a*b,与数学相同integerdiv 或Div整除求a div b的商的整数部分,若a,b同号,其结果为正,否则为负。integermod或Mod取余(模运算)求a除b后所得的余数。见说明。integer附注: 关于mod运算符(Operator),不同的Pascal语言版本的mod运算是有差别的。标准Pascal中规定,a mod b的结果都是正整数,而且要求b 0;Turbo Pascal语言中规定a、b可以为正数或负数,其运算结果的符号与被除数a相同。(2) 关系运算两个整型数据可以进行关系运算,其结果是一个布尔型的数据:true或者false。关系运算共有六种:=(等于)、(不等于)、(大于)、=(大于等于)、(小于)、=(小于等于)。例如, 8 9的结果为true; 3 9的结果为false。2.2.2 实数类型实数类型(Real Date Type)简称实型。在Pascal语言中用类型标识符real表示实数类型。整型的数据可以是正、负实数和实数零,其中,正实数和零可以省略“+”号。实数在机器内的表示形式总是用浮点数的表示方法来实现的。1实数类型的值域在数学中,实数是一个无穷的连续集合。但是,Pascal语言中实数类型的数据只能是数学中实数的一个有穷的子集合,这是因为受计算机系统字长的限制。不同的计算机系统,机器的字长不同,表示实数的方式不完全相同(虽然都用浮点数方式表示),表示实数在精度上受限制,实数类型数据的值域也就不尽相同,用数轴表示如图2-1所示。 A E C D F B 上溢区 0.0 上溢区 下溢区 图2-2 实数类型的数据的值域2实数类型的数据允许进行的运算(1) 算术运算若a,b至少有一个为实型数据,两者进行算术运算的结果类型如表2-2所示。 表2-2 实型数据的算术运算运算符含义运算规则结果的数据类型+加与数学相同real-减与数学相同real*乘与数学相同real/除与数学相同real附注: 若a,b均为整型数据,则a/b的结果类型也是实型数据。(2) 关系运算两个实型数据,或一个为整型数据而另一个是实型数据,均可以进行关系运算,其结果是一个布尔型的数据:true或者false。关系运算共有六种:=(等于)、(不等于)、(大于)、=(大于等于)、(小于)、=(小于等于)3为什么把数区分为整数类型和实数类型?虽然在数学意义上整数是实数的一个子集,但是,在Pascal语言中还是将整数所属的整型类型从实数所属的实型类型中独立出来,这是为什么呢?首先,将两者分离出来,在机器中分别采用不同的表示方法,使它们分别表现出不同的特点,便于根据实际问题编写高质量的程序。整型数据采用定点方式表示,优点是精确而且运算快速,缺点是数据的表示范围小;实型数据采用浮点方式表示,优点是其数据的表示范围比整数类型的数据的表示范围大得多(这给计算带来了很大方便),缺点是不精确而且运算速度较慢。其次,便于编译程序生成高效的目标代码;第三,它符合人们的日常思维习惯。2.2.3 布尔类型布尔类型(Boolean Date Type)又被称为逻辑类型,在Pascal语言中用类型标识符boolean表示布尔类型。1布尔类型的值域布尔类型的数据仅有两个:true(真)和false(假)。2布尔类型的数据允许进行的运算(1) 逻辑运算若a,b为布尔型数据,两者进行逻辑运算的结果类型如表2-3所示。表2-3 布尔型数据的逻辑运算aba and ba or bnot afalsefalsefalsefalsetruefalsetruefalsetruetruetruefalsefalsetruefalsetruetruetruetruefalse(2) 关系运算在Pascal语言中,布尔类型是有序类型,并且规定false true。因此,两个布尔类型数据可以进行关系运算,其结果是一个布尔型的数据:true或者false。关系运算一共有六种:=(等于)、(不等于)、(大于)、=(大于等于)、(小于)、=(小于等于)。例如,true false 的结果为true。2.2.4 字符类型计算机系统所处理的绝大多数数据是以字符形式输入/输出的。各种程序设计语言的编译程序通常都能自动将以字符形式输入/输出的数据与其它数据类型进行转换,但在许多情况下,需要程序员在设计程序时,直接处理字符数据。字符数据类型是构成字符串类型的基础。所谓字符串类型实际上是标准Pascal语言中的压缩的字符数组类型,Turbo Pascal语言中引入了专门的字符串数据类型。字符数据类型(Character Date Type)简称字符型,在Pascal语言中用类型标识符char 表示字符类型。在程序中,用单引号将字符类型数据的集合中的一个字符括起来以表示字符类型的数据值,也称字符常数,如A、a。注意,用单引号括起来的字符序列被称为字符串,也称字符串常数,如Ab、abc等。字符串不是字符型数据,它是字符型的一种扩展数据类型,我们将在第六章介绍。1字符类型数据的值域2字符类型数据允许进行的运算关系运算在Pascal语言中,字符类型是有序类型(即该类型的数据是有顺序的)。ASCII码字符集中字符的顺序规定如下: 0-9十个数字字符的ASCII码值依次增大; A-Z二十六个大写英文字母的ASCII码值依次增大; a-z二十六个小写英文字母的ASCII码值依次增大; 在ASCII码字符集中数字、大写英文字母、小写英文字母的ASCII码值依次增大。两个字符型数据可以进行关系运算,其结果是一个布尔型的值:true或者false。关系运算共有6种:=(等于)、(不等于)、(大于)、=(大于等于)、(小于)、 9)(y 1)就是一个关系表达式。关系表达式运算的规则如下:(1) 6种关系运算符( =、=、= )属于同一优先级的运算符,按照“从左到右”的次序进行;(2) 关系运算符的优先级低于算术运算符。(3) 运算符的优先级次序是: not;*,/,div,mod,and;+,-,or;关系运算符=、=、 9) and (y 1) or (not (x = y)就是一个布尔表达式。布尔表达式运算的次序如下:(1) 首先计算算术表达式的值;(2) 其次计算关系表达式的值;(3) 最后进行布尔运算。布尔运算符的运算次序依次为:not,and,or。例如,若变量x和y的值分别为3和8,可如下计算布尔表达式(x+1)9) and (y1) or (not(x=y)的值。根据布尔表达式运算的规则,上述布尔表达式的计算过程及结果如下: (x+1)9) and (y1) or (not (x=y) 49 not false false and true false or true true注意: 在计算布尔表达式的值时,运算对象的类型要匹配,否则可能出错。布尔表达式的值的数据类型为布尔型。最后,为了便于书写程序,对于表达式应该注意以下几点:(1) 所有表达式必须以线性形式写出。因此,分子、分母、指数、下标等都必须写在同一行上。(2) 表达式中的每个变量必须预先定义了值。(3) 两个运算符不能连写;例如,写法2 * - x + 1是错误的,而应该写成 2 *(- x)+ 1。(4) 函数的自变量可以是任意表达式,并且函数的自变量一定要写在括号中。(5) 表达式中乘法符号不能省略。例如,若表示数学中的2x + 1,则应该写成2 * x + 1。(6) 书写表达式时,若运算符的优先级不清楚,应该使用圆括号加以明确。(7) 两个关系运算符不得连用。例如,若表示数学中的 1 x 10,则应该写成 (1x) and (x 10),不能用1 x 10表示。2.6 数据类型的自动转换通过本章前面几节的介绍,我们知道,类型是数据的一个非常重要的特征。在Pascal语言中,每个常量、变量、函数、表达式等实体(Entity)都有其类型。对于任何一个Pascal语言的程序,在编译时编译程序均要对程序中有类型的实体依据它出现的位置和环境进行类型检查(Type Checking),检查实体类型的合法性和合理性。类型转换(Type Conversion)是一种一元运算,它把一种类型的数据对象作为运算对象转换成等值的另一种类型的数据作为结果。Pascal语言在设计时提供了类型转换的功能,它有两种方法。(1) 显式转换(Explicit Conversion)。Pascal语言提供了标准类型转换函数,用户可以显式地进行类型转换。例如,把实数类型转换为整数类型的标准函数trunc(截尾函数或取整函数)和round(舍入函数),这种方式由程序员自己在程序设计时使用。(2) 隐式转换(Implicit Conversion)。Pascal语言允许在类型不一致的情况下,由编译系统自动进行类型转换,即隐式转换。例如,在Pascal程序中,若一个算术运算的两个运算对象分别为实数类型和整数类型时,那么相应的算术运算在执行之前系统会先把整数类型数据转换为实数类型的数据,然后才进行运算。2.7 数据类型的等同和相容数据类型之间的关系是Pascal语言的一个重要问题。通过前几节的介绍,我们知道,当不同类型的数据进行混合运算时,都要先进行类型检查,以判断待进行运算的数据的类型是相同、相匹配还是不同。若相同,则继续进行运算,否则就进行出错处理或进行必要的类型转换。那么,究竟什么样的两个类型才是一致的呢?什么样的两个类型才是相匹配或相容的呢?针对这个问题,标准Pascal在数据类型之间定义了三种关系:一致、相容和赋值相容。2.7.1 数据类型的等同性若满足下列条件之一,则称变量的类型是等同的:(1) 不同的变量在同一说明中使用相同的类型标识符说明;(2) 不同的变量在不同的变量说明中使用相同的类型表识符说明;(3) 变量说明中,虽类型标识符不同(如T1和T2),但它们已经被一个形如T1=T2的说明定义为等同。数据类型之间的等同性关系被视为是数据类型的一致性(Consistency)关系,一致性关系是对称关系。例如,type T1=1.10; 定义了一个子界类型T1T2=T1;T3=1.10; 定义了一个子界类型T3var x,y:T1;z:T1;w:T2;m:T3;在该例中,根据变量类型的一致性定义可知,x,y,z,w的类型是一致的,m 与x,y,z,w的类型是不一致的。2.7.2 数据类型的相容性若变量V1和V2满足下列条件之一,则称其类型是相容的:(1) V1和V2的类型是等同的非结构类型;(2) 一个类型是另一个类型的子类型,或两个类型是同一个宿主类型的子类型;(3) 一个类型是子界类型,另一个为基类型,且这个子界类型值的集合是另一个基类型值的集合的子集合;(4) V1和V2是基类型相容的集合类型或数组类型;(5) V1和V2是长度(元素个数)相同的字符串类型;(6) 整型和实型。数据类型之间的相容性关系也被视为是数据的一致性关系,一致性关系是对称关系。例如,type T4=array 1.10 of real; 定义了一个数组类型T4T5=10.20; 定义了一个子界类型T5T6=15.30;T7=set of T5; 定义了一个集合类型T7T8=set of T6;var b1,b2:real;b3,b4:T4;b5:integer;b6:T5;b7:T6;b8:T7;b9:T8;b10:packed array 1.20 of char; 定义了一个字符串类型的变量b10b11:packed array 1.20 of char;在该例中,根据变量类型的相容性定义可知,变量b1,b2是一致的非结构类型,它们是类型相容的;变量b3,b4的类型相同,所以也是类型相容的。b5,b6尽管类型不相同,但它们是类型相容的,满足相容性定义的条件(3);同理,b5和b7也是类型相容的;b8和b9虽然都是由子界类型定义的集合类型,但它们依然是类型不相容的,因为T5和T6是两个不相容的子界类型;b10和b11是类型相容的,它们在不同的说明中使用了相同的类型说明;理论上,b5和b1也是类型相容的,但实际上,两者是否相容要视具体的编译系统规定。通常,两者被认定是相容的,但不是一致的,允许两类型的数据之间进行类型转换。关于子界类型、集合类型、字符串类型packed array 1.20 of char 的讨论详见第六章。由2.7.1和2.7.2的介绍可知,数据类型的一致性比其相容性要严格。2.8* 计算机科学与技术学科中核心概念讨论之一抽象概念抽象(Abstract)是一种思维模式,是哲学和数学的全部基础,同时,它也是人类认识世界所使用的最基本、最有力的思维方式之一。所谓抽象,包含下面三方面的含义和意义:一是强调对象的主要部分,突出本质属性,忽略次要部分,为形成各种概念、数学模型等提供帮助,有助于人们理解对象;二是从一类对象中抽象出覆盖这类对象的概念、通用模型,可以有效地实现对一类对象的分类。例如,前面所述的标准函数库中的标准函数和Pascal语言中用户自定义的函数或过程就属于这种抽象;三是通过对处理对象的属性和行为进行分层,把处理的对象分割开来,并尽量减少它们之间的广泛、无序的联系,进而建立有序的联系。例如,动物的分类过程就属于这种抽象,有助于分类处理对象。抽象是计算机科学与技术学科的核心概念之一,它在程序设计活动中普遍存在,我们常常无意识地使用它。例如,变量是计算机存储单元或寄存器的抽象。流程图(Flowchart)是程序语句级别控制结构的抽象。程序设计语言一般都从以下两个方面支持了抽象概念:首先,每一种语言都向用户提供了比基本计算机硬件更简单、更易直接使用且功能更强大的虚拟计算机(Virtual Computer)系统,每一种语言都提供了虚拟计算机系统上表达计算的抽象概念集合,如有关说明、语句、表
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 保密外包合同样本
- 全合同标准文本合同标准文本
- 全职保姆合同标准文本
- 上门收车合同样本
- 个人屋顶维修合同标准文本
- 保姆中介合同正式合同样本
- 乌克兰玉米进口合同样本
- ktv饮料合同标准文本
- 会议委托 培训合同样本
- 仓储外包协议合同标准文本
- Unit 2 Go for it!Understanding ideas教学设计 -2024-2025学年外研版(2024)七年级英语下册
- 浙江省金丽衢十二校2025届高三下学期二模试题 地理 含解析
- 【+初中语文+】《山地回忆》课件+统编版语文七年级下册
- 2025-2030中国建筑装饰行业十四五发展分析及投资前景与战略规划研究报告
- (一模)2025年广东省高三高考模拟测试 (一) 语文试卷语文试卷(含官方答案)
- 管理学基础-形考任务一-国开-参考资料
- 3.3 服务业区位因素及其变化-以霸王茶姬为例【知识精研】同步教学课件(人教2019必修第二册)
- 2024年员工知识产权与保密协议范本:企业知识产权保护实务3篇
- JGJ46-2024 建筑与市政工程施工现场临时用电安全技术标准
- GB 17790-2008家用和类似用途空调器安装规范
- 土地评估剩余法测算表
评论
0/150
提交评论