C语言程序设计课件第9章 使用结构体类型处理组合数据_第1页
C语言程序设计课件第9章 使用结构体类型处理组合数据_第2页
C语言程序设计课件第9章 使用结构体类型处理组合数据_第3页
C语言程序设计课件第9章 使用结构体类型处理组合数据_第4页
C语言程序设计课件第9章 使用结构体类型处理组合数据_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C语言提供了一些由系统已定义好的数据类型,如:整型、实型、字符型、指针等类型,C语言还允许用户根据需要自己建立数据类型,用它来定义变量。第9章 使用结构体类型处理组合数据-用户自定义数据类型P248编辑课件9.1 定义和使用结构体变量9.2 结构体数组9.3 结构体指针9.4 用结构体变量和结构体变量的指针作函数参数9.5 用指针处理链表编辑课件9.1 定义和使用结构体变量9.1.1 自己建立结构体类型9.1.2 定义结构体类型变量9.1.3 结构体变量的初始化和引用P248编辑课件9.1.1 自己建立结构体类型P248用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体例如,一个学

2、生的学号、姓名、性别、年龄、成绩、家庭地址等项,是属于同一个学生的,因此组成一个组合数据,如student_1的变量,反映它们之间的内在联系编辑课件struct student int num; char name20; char sex; int age; float score; char addr30; ;由程序设计者指定了一个结构体类型struct Student它包括num,name,sex,age,score,addr等不同类型的成员编辑课件声明一个结构体类型的一般形式为: struct 结构体名 成员表列 ; 类型名 成员名;编辑课件说明:(1)结构体类型并非只有一种,而是可以设

3、计出许多种结构体类型,例如struct teacherstruct workerstruct date等结构体类型各自包含不同的成员编辑课件说明:(2) 成员可以属于另一个结构体类型。 struct date int month; int day; int year; ;struct student int num;char name20; char sex; int age; struct date birthday; char addr30; ;编辑课件说明:(2) 成员可以属于另一个结构体类型。 numnamesexagebirthdayaddrmonthdayyear编辑课件9.1.2

4、 定义结构体类型变量P250前面只是建立了一个结构体类型,它相当于一个模型,并没有定义变量,其中并无具体数据,系统对之也不分配存储单元。相当于设计好了图纸,但并未建成具体的房屋。为了能在程序中使用结构体类型的数据,应当定义结构体类型的变量,并在其中存放具体的数据。编辑课件1. 先声明结构体类型,再定义该类型变量声明结构体类型struct student,可以用它来定义变量 struct student student1,student2;结构体类型名结构体变量名 编辑课件1. 先声明结构体类型,再定义该类型变量声明结构体类型struct student,可以用它来定义变量 struct stu

5、dent student1,student2;10001Zhang XinM1990.5Shanghaistudent110002Wang LiF2098Beijingstudent2编辑课件2.在声明类型的同时定义变量struct student int num; char name20; char sex; int age; float score; char addr30; student1,student2;编辑课件3. 不指定类型名而直接定义结构体类型变量其一般形式为: struct 成员表列 变量名表列; 指定了一个无名的结构体类型 。编辑课件说明:(1) 结构体类型与结构体变量是

6、不同的概念,不要混同。只能对变量赋值、存取或运算,而不能对一个类型赋值、存取或运算。在编译时,对类型是不分配空间的,只对变量分配空间。编辑课件(2) 结构体类型中的成员名可以与程序中的变量名相同,但二者不代表同一对象。(3) 对结构体变量中的成员(即“域”),可以单独使用,它的作用与地位相当于普通变量。编辑课件9.1.3 结构体变量的初始化和引用 例9.1 把一个学生的信息放在一个结构体变量中,然后输出这个学生的信息。解题思路:先在程序中自己建立一个结构体类型,包括有关学生信息的各成员然后用它来定义结构体变量,同时赋以初值最后输出该结构体变量的各成员P91编辑课件#include void m

7、ain()struct student int num; char name20; char sex; char addr20; student1=10101,“Li Lin”,M, “123 Beijing Road”; printf(NO.:%dnname:%sn sex:%cnaddress:%sn, student1.num, , student1.sex, student1.addr);编辑课件#include void main()struct student int num; char name20; char sex; char addr20; stu

8、dent1=10101,“Li Lin”,M, “123 Beijing Road”; printf(NO.:%dnname:%sn sex:%cnaddress:%sn, student1.num, , student1.sex, student1.addr);编辑课件#include void main()struct student int num; char name20; char sex; char addr20; student1=10101,“Li Lin”,M, “123 Beijing Road”; student1.num=10010; 对pri

9、ntf(“%sn”,student1); 不对编辑课件#include void main()struct student int num; char name20; char sex; char addr20; student1=10101,“Li Lin”,M, “123 Beijing Road”; struct date birthday; student1.num=10010; 对student1.birthday.month=11; 对编辑课件#include void main()struct student int num; char name20; char sex; cha

