第02章 数据类型PPT讲稿.ppt

上传人:石*** 文档编号:49771789 上传时间:2022-10-10 格式:PPT 页数:92 大小:6.09MB
返回 下载 相关 举报
第02章 数据类型PPT讲稿.ppt_第1页
第1页 / 共92页
第02章 数据类型PPT讲稿.ppt_第2页
第2页 / 共92页
点击查看更多>>
资源描述

《第02章 数据类型PPT讲稿.ppt》由会员分享,可在线阅读,更多相关《第02章 数据类型PPT讲稿.ppt(92页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第第0202章章 数据类型数据类型第1页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 第一节第一节 引言引言1.数据类型的作用实现了数据抽象使程序员从机器的具体特征中解脱出来提高了编程效率2.数据类型的分类内部类型(built-in):语言定义的自定义类型(user-defined):用户定义的第2页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 第二节第二节第二节第二节 内部类型内部类型内部类型内部类型一.内部类型的特点内部类型内部类型反映基本硬件特性在语言级,内内部部类类型型标识共用某些操作的数据对象

2、的抽象表示抽象表示抽象表示“2525”被映象成被映象成“0001100100011001”,整数加法被映,整数加法被映射成机器的定点加。射成机器的定点加。整型表示能实现整型表示能实现+、-、*、/等定点操作的数据对象的集等定点操作的数据对象的集合合第3页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 二二二二.内部类型的优越性内部类型的优越性内部类型的优越性内部类型的优越性1.基本表示的不可见性基本位串对程序员是不可见的。优点:u导致不同的程序设计风格u可写性u可读性u可修改性例:例:25+9=3425+9=34 基本表示基本表示00011001+0

3、000100100011001+00001001 结果结果0010001000100010第4页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 2.编译时能检查变量使用的正确性 进行静态类型检查,如非法运算,形实参类型匹配3.编译时可以确定无二义的操作超超载载(多态)的概念:运算符的意义依赖于操作数的类型。如“+”可以表示整数加或实数加编译时,可拒绝混合运算,或提供类型转换指令合理地使用超载,可以提高语言的可读性和可用性4.精度控制 可以通过数据类型显式定义数据的精度第5页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年

4、10月10日 第三节第三节第三节第三节 用户定义类型用户定义类型用户定义类型用户定义类型许多语言除了定义内部类型外,还允许程序员定义新新新新的的的的数数数数据据据据类类类类型型型型,规定基本数据对象的聚合,乃至聚合的聚合。How to define?第6页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 1.1.1.1.笛卡尔积笛卡尔积笛卡尔积笛卡尔积定定定定 义义义义:N个集合A1,A2,An的笛笛卡卡尔尔积积表示为A1A2An,它 是 一 个 集 合,其 元 素 为(a1,a2,an),其中 aiAi在语言中对在语言中对应什么构造应什么构造?第7页

5、,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 任意多边形任意多边形任意多边形任意多边形integer real表示为边数每边边长在COBOL和PASCAL中称为记录记录;在ALGOL中称为结构结构。注意:语言把笛卡尔积数据对象看成由若干个域组成,每个域有一个唯一的名字;通常用域名来选取域,对它进行修改;例:对于如前定义的多边形,有两个域no-of-edges和edge-size,若t1是一个边长为7.53的等边三角形,则可以写为:t1.no-of-edges=3;t1.no-of-edges=3;t1.edge-size=7.53;t1.edge-

6、size=7.53;第8页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 2.2.有限映像(射)有限映像(射)定定义义:从定义域类型DT(domain type)的值的有限集合,到值域类型RT(range type)的值的有限集合的函数称为有限映像(射)有限映像(射)。在语言中对在语言中对应什么构造应什么构造?第9页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 有限映像(射)的一些特点有限映像(射)的一些特点u在高级语言中通常体现为数组构造数组构造数组构造数组构造;u值域对象通过下标选取。u下标越界会出错

7、,动态检查u下标可用来选取值域的多个元素(APL、ALGOL、ADA)uSNOBOL4的ARRAY构造符并不要求值域集的所有元素是同一类型的uDT到相应值的特定子集的绑定策略:编译时绑定 (静态数组)对象建立时绑定(执行到分程序时,动态数组)对象处理时绑定(对APL,子集范围可变)例如:PASCAL中的数组说明:var a:array1.50 of charvar a:array1.50 of char可看成是从1到50的整数到字符集的有限映像第10页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 3.3.序列序列定定义义:序列由任意多个数据项组成,

8、这些数据项称为该序列的成分,且类型相同(记为CT)。串的一般操作有4种:q连接q首项选取q尾项选取q子串例:串是从所周知的序列,其成分类型为字符;顺序文件的思路也来自序列的概念。第11页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 4.4.递归递归定定定定义义义义:若数据类型T包含属于同一类型T的成份,那么类型T称为递归类型递归类型递归类型递归类型。递归类型的特点:1)允许在类型定义中使用被定义类型的名字2)指针是建立递归数据对象的重要手段例:二叉树可通过递归类型来定义。它的左子树和右子树分别是另一棵二叉树。第12页,共92页,编辑于2022年,星

