c语言编程技巧分析教学课件kj第8章结构体共用体和枚举类型以及链表编程技巧分析

上传人:tian****1990 文档编号:81511955 上传时间:2019-02-21 格式:PPT 页数:74 大小:981KB
返回 下载 相关 举报
c语言编程技巧分析教学课件kj第8章结构体共用体和枚举类型以及链表编程技巧分析_第1页
第1页 / 共74页
c语言编程技巧分析教学课件kj第8章结构体共用体和枚举类型以及链表编程技巧分析_第2页
第2页 / 共74页
c语言编程技巧分析教学课件kj第8章结构体共用体和枚举类型以及链表编程技巧分析_第3页
第3页 / 共74页
c语言编程技巧分析教学课件kj第8章结构体共用体和枚举类型以及链表编程技巧分析_第4页
第4页 / 共74页
c语言编程技巧分析教学课件kj第8章结构体共用体和枚举类型以及链表编程技巧分析_第5页
第5页 / 共74页
点击查看更多>>
资源描述

《c语言编程技巧分析教学课件kj第8章结构体共用体和枚举类型以及链表编程技巧分析》由会员分享,可在线阅读,更多相关《c语言编程技巧分析教学课件kj第8章结构体共用体和枚举类型以及链表编程技巧分析(74页珍藏版)》请在金锄头文库上搜索。

1、在线教务辅导网:http:/,教材其余课件及动画素材请查阅在线教务辅导网,QQ:349134187 或者直接输入下面地址:,http:/,第8章 结构体、共用体和 枚举类型以及链表编程技巧分析,C语言编程技巧分析,本章概述,本章首先简单介绍结构体、共用体和枚举类型以及链表的相关知识,接着详细讲解运用结构体、共用体和枚举类型以及链表知识时需要注意的问题,并通过实例分析运用结构体、共用体和枚举类型以及链表知识的一些编程技巧。,本章的学习目标,本章教学目的: 掌握结构体、共用体和枚举类型以及链表知识;理解运用结构体、共用体和枚举类型以及链表知识时需要注意的一些问题;掌握结构体、共用体和枚举类型以及链

2、表知识的相关编程技巧。 本章教学重点: 运用结构体、共用体和枚举类型以及链表知识需注意的问题和编程技巧。 本章教学难点: 关于结构体、共用体和枚举类型以及链表知识的编程技巧。,8.1结构体、共用体和枚举类型以及链表知识简要介绍 8.2 运用结构体、共用体和枚举类型以及链表知识时需要注意的问题 8.3结构体、共用体和枚举类型以及链表知识编程技巧分析,本章主要内容,8.1结构体、共用体和枚举类型以及链表知识简要介绍,8.1.1 结构体 1、结构体类型的声明 struct 结构体名 成员项表列; ; 例如: struct STU /*声明一个结构体类型, 名称是struct STU*/ long x

3、h11; /* xh是一个成员, 存放学号*/ char xm20; /* xm是一个成员, 存放姓名*/ char bj20; /* bj是一个成员, 存放班级*/ float cj3; /* cj是一个成员, 存放三科考试成绩*/ ;,8.1结构体、共用体和枚举类型以及链表知识简要介绍,8.1.1 结构体 2、结构体类型变量的定义 结构体类型变量的定义可以有以下三种形式: (1) 先声明结构体类型,再定义结构体类型的变量。 例如利用上面的struct STU结构体类型,可以在下面定义struct STU类型的变量: struct STU student1,student2 (2) 声明结构

