您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > C语言程序设计ppt-第10章-01
2020/1/28华中科技大学计算机学院1C语言程序设计TheCProgrammingLanguage华中科技大学计算机学院曹计昌2020/1/28华中科技大学计算机学院2第10章结构与联合结构与联合都属于C的构造类型。对结构与联合而言,都需要先定义结构类型和联合类型,然后再根据已经定义的结构类型来定义对应的结构变量以及用已经定义的联合类型来定义对应的联合变量。本章介绍:1.结构类型和结构变量的声明,结构类型的使用;2.结构类型的指针;3.有结构类型参数的函数;4.结构数组;5.字段结构;6.以及联合类型和联合变量的定义,联合变量的使用;7.动态存储分配,动态数组设计;8.以及与动态存储分配相关的链表、栈、树等动态数据结构。2020/1/28华中科技大学计算机学院310.1结构概述结构产生的背景:程序设计语言的发展总是与数据类型的发展、丰富、以及完善联系在一起的。变量可以认为是内存单元的有名表示。变量在处理大量同类型数据时就暴露出名字多,不利于用循环处理等一系列不足。数组则是处理大量同类型数据的有力工具。通过数组名和下标,可以方便的描述大量同类型数据,并且可以充分利用循环来进行快速处理。问题:如何将类型不同而关系又非常密切的数据项组织在一起,统一加以处理?–结构产生的背景!2020/1/28华中科技大学计算机学院4描述全班学习情况的实际问题问题:描述全班、全年级每位同学的英语、高等数学、普通物理、C语言程序设计等课程的学习情况,需要学号、班级、姓名、以及各科成绩等属性来描述。特点:学号、班级、姓名往往用字符数组描述、性别往往用字符型描述,各科成绩则往往用整型或浮点型描述。困难:对这些大量不同类型数据项,用数组已经不能有效解决问题。新的需求:如何将不同的数据类型的成员(即数据项)组织起来,形成新的构造类型就是结构产生的实际背景。2020/1/28华中科技大学计算机学院5设计和使用结构类型的方法结构类型是一种能够将不同数据类型的成员组织起来所形成的一种新的构造类型。结构类型的设计:在程序设计中,要先确定需要被组织的数据类型,由这些数据类型说明的标识符称为结构类型的成员;通过定义结构类型将这些成员组织起来,形成新的数据类型。结构类型的使用:通过结构类型来声明对应的结构变量、结构指针、或结构数组。对结构变量、结构指针、或结构数组中成员的操作将最终完成所需要解决的计算任务。2020/1/28华中科技大学计算机学院6注解有些教材中将结构类型称为结构体、聚合类型。C中的结构在其它程序设计语言中往往称为记录(record)。以记录为基础,可以进一步构造文件、基于记录的数据库、以及许多动态数据结构。2020/1/28华中科技大学计算机学院710.2结构类型声明和结构变量的声明及初始化在声明结构类型时,需要规定该结构类型包括那些成员,要说明成员的数据类型和名字。声明结构类型是创建用户自定义数据类型的过程,它并不创建对象,即不进行存储分配。声明结构类型的一般形式是:struct结构类型名{成员声明表};其中:struct是关键字,用以说明结构类型。结构类型名是该结构类型的名字,它应该是C的合法标识符。一对花括号界定的是成员声明表。2020/1/28华中科技大学计算机学院8成员声明表的一般形式数据类型1成员名11,…,成员名1k;…数据类型n成员名n1,…,成员名nm;数据类型1和数据类型n可以相同,也可以不同。每个声明允许用逗号为分隔符说明多个同类型的成员。结构类型的声明应该以分号结束。2020/1/28华中科技大学计算机学院9例:学生学习情况的结构类型声明structstu_study{/*stu_study是结构类型名*/charnum[12];/*学号成员,字符数组类型*/charname[9];/*姓名成员,字符数组类型*/charsex;/*性别成员,字符类型*/intEnglish;/*英语成员,整型*/intMath,Physics,C;/*数学、物理、C成员,整型*/};该声明定义了一个structstu_study的结构类型.stu_study是结构类型名,用以区分其他类型的结构。structstu_study实际上是一种新的构造类型名,可用于说明structstu_study类型的结构变量。其在语法方面的作用与int,char等一样,起类型说明符的作用。num、name、sex、English、Math、Physics、C是成员,它们被组织到一个新的structstu_study的结构类型之中。2020/1/28华中科技大学计算机学院10C关于结构类型声明的规定(1)同一结构内的成员不能同名。但成员可以与结构外部的变量同名,也可以与其他结构的成员同名。(2)成员的数据类型可以是除本结构类型以外的其他任何类型。(3)结构类型可以嵌套定义,形成嵌套结构。(4)结构类型是包含一系列成员的构造类型,成员在内存中连续存放,成员存储分配按照结构声明体中不同声明从上向下,同一声明中从左向右的顺序进行,每个成员所占存储空间的大小由其类型确定。(5)一般而言,成员所占存储的大小必须在结构类型声明时确定。即C不支持动态结构类型。注:根据ISO/IEC9899标准,作为一个特例,结构类型中最后一个成员可以具有不完全的数组类型,使得C可以在有限程度上支持动态结构类型。2020/1/28华中科技大学计算机学院11含柔性数组成员(flexiblearraymember)的声明structdy_stu_study{/*dy_stu_study是结构名*/charnum[12];/*学号成员,字符数组类型*/charname[9];/*姓名成员,字符数组类型*/charsex;/*性别成员,字符类型*/intscore[];/*各科成绩的柔性数组成员,动态整型数组*/};可以通过动态存储分配为score数组指定大小。如果score数组依次存放英语、数学、物理、C语言4门课程的成绩,在16位机中可以为其分配42=8个字节的存储;在32位机中则需要为其分配44=16个字节的存储。称这种结构类型为有限动态结构类型。2020/1/28华中科技大学计算机学院12例10.1声明一个同学通讯录的结构类型structaddress_book{charname[9];/*姓名,字符数组类型*/intage;/*年龄,整型*/chardepartment[50];/*工作部门,字符数组类型*/charaddress[80];/*家庭住址,字符数组类型*/charphone_number[16];/*电话,字符数组类型*/charmobile[12];/*手机号码,字符数组类型*/charemail[50];/*电子邮箱,字符数组类型*/};2020/1/28华中科技大学计算机学院13例10.2声明一个只含有整数类型和指向自身实例指针的结构类型。structint_node{intnumber;structint_node*next;};在该结构类型中:number被称为数据域,而next被称为指向自身结构实例的指针域。2020/1/28华中科技大学计算机学院1410.2.2结构变量的声明结构类型的变量往往简称为结构变量,有时甚至简称为结构。结构变量的声明有两种方式:1.一是结构类型和结构变量分别声明。即:先声明结构类型,再声明结构变量。2.二是结构类型和结构变量同时声明。即:在声明结构类型的同时声明结构变量。2020/1/28华中科技大学计算机学院151.结构类型和结构变量分别声明声明结构变量的一般形式是:存储类型struct结构类型名结构变量列表;其中,存储类型可以是extern、static、auto、register,分别表示外部结构变量、静态结构变量、自动结构变量(或局部结构变量)、以及寄存器结构变量。结构变量列表由标识符序列组成,两个标识符之间必须用逗号分隔,每个标识符对应一个结构变量。结构变量的声明应该以分号结束。2020/1/28华中科技大学计算机学院16结构变量声明语句structstu_studyZhang;就声明了一个structdy_stu_study类型的结构变量Zhang。而结构变量声明语句:structaddress_bookJohn,Mary,Jones;则声明了三个structaddress_book类型的结构变量John,Mary和Jones。2020/1/28华中科技大学计算机学院17例10.3用存储类型修饰结构变量声明的例子。(1)autostructint_nodea,b,c;(2)registerstructaddress_bookaddr;(3)staticstructint_nodex,y;(4)externstructstu_studyWang;2020/1/28华中科技大学计算机学院182.结构类型和结构变量同时声明其一般形式为:存储类型struct结构类型名{成员声明表}结构变量列表;其中,结构变量列表由标识符序列组成,两个标识符之间要用逗号分隔,每个标识符对应一个结构变量。并且可以通过存储类型修饰结构变量列表中的结构变量。2020/1/28华中科技大学计算机学院19结构类型和结构变量同时声明的例子staticstructpoint{intx;inty;}p1,p2;它在声明结构类型structpoint的同时,声明了structpoint类型的静态结构变量p1和p2。P1,p2具有静态生存期.structpoint结构类型可以用来表示平面上的一个点,成员x、y分别表示平面上点的横坐标和纵坐标。结构变量p1和p2则分别表示平面上的两个点。2020/1/28华中科技大学计算机学院20无名结构类型一般称省略结构类型名的结构类型为无名结构类型。如:struct{intx;floaty;}u,v;它声明了结构变量u和v,结构变量u、v分别都有一个整型成员x,一个浮点型成员y。由于省略了结构类型名,在后续程序中不能再声明类似类型的变量。2020/1/28华中科技大学计算机学院213.用typedef定义结构类型名用typedef可以为一个已知的结构类型进行命名。这种方法在程序设计中使用得非常普遍。例如:typedefstructpoint{intx;inty;}point;它将structpoint结构类型命名为point,2020/1/28华中科技大学计算机学院22用point来表示structpoint结构类型的声明pointu,v;它与structpointu,v;等价。用typedef还可以为一个无名结构类型进行命名。如:typedefstruct{intx;inty;}point;则point就代表有两个整型成员x,y的结构类型。也可以用:pointu,v;说明结构变量u和v。2020/1/28华中科技大学计算机学院2310.2.3结构变量的初始化在声明结构变量的同时可以对其进行初始化。初始化所用的初值由初值表提供,初值表的形式与数组初始化时使用的初值表类似,是由一对花括号界定的初值序列。结构变量的初始化的一般形式是:存储类型struct结构类型名{成员声明表}结构变量1=初值表1,…,结构变量n=初值表n;或:存储类型struct结构类型名结构变量1=初值表1,…,结构变量n=初值表n;2020/1/28华中科技大学计算机学院24结构变量的初始化举例structstu_study{charnum[5];charname[9];charsex;intEnglish;intMath,Physics,C;}Wang={〞1234〞,〞WangWu〞,ˊmˊ,81,92,76,85};它将结构变量Wang的成员num、name、sex、English、Math、Physics、C依次初始化为〞1234〞、〞WangWu〞、ˊmˊ、81、92、76、85。2020/1/28华中科技大学计算机学院25通过存储类型
本文标题:C语言程序设计ppt-第10章-01
链接地址:https://www.777doc.com/doc-3357794 .html