9、期一电子科技大学计算机科学与工程学院2022年10月10日 5.5.5.5.判定或(判定或(判定或(判定或(discriminated uniondiscriminated uniondiscriminated uniondiscriminated union)定定义义:判判定定或或是一个选择对象结构的构造机制,规定在两个不同选择对象之间作出适当的选择;每一选择对象结构称为变体。COBOL中的一个记录说明:01 EMPLOYEE_RECORD05 NAME 05 SALARY05 HOUR_RATE REDEFINES SALARY例如:PASCAL和ADA中的变体记录;C和ALGOL68中的

10、联合。第13页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 定定义义:类型T的元素所有子集的集合,称为幂幂集集,记为Powerset(T),T称为基类型。幂集类型的操作:u由于具有该类型的变量的值是一个子集,因此它们的基本操作是集合的操作,比如,联合联合,与与,以及测试某个元素是否在一个集合中等。6.6.幂集幂集第14页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 7.7.小结小结u程序语言允许程序员以上六种机制来定义复杂的数据对象(新的类型);u新的类型可以通过非显式的方式说明;u也可通过显式的方式说

11、明。u显示定义有如下优点:可读性 (选择名字)可修改性 (不修改变量说明)可分性 (重复使用)一致性检查(参考第8节)例如:var a:record x:integer;y:array1.10 of char end例如:type complex=record radius:real;angle:real;endvar c1,c2,c3:complex;第15页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 第四节第四节 PASCAL PASCAL语言数据类型结构语言数据类型结构1.非结构类型u内部类型integer,real,boolean,cha

12、ru有序类型每一元素都有唯一的前驱和后继如:整型,布尔型,字符型u定义新的有序类型的方法枚举型 其值不能直接读/写子界型 动态检查范围例:type day=(sunday,monday,tuseday,wednesday,thursday,friday,saturday);/枚举type work_day=monday.friday;/子界var class_day:work_day;class_day:=succ(class_day);/后继引入新的数据类型day;定义了day由Sunday等7个元素组成;定义了元素之间的顺序;隐含对这个新类型变量可进行赋值和比较操作;引入新的数据类型wor

13、k_day;求class_day的后继;第16页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 2.2.聚合构造聚合构造1)数组构造构造符ARRAY允许程序员定义有限映像;数组构造的一般形式为:arrayt1t1 of t2t2元素(值域)的类型;下标(定义域)的类型;注意:PASCAL把下标类型不同的数组看成不同的类型type a1=array1.50 of integer;type a2=array1.70 of integer;=?第17页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 !这样定义的数

14、组类型会产生严重问题,使得形式参数定义的数组和实际参数的数组类型不一致;解决办法解决办法:引入符符符符合合合合数数数数组组组组概念-维数相同,成分类型相同的数组;符合数组可以形、实参数匹配。例:procedure sort(var a:arraylow.high:integer of ctype);var i:integer;more:boolean;begin sortend sort第18页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 最后一点:PASCAL可以定义多维数组。type row=array-5.10 of integer;var

15、my_matrix:array3.30 of row;或var my_matrix:array3.30,-5.10 of integer;定义了一个二维整型数组第19页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 2)记录构造构造符RECORDRECORDRECORDRECORD用以定义笛卡尔积;一般形式为:Record field_1:type_1;field_2:type_2;field_n:type_n;end记录可以整体访问,也可用圆点“.”作为选择符访问单个的域;假设假设t t,p p是前面定义的多是前面定义的多边形,边形,t.no_of

16、_edges:=3;t.no_of_edges:=3;t.edge_size:=7.53;t.edge_size:=7.53;p:=t;p:=t;第20页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 PASCALPASCALPASCALPASCAL的变体记录的变体记录的变体记录的变体记录type dept=(house,sports,drugs,food,liquor);month=1.12;item=record price:real;case available:boolean ofcase available:boolean of truet

17、rue:(amount:integer;where:dept);falsefalse:(month_expected:month)end;变体记录item标识符域available,记录的判定成分注意:PASCAL允许程序员访问记录结构的所有域,包括标识符域。例如,如果i1和i2被说明,则可对它们进行如下操作:var i1,i2:item:i1.price:=5.24;i1.available:=true;i1.amount:=29;i1.where:=liquor;i2.price:=324.99;i2.available:=false;i2.month_expect:=8;第21页,共92

18、页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 程序的执行结果程序的执行结果priceavailableamountwhere5.24true29liquori1priceavailablemonth_expected324.99false8i2第22页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 变体记录的实现变体记录的实现u改变一个变体记录的标识符,在概念上建立了一个新记录;u变体记录在同一块存储区上重叠存放所有变体;u变体记录允许程序员根据每个变体的类型,以不同的观点来解释存储在该区域中的位串;比如在上例中

19、如果变量i1的域amount和where已经赋值,再置available为false来改变,然后再按month-expected的值来解释先前存储在amount中的值。PASCALPASCAL变体记录的缺点变体记录的缺点使用变体记录不安全u同一存贮区对应不同的名字和类型u编制程序依赖于实现u标识符域的标识符可省缺record price:real case boolean of true:(amount:integer;where:dept);false:(mouth_expected:month)end第23页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10

20、月10日 3)集合构造PASCAL语言的SET构造符是幂集构造受限制的形式,基类型只能是有序类型,而不能是实数、表或集合类型。例例:type vegetable=(bean,cabbage,carrot,celery,lettuce,onion,mushroom,zucchizi);var my_salad,leftover:set of vegetable;下列语句是合法的:leftover:=;my_salad:=carrot.onion;if not bean in leftoverthen my_salad:=my_salad+leftover;第24页,共92页,编辑于2022年,星