4、体类型同时定义结构体类型变量: struct DATE /*日期结构体类型*/ int day; int month; int year; time1,time2; /*定义两个struct DATE类型变量*/,8.1结构体、共用体和枚举类型以及链表知识简要介绍,8.1.1 结构体 (3) 直接定义结构体类型变量: struct float re; /*复数的实部*/ float im; /*复数的虚部*/ a,b; /*定义两个复数型变量* / 3、结构体成员的引用 结构体成员的引用格式如下: . 如: a.re=2;a.im=2.5; time1.day=23; time2. month

5、=12; strcpy(student1.xm,”张三”);,8.1结构体、共用体和枚举类型以及链表知识简要介绍,8.1.1 结构体 4、结构体类型变量的初始化 上述对结构体类型变量的三种定义形式均可在定义时初始化,例如: struct STU student=1213012,“李强“,“英语1班“,98.5,97.4,95; 5、结构体类型的数组 结构体类型数组的定义与其它数据类型数组的定义方式一样,例如:struct STU class50; /*定义一个50个元素的结构体数组*/ 引用结构体类型数组元素的成员的格式: . 例如:classi.xm表示第i个学生的姓名, classi.bj

6、表示第i个学生的班级。,8.1结构体、共用体和枚举类型以及链表知识简要介绍,8.1.1 结构体 6、结构体类型的指针变量 结构体类型的指针变量的定义格式如下: struct 结构体类型名 *变量名; 例如: struct STU student1, *p= 可以通过结构体指针变量间接访问结构变量的各个成员。其访问的格式为: (*结构体指针变量).成员名 或 结构体指针变量-成员名 例如: (*p).xh 或者 p-xh 等价于 student1. xh 注意:(*p)两侧的括号不可少。,8.1结构体、共用体和枚举类型以及链表知识简要介绍,8.1.2 共用体 1、共用体类型的声明和共用体类型变量