10、r addr20; student1=10101,“Li Lin”,M, “123 Beijing Road”; student2.num=student1.num; 对sum=student1.num+student2.num; 对student1.num+; 对,student2; 编辑课件9.2 结构体数组P255编辑课件说明:(1)定义结构体数组一般形式是 struct 结构体名 成员表列 数组名数组长度; 先声明一个结构体类型,然后再用此类型定义结构体数组: 结构体类型 数组名数组长度; 如: struct person leader3; 编辑课件说明:(2)对结构体数组初始化的形式

11、是在定义数组的后面加上:=初值表列; 如:struct person leader3= Li,0,Zhang,0,“Sun,0; 编辑课件9.3 结构体指针P258指向结构体对象的指针变量既可以指向结构体变量,也可以用来指向结构体数组中的元素。但是,指针变量的基类型必须与结构体变量的类型相同。例如: struct student *pt; 编辑课件 例9.5 通过指向结构体变量的指针变量输出结构体变量中成员的信息。解题思路:在已有的基础上,本题要解决两个问题:怎样对结构体变量成员赋值;怎样通过指向结构体变量的指针访问结构体变量中成员。编辑课件#include #include void mai

12、n() struct student long num; char name20; char sex; float score; ;编辑课件说明:为了使用方便和直观,允许把(*p).num用p-num来代替(*p).name等价于p-name如果p指向一个结构体变量stu,以下等价: stu.成员名(如stu.num) (*p).成员名(如(*p).num) p-成员名(如p-num)编辑课件9.4 用结构体变量和结构体变量的指针作函数参数P262将一个结构体变量的值传递给另一个函数,有3个方法。编辑课件(1) 用结构体变量的成员作参数。 例如,用stu1.num或作函数实参

13、,将实参值传给形参。用法和用普通变量作实参是一样的,属于“值传递”方式。应当注意实参与形参的类型保持一致。编辑课件(2) 用结构体变量作实参。用结构体变量作实参时,将结构体变量所占的内存单元的内容全部按顺序传递给形参,形参也必须是同类型的结构体变量在函数调用期间形参也要占用内存单元。这种传递方式在空间和时间上开销较大在被调用函数期间改变形参(也是结构体变量)的值,不能返回主调函数一般较少用这种方法编辑课件(3)用指向结构体变量(或数组元素)的指针作实参,将结构体变量(或数组元素)的地址传给形参。编辑课件9.5 用指针处理链表9.5.1 什么是线性链表9.5.2 建立简单的静态链表9.5.3 建

14、立动态链表P265编辑课件9.5.1 什么是线性链表P265链表是一种常见的重要的数据结构它是动态地进行存储分配的一种结构head12491249A135613561475B1475C10211021D0头指针各结点地址不连续各结点含有两个部分表尾编辑课件链表是一种常见的重要的数据结构它是动态地进行存储分配的一种结构链表必须利用指针变量才能实现编辑课件struct student int num; float score; struct student *next; a,b,c;1010189.510103901010785a结点b结点c结点a.next=&b;b.next=&c;numsco

15、renext编辑课件9.5.2 建立简单的静态链表P266 例9.8 建立一个如图所示的简单链表,它由3个学生数据的结点组成,要求输出各结点中的数据。1010189.510103901010785a结点b结点c结点numscorenext编辑课件解题思路:1010189.510103901010785a结点b结点c结点numscorenextheadhead=&a;a.next=&b;b.next=&c;NULLc.next=NULL;编辑课件#include struct student int num; float score; struct student *next;编辑课件void

16、main() struct student a,b,c,*head,*p; a. num=10101; a.score=89.5; b. num=10103; b.score=90; c. num=10107; c.score=85; head=&a; a.next=&b; b.next=&c; c.next=NULL; p=head; do printf(“%ld%5.1fn”,p-num,p-score); p=p-next; while(p!=NULL); 编辑课件 p=head; do printf(“%ld%5.1fn”,p-num,p-score); p=p-next; while

17、(p!=NULL); 1010189.510103901010785a结点b结点c结点numscorenextheadNULLp相当于p=&b;编辑课件 p=head; do printf(“%ld%5.1fn”,p-num,p-score); p=p-next; while(p!=NULL); 1010189.510103901010785a结点b结点c结点numscorenextheadNULLp相当于p=&b;编辑课件 p=head; do printf(“%ld%5.1fn”,p-num,p-score); p=p-next; while(p!=NULL); 1010189.51010

18、3901010785a结点b结点c结点numscorenextheadNULLp相当于p=&c;编辑课件 p=head; do printf(“%ld%5.1fn”,p-num,p-score); p=p-next; while(p!=NULL); 1010189.510103901010785a结点b结点c结点numscorenextheadNULLp相当于p=&c;编辑课件 p=head; do printf(“%ld%5.1fn”,p-num,p-score); p=p-next; while(p!=NULL); 1010189.510103901010785a结点b结点c结点numscorenextheadNULLp相当于p=NULL;静态链表编辑课件9.5.3 建立动态链表P267所谓建立动态链

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论