21、期一电子科技大学计算机科学与工程学院2022年10月10日 4)文件构造uPASCAL文件是任意类型的诸元素的序列;uPASCAL文件仅能顺序处理;u只能进行 PUT 和 GET 操作;例例:type pattern=record end;tape=file of pattern;var t1,t2:tape;Get操作把下一个元素读到缓冲区put操作把缓冲区中的元素附加到文件末尾第25页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 3.3.指针指针指指指指针针针针是PASCAL的第三类数据类型,是非结构的,可用来构造递归结构;指针可引用匿名数据对

22、象,这类对象由建立语句NEWNEW显示分配在堆堆上;空指针的值是nilnil;指针的操作:赋值赋值,比较比较(相等或不等)PASCAL指针只能指向匿名数据对象,不能指向在堆栈上分配的的单元。指针的例子:type tree_ref=binary_tree_node;binary_tree_node=record info:char;left,right:tree_ref end;var my_tree:tree_ref;my_tree:=nil;new(my_tree);my_tree.info:=symbol;my_tree.left:=nil;my_tree.right:=nil;第26页,

23、共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 Pascal类型非结构类型指针类型(递归)结构类型内部类型整型 实型字符型布尔型枚举类型子界类型记录类型(迪卡尔积)变体记录(判定或)数组集合文件4.4.小结小结第27页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 第五节第五节第五节第五节 Ada Ada Ada Ada语言数据类型结构语言数据类型结构语言数据类型结构语言数据类型结构1.标量类型:定义非结构类型u分类标量类型标量类型数字类型数字类型枚举类型枚举类型实型实型整型整型标量类型的值的集合是有序的,允

24、许关系运算也称离离离离散类型散类型散类型散类型第28页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 用户可以通过range来定义其它的整型uAda为实数设计了一组丰富灵巧的定义方法例:type TWO_DIGIT is rangerange 0.99;type FLOAT_1 is digitsdigits 10 rangerange 0.0.3.0;type FIT_PT is deltadelta 0.01 rangerange 0.00.100.01;type BOOLLEAN is(FALSE,TRUE);用户自定义标量类型用户自定义标量类

25、型第29页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 2.2.组合类型组合类型(1)数组u约束数组类型约束数组类型,有确定的下标界u非约束数组类型非约束数组类型非约束数组类型非约束数组类型,下标界可以动态变化type MONTH is(JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC);type YEARLY_PAY is array(MONTH)of INTEGER;type SUMMER_PAY is array(MONTH range JUL.SEP)of INTEGER;type SOME_P