7、的定义 共用体类型的声明与结构体类型的声明类似,格式如下: union 共用类型名 成员列表 ; 共用变量的定义与结构变量的定义类似,三种格式如下: 直接定义: 间接定义: 省略类型名直接定义: union 共用体名 union 共用体名 union 成员列表 成员列表 ; 成员列表 变量列表; union 共用体名 变量列表; 变量列表;,8.1结构体、共用体和枚举类型以及链表知识简要介绍,8.1.2 共用体 2、共用体变量的引用 引用形式与结构体变量一样,只能逐个引用共用体变量的成员。注意:不能对共用体变量进行整体的输入或输出。若a是共用体类型变量,则下面语句都是错误的: scdanf(“

8、%d”, ,8.1结构体、共用体和枚举类型以及链表知识简要介绍,8.1.2 共用体 3、共用体与结构体相似之处 (1)都是由不同类型的数据项组合在一起; (2)都只能对分量进行操作和引用。 4、共用体变量的特点 (1)系统采用覆盖技术,实现共用体变量各成员的内存共享,所以在某一时刻,存放在内存中的和起作用的是最后一次存入的成员值。共用体变量占用的内存空间,等于最长的成员的长度,而不是各成员长度之和。 (2)由于所有成员共享同一内存空间,故共用体变量的地址与各成员的地址相同。 (3)不能对共用体变量进行初始化(而结构体变量可以初始化);也不能将共用体变量作为函数参数,以及使函数返回一个共用体数据

9、,但可以使用指向共用体变量的指针。 (4)共用类型可以出现在结构类型定义中,反之亦然。,8.1结构体、共用体和枚举类型以及链表知识简要介绍,8.1.3 枚举类型 1、枚举类型的声明 enum 枚举类型名 取值表; 例如 enum weekdays Sun,Mon,Tue,Wed,Thu,Fri,Sat; 上面括号中的标识符称为枚举常量。它只能为标识符,不能为数字常量或字符常量。 2、枚举变量的定义 枚举变量的定义与结构体变量类似,有下面一些定义形式: (1)间接定义,例如:enum weekdays w1,w2; (2)直接定义,例如:enum weekdays Sun, w1,w2 ; (3

10、)省略类型名直接定义枚举变量,例如: enum Sun,Mon,Tue,Wed,Thu,Fri,Sat w3,w4 ;,8.1结构体、共用体和枚举类型以及链表知识简要介绍,8.1.4 链表 链表是动态地进行存储分配的一种结构,链表中的数据在内存中不必连续存放,数据之间通过指针链接起来,相比于数组结构,链表的插入和删除操作比较方便。 1、 链表中的结点 链表中的结点是结构体类型的数据,每个结点的所有成员分为两部分,一部分用来存放数据(各种实际的信息),如编号、姓名和年龄等;另一部分存放指针,用来连接其它结点。 例如:定义了一个结构体类型变量a,成员num、name和score用来存放数据(各种实

11、际的信息),成员next用来存放指针(指向下一个结点的首地址)。 struct NODE int num; char name10; int age; struct NODE *next; a;,8.1结构体、共用体和枚举类型以及链表知识简要介绍,8.1.4 链表 2、 链表的种类: (1)单向链表:每个结点除了一些数据成员外,只包含一个指针成员。单向链表通常有一个头指针(head),用于指向链表头。单向链表有一个尾结点,尾结点的指针成员存放的是空指针(NULL)。 (2)循环链表:最后一个结点的指针指向该循环链表的第一个结点或者表头结点,从而构成一个环形的链。 (3)双向链表:结点除含有数据

12、成员外,还有两个指针成员,一个指针成员存储直接后继结点地址;另一个指针成员存储直接前驱结点地址。,8.1结构体、共用体和枚举类型以及链表知识简要介绍,8.1.4 链表 3、 单向链表的基本操作: (1)创建链表:从无到有地建立起一个链表,即往空链表中依次插入若干结点,并保持结点之间的前驱和后继关系。 (2)查找结点:按给定的结点索引号或查找条件,查找某个结点。 (3)插入操作:在结点a与b之间插入一个新的结点d。 (4)删除操作:将结点a与b之间的结点d删除。 (5)打印输出:输出结点的数据成员值。,8.1结构体、共用体和枚举类型以及链表知识简要介绍,8.1.4 链表 4 、处理动态链表所需的

13、函数: (1)void *malloc(unsigned int size); 作用:在内存的动态存储区中分配一个长度为size的连续空间。 (2)void *calloc(unsigned n,unsigned size); 作用:在内存动态区中分配n 长度为size的连续空间。 (3)void *realloc(void *mem_address, unsigned int newsize); 作用:扩大mem_address指向的内存块的大小为newsize。 (4)void free(void *p); 作用:释放由p指向的内存区。,8.2运用结构体、链表等知识时需要注意的问题,8.2

14、.1关于结构体和共用体的类型声明 (1)区分开类型名与变量名 结构体类型名和结构体变量名是两个不同的概念,不能混淆。结构体类型名只能表示一个结构形式,编译系统并不对它分配内存空间。只有当某变量被说明为这种类型的结构时,才对该变量分配存储空间。 (2)结构体与共用体可以相互引用 C语言在声明某个结构体类型或共用体类型时,可以使用已经声明过的结构体、共用体类型。结构体类型中可以有共用体类型的成员,共用体类型中可以有结构体类型的成员。 例如:,8.2运用结构体、链表等知识时需要注意的问题,8.2.1关于结构体和共用体的类型声明,struct data int day; int mouth; int

15、year; ; struct person char name20; struct data birthday; /*成员birthday的类型struct data已经在前面声明过*/ union char department50; /*若为教师身份时,成员category为 department*/ int class; /*若为学生身份时,成员category为class */ category; /*成员category是共用体类型*/ x;,8.2运用结构体、链表等知识时需要注意的问题,8.2.1关于结构体和共用体的类型声明 (3)typedef与结构体的联合应用 使用typedef命令可以取一个新的类型名来代替已有的类型名,一般当有复杂类型定义时,如定义结构体类型、共用体类型时,常常用typedef为刚定义的复杂类型取一个较为简单、直接的类型名。例如: typedef struct node long num; char name10; struct node *next; NODE,*LINK;,8.2运用结构体、链表等知识时需要注意的问题,8.2.1关于结构体和共用体的类型声明 上面声明了一个内容与struct node相同但名为NODE的结构体类型名,还声明了一个结构体指针类型LINK。 注意,LINK不是指针变量,而是一个指针类型。以下定义

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

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号