26、ERIOD_PAY is array(MONTH range)of INTEGER;type INT_VERTOR is array(INTEGER range)of INTEGER;type BOOL_MAXTRIX is array(INTEGER range,INTEGER range)of BOOLEAN;注意:Ada数组类型由分量的类型,下标个数和下标类型来刻画。界的值不作为数组类型的一个成分。第30页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 非约束数组的非约束数组的界什么时间确界什么时间确定定?!问题u界的确定可在数据对象成为实体时

27、,或参数传递时完成SPRING_MONTH:SOME_PERIOD_PAY(APR.JUN);Z:INT_VECTOR(-100.100);W:INT_VECTOR(20.40);Y:BOOL_MAXTRIX(0.N,0.M);其中,界的值不一定静态给出function SUM(X:INT-VECTOR)return INTEGER;RESULT:INTEGER:=0;begin for I in XFIRST.XLAST loop RESULT:=RESULT+X(I);end loop;return RESULT;end SUM;可用不同大小的数组作为实参来调用该函数A:=SUM(Z)+S

28、UM(W);第31页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 u可以在过程的局部说明中说明一个数组,它的界依赖于一个参数TEMPORARY:INT_VECTOR(XFIRST.XLAST);uAda的串看成字符数组;STRING的预定义为:type STRING is array(POSITIVE range)of CHARACTER;u切片:用以选取一维数组若干个相继分量LINE:STRING(1.80);LINE(1.11):=(D,e,a,r,f,r,i,e,n,d);第32页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工

29、程学院2022年10月10日 (2)记录u说明的形式说明的形式typetype COORDINATE isis recordrecord X:INTEGER rangerange 0.100;Y:CHARACTER;end recordend record;uu支持筁卡尔积和判定或支持筁卡尔积和判定或支持筁卡尔积和判定或支持筁卡尔积和判定或注意:Ada的判定或是安全的。第33页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 判定或的例子判定或的例子type DEPT is(HOUSEWARE,SPORTS,DRUGS,FOOD,LIQUOR);typ

30、e MONTH is range 1.12;type ITEM(AVAILABLE:BOOLEAN:=TRUE)is record PRICE:REAL;case AVAILABLE of when TRUE=AMOUNT:INTEGER;WHERE:DEPT;when FALSE=MONTH_EXPECTED:MONTH end case;end record;判定式判定式的初值第34页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 判定或的例子(续)判定或的例子(续)PEACH:ITEM;ORANGE:ITEM(FALSE);COCA_COLA:

31、ITEM;COCA_COLA:=ORANGE;COCA_COLA:=(PRICE=1.99,AVAILABLE=TRUE,AMOUNT=1500,WHER=FOOD);COCA_COLA.AVAILABEL:=TRUE;判定式取省缺值TRUE判定式取值FALSE,运行时不能改变判定式没有显示约束,可以改变只有把记录作为一个整体,判定式的值才能改变单独对判定式赋值是不允许的第35页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 (3)访问类型u指针在Ada中称为访问类型,用于动态分配和释放数据;typetype BINARY_TREE_NODE;typ

32、etype TREE_REF is is accessaccess BINARY_TREE_NODE;typetype BINARY_TREE_NODE isis recordrecord INFO:CHARACTER;LEFT,RIGHT:TREE_REF;endend;uP.all代表整个结点Q.all=P.all指针对整个结点赋值第36页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 (4)子类型和派生类型u可以通过子类型来规定类型的一个特性;typetype FLAVOR isis(CHOCOLATE,MINT,PEATH,STRAWBERR

33、Y,VANILLA,BLUECHEESE,CATSUP,GARLIC,ONION);subtypesubtype ICE_CREAM_FLAVOR is rangeis range CHOCOLATE.VANILLA;subtypesubtype SMALL_INT isis INTEGER rangerange-10.10;subtypesubtype SMALL_POS_INTEGER isis INTEGER rangerange 1.10;subtypesubtype MY_INT_SET isis INTEGER rangerange A.B;注意:子类型继承基类型的所有特性,同时它

34、的值满足某个约束。第37页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 u子类型机制也可以用来约束数组类型;type MY_ORDERS is array(INTEGER range)of ICE_CREAM_FLAVOR;subtype MONTHLY_ORDERS is MY_ORDERS(1.31);subtype ANNUAL_ORDERS is MY_ORDERS(1.365);u可以使用子类型来冻结判定或类型的变量;subtype OUT_OF_STOCK is ITEM(FALSE);注意:子类型机制并未定义新类型,而派生类型派生类型

35、派生类型派生类型定义新类型。第38页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 u派生类型继承母体类型的所有特性,但是与母类型不同的类型;派生类型的一般说明形式:typetype is newis new type POSITIVE is 1.INTEGERLAST;type WEIGHT is new POSITIVE range 1.100;type LENGTH is new POSITIVE;第39页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 (5)属性uAda 的属性用来指定数据对象、类型

36、的特性;一个属性的值是用一个实体名后面跟着一个“”来表示。一般说明形式:一般说明形式:例如:INTEGERFIRSTINTEGERLASTuAda预定义了40多个属性,另外还允许提供与实现有关的属性。第40页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 Ada类型标量类型组合类型访问类型(递归)数值类型枚举类型数组类型(有限映象)记录类型(笛卡尔积)(判定或)预定义类型整型实型用户定义类型预定义类型字符型布尔型用户定义类型3.Ada3.Ada3.Ada3.Ada数据数据数据数据类型小结类型小结类型小结类型小结第41页,共92页,编辑于2022年,星

37、期一电子科技大学计算机科学与工程学院2022年10月10日 第六节第六节第六节第六节 C C C C语言数据类型结构语言数据类型结构语言数据类型结构语言数据类型结构1.非结构类型:u分为内部类型内部类型和用户自定义类型用户自定义类型u非结构内数类型有整型、实型和字符型类型类型类型标志符类型标志符数值范围数值范围占用字节数占用字节数基本型int-32768327672短整型Short-32768327672长整型Long-231(231-1)4无符号整型Unsigned 0655352无符号短整型Unsigned short0655352无符号长整型Unsigned long0(232-1)4各

38、类整型数据类各类整型数据类型的特性型的特性第42页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 u实型又称浮点型,其值是实数的一个子集,分为单精度和双精度两种类型u字符型数据的值是一个有限字符集的元素;在C语言中,int类型与char类型在存储中没有本质区别;-308308-103081030815168Double双精度型-3838-1038103874Float单精度型阶的范围数值范围能表示数值的有效位点用字节数类型标志符类型浮点型数据类型的特性浮点型数据类型的特性注意:C语言中没有布尔(bool)类型;0表示false,非0表示true。第4

39、3页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 用户自定义的非结构类型用户自定义的非结构类型u用户自定义的非结构类型在C语言中称为枚举类型(enum)enum bool false,true;或 typedef enum false,true bool;(1)定义了一个新类型bool(2)bool数据类型的取值为false和true(3)定义了一个顺序:falsetrue(4)可对这个类型的变量进行赋值和比较等操作enum bool false,true;enum bool b;b=true;if(b=true)第44页,共92页,编辑于2022

40、年,星期一电子科技大学计算机科学与工程学院2022年10月10日 2.2.聚合构造聚合构造(1)数组数组u实现有限映像u说明的格式 常量表达式例如:intint intarr5;charchar chararr255;boolbool boolarr3;命名为intarr的数组包含5个元素,类型为整型命名为chararr的数组包含255个元素,类型为字符型命名为boolarr的数组包含3个元素,类型为字符型注意:C语言中数组的下标总是从0开始。第45页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 u可以定义多维数组u说明的格式 常量表达式常量表达式

41、例如:floatfloat farr34;charchar c222;定义了一个实型的2维数组定义了一个字符型的3维数组uC语言的数组按行存放u对数组名的处理相当于指针数组a34的存放次序为:a00 a01 a02 a03 a00 a01 a02 a03 a10 a11 a12 a13 a10 a11 a12 a13 a20 a21 a22 a23 a20 a21 a22 a23 int a10;int*pa;pa=a;!合法第46页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 (2)结构结构结构结构uC语言中构造符struct支持笛卡尔积u说明的

42、格式struct struct 成员表列成员表列;u成员表列由若干个成员类型说明组成:;例如:struct struct student int int num;char char name2;2;char char sex;int int age;float float score;char char addr30;30;第47页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 注意:C语言中结构不能整体赋值和输出,只能对其中的各个成员分别进行操作。u在内存中,结构的各成员依次存放;u结构体可以嵌套;例如:struct struct student

43、me,you;me,you;strcpy(me.name,strcpy(me.name,“johnjohn”););me.sex=me.sex=M M;me.age=21;me.age=21;me.score=80;me.score=80;strcpy(me.addr,strcpy(me.addr,“UESTCUESTC”););例如:struct struct student int int num;char char name2;2;char char sex;struct date birthday;struct date birthday;第48页,共92页,编辑于2022年,星期一电

44、子科技大学计算机科学与工程学院2022年10月10日 (3)联合联合uC语言中构造符union(联合)支持判定或联合结构举例:union union data int int i;char char c;float float f;union data union data a,b,c;存放在同一位置;长度为最长成员的长度注意:(1)C语言中联合中没有标识符域;(2)单元中的值的类型,取决于程序员的使用;(3)程序的编制依赖于实现;a.i=2;a.c=s;a.f=3.14;第49页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 (4)文件文件文件文件

45、uC语言中文件是一个字符序列;u分为ASCII码文件和二进制文件;C语言中文件的预定义格式如下:typedef struct typedef struct int int _fd;int int _cleft;int int _mode;char char*_next;char char*_buf;FILE;FILE;文件名缓冲区中剩下的字符数文件操作模式下一个字符指针缓冲区指针注意:C语言中的文件操作比较丰富,打开、关闭、定位、读、写等;除了顺序读写以外,还可以随机读写;第50页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 3.3.指针指针uC语

46、言中的指针指针指针指针是第三种数据类型,是非结构类型;u可用来构造结构类型;u支持递归;利用指针定义递归结构的例子:struct tree struct tree char char day;struct tree struct tree*lchild;struct tree struct tree*rchild;struct tree struct tree*my_tree;注意:C语言中没有空指针,对指针赋0值来表示空;第51页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 4.4.空类型空类型uC语言中有一种特殊的数据类型void,称为空类型空

47、类型;u是一种非结构类型;u有两个主要用途:用来表示一个无返回值的函数 用来表示不确定类型的指针例如:voidvoid mainmain()int i;i=1;例如:voidvoid*p;表示这是一个指针,它的值是一个地址,但不指明p指向的值是什么类型。第52页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 4.C4.C4.C4.C数据类型小结数据类型小结数据类型小结数据类型小结C数据类型非结构型结构型指针类型(递归)内部类型枚举类型数组类型(有限映象)联合类型(判定或)结构类型(笛卡尔积)(文件)(序列)整型空类型实型字符型单精度型双精度型第53页

48、,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 第七节第七节第七节第七节 抽象数据类型抽象数据类型抽象数据类型抽象数据类型u用户定义类型与内部类型的异同都建立某种基本表示的抽象每一类型都关联一组操作内部类型隐蔽了基本表示,不能对它的成分进行操作;用户定义类型具有更高级别的抽象,可以对其基本表示的成分进行操作。例如:integer是位串的抽象;reg_polygon是记录的抽象!问题如何提供更好的抽象来达到信息隐蔽、重用的目的?即程序员在定义的抽象中,应该对用到这个对象的用户隐蔽尽可能多的信息。软件重用、模块重用可以减少许多重复工作,达到提高软件开发的

49、效率第54页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 u抽象数据类型的定义满足下述特性的用户定义类型称为抽象数据类型抽象数据类型抽象数据类型抽象数据类型:在实现该类型的程序单元中,建立与表示有关的基本操作;对使用该类型的程序单元来说,该类型的表示是隐蔽的。抽象数据类型隐蔽了表示的细节,通过过程来访问抽象数据对象。对象的表示是被保护的,外界不能对它进行直接操作。对抽象数据类型的实现进行修改,只能在描述这个实现的程序单元中。第55页,共92页,编辑于2022年,星期一电子科技大学计算机科学与工程学院2022年10月10日 1.SIMULA 67的类

50、机制u类的说明 ;包括类名和形式参数是传统的分程序,可包含变量、过程和类的局部说明,以及一些执行语句例:class complex(x,y);real x,y;begin real angle,radius;radius:=sqrt(x*2+y*2);if abs(x)epsilon then begin if abs(y)epsilon then angle:=pi/2 else angle:=3*pi/2 end end else angle:=arctan(y/x)end complex类头类头类头类头,定义了一个复数complex类型,x,y代表两个笛卡尔坐标值。类体类体类体类体,an

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