C语言程序设计教程 教学课件 ppt 作者 陈宝贤 第12章结构体与共用体

上传人:E**** 文档编号:89355619 上传时间:2019-05-23 格式:PPT 页数:68 大小:280KB
返回 下载 相关 举报
C语言程序设计教程 教学课件 ppt 作者  陈宝贤 第12章结构体与共用体_第1页
第1页 / 共68页
C语言程序设计教程 教学课件 ppt 作者  陈宝贤 第12章结构体与共用体_第2页
第2页 / 共68页
C语言程序设计教程 教学课件 ppt 作者  陈宝贤 第12章结构体与共用体_第3页
第3页 / 共68页
C语言程序设计教程 教学课件 ppt 作者  陈宝贤 第12章结构体与共用体_第4页
第4页 / 共68页
C语言程序设计教程 教学课件 ppt 作者  陈宝贤 第12章结构体与共用体_第5页
第5页 / 共68页
点击查看更多>>
资源描述

《C语言程序设计教程 教学课件 ppt 作者 陈宝贤 第12章结构体与共用体》由会员分享,可在线阅读,更多相关《C语言程序设计教程 教学课件 ppt 作者 陈宝贤 第12章结构体与共用体(68页珍藏版)》请在金锄头文库上搜索。

1、教学内容: 12.1 概述 12.2 结构类型与结构变量的定义 12.3 结构体变量的初始化和引用 12.4 结构体数组 12.5 结构体指针 12.6 结构体指针与链表 12.7 共用体 12.8 枚举类型 12.9 typedef类型定义,第12章 结构体与共用体,教学要求: 1. 掌握结构体类型和结构体变量的定义方法。 2. 掌握结构体变量的使用,掌握结构体数组的应用。 3. 初步掌握单链表的基本操作。 4.掌握共用体变量的定义方法及其引用。,第12章 结构体与共用体,一辆银灰色的车牌号为湘A00001的雪弗兰轿车以80km/h的速度行驶。 在这里由车牌、车名、型号、车速共同构成了对一辆

2、轿车的描述,在数据处理中,这四个属性应该当作一个整体来处理。但它们不属于同一类型,无法用数组来容纳,而用单个变量来分别代表各个属性,又难以反映出它们的内在联系。 C语言提供结构体(structure)数据结构,将不同数据类型、但相互关联的一组数据,组合成一个有机整体使用。,12.1 概 述,1. 结构类型定义 定义形式: strcut 结构类型名 数据类型 成员; 数据类型 成员; ; 数据类型 成员n; ; /*些行的分号不能少*/ 也可以表述成如下形式: struct 结构体名 分量表 ;,12.2 结构类型与结构变量的定义,(1) struct是结构类型关键字 (2)“结构体名”和“数据

3、项名”的命名规则,与变量名相同。 (3) 个数据项称为结构类型的个成员(或分量)。,2. 结构体类型特点 ()定义一个结构体类型,系统不会为其分配内存单元。定义一个类型只是表示这个类型的结构,即告诉系统它由哪些类型的成员构成,各占多少个字节,各按什么形式存储,并把它们当作一个整体来处理。 ()结构体类型由多个成员组成,成员的数据类型可以是整型、实型、字符型、数组 ,也允许是另一个已经定义的结构体类型。 ()结构体类型是根据设计者的需要来组合的。 ()结构体类型系统没有预先定义,凡需要使用结构体类型数据的,都必须在程序中自己定义。,struct student int num; char nam

4、e20; char sex; int age; float score; char addr30; ;,例如:定义学生档案信息结构类型:,成员表列,struct是类型关键字,后分号不能少,表明语句结束。,结构体名,又例如,定义一个日期结构类型: struct date int year; int month; int day; ; 数据类型相同的数据项,既可逐个、逐行分别定义,也可合并成一行定义。写为如下形式: struct date int year, month, day; ; 3. 结构体成员的类型可以是结构体类型 在定义一个结构体类型时,可以利用已定义的另一个结构体类型来定义其成员的类

5、型。,例12.1 嵌套结构体类型定义的例子。,struct date struct student int month; int num ; int day; char name20 int year; char sex , ; int age ; struct date birthday; char addr30; ;,结构类型student的 “birthday”数据项可以是一个已经定义的结构类型date,4. 声明结构体类型变量 (1)先定义结构体类型再定义变量名。 定义了结构体类型 struct student 后, struct student char no7; char name

6、9; char sex3; struct date birthday; ; 可以用它定义变量。如: struct student st1, st2; 不能写成 struct st1, st2;,为了方便起见,可以在程序开头定义符号常量进行简化。如: #define STUDENT struct student 则在程序中可以直接写成: STUDENT char no7; char name9; char sex3; struct date birthday; ; STUDENT st1, st2;,(2) 在定义类型的同时定义变量。 则一般定义形式为: struct 结构体名 分量表; 变量表

7、; 如:struct student char no7; char name9; char sex3; struct date birthday; st1,st2;,(3)直接定义结构类型变量定义形式为: struct 分量表; 变量表; 在 struct 后不出现结构体名,因此也不能再以此定义相同的结构体变量。 如: struct char no7; char name9; char sex3; struct date birthday; st1,st2;,1. 结构变量的引用 对于结构变量,要通过成员运算符“.”,逐个访问其成员,访问的格式为: 结构变量名 . 成员 例如,struct s

8、tudent st1,st2; st1.no, 引用结构变量st1中的no成员; st1.name 引用结构变量st1中的name成员, st2.name 引用结构变量st2中的name成员, 也可以引用结构体变量以及变量成员的地址 例如, &st1 &st1.no,其中的“.”是成员运算符,12.3 结构体变量的初始化和引用,如果某成员本身又是一个结构类型,则只能通过多级的分量运算,对最低一级的成员进行引用。 此时的引用格式扩展为: 结构变量名. 成员 . 子成员.最低1级子成员 例如,引用结构变量st1中的birthday成员的格式分别为: st1. birthday.year st1.

9、birthday.month st1. birthday.day (1)对最低一级成员,可像同类型的普通变量一样,进行相应的各种运算。,(2) 只能对结构体变量的各分量进行输入输出,不能将一个结构体变量直接进行输入输出。 scanf(“%s,%s,%s,%d,%d,%d”, (以十六进制输出st1的首地址),2. 结构变量的初始化 结构变量初始化的格式,与一维数组相似: 结构变量= 初值表 不同的是:如果某成员本身又是结构类型,则该成员的初值为一个初值表。 例如: st1= “000102”, “张三”, “男”, 1980,9,20 注意:初值的数据类型,应与结构变量中相应成员所要求的一致,

10、否则会出错。,例12.2 外部存储类的结构体变量初始化 struct student1 long int num; char name20; char sex; char addr30; a=89031,“Li Lin”,M,“123 Beijing Road”; main( ) printf(“%ld,%s,%c,%sn”, a.num,a.name,a.sex,a.addr); ,输出结果: 89031,Li Lin,M,123 Beijing Road,3. 关于结构体类型的几点说明 (1)类型与变量是两个不同的概念。 先定义结构体类型,再定义该类型变量。在编译时,对变量分配空间,对类型

11、来说不存在分配空间。 变量可以赋值、存取或运算,而类型没有这些操作。 (2) 结构体中的分量名可以与程序中的其它变量同名,它们代表不同的对象,互不干扰。 对结构体中的分量可以单独使用。,(3)不可以将两个结构变量进行关系比较,非法语句,struct temp int a; char ch; x1, x2; main( ) x1.a=10; x2.ch=a; if( x1= =x2 ) ,(4)可以把一个结构体变量赋给另一个同类型的结构体变量。,把结构变量x1的值 赋给结构变量x2.,(5) 结构体类型的变量在内存中占有一段连续的存储单元。占有连续存储单元的大小取决于成员的数据类型.,如: st

12、ruct exp int a; float b; char ch8; ; struct exp x=1234,56.7, “text“,结构体类型变量x在内存共占用14个字节的连续单元,(6) 可通过sizeof ( )运算符获得结构体变量占用的内存大小。,struct exp int a; float b; char ch8; x; main( ) int size; size=sizeof(x); printf(“size=%dn“, size); ,例12.3 结构体成员的使用 #include #include struct score int math; int eng; int c

13、omp; ; struct stu char name12; char sex; long StuClass; struct score sub; ;,main() struct stu s1=“LiMing“,M,990324,88,80,90; struct stu s2; clrscr(); s2=s1; s2.name0=H; s2.name1=u; s2.StuClass=990325; s2.sub.math=83; printf(“Record1%s,%c,%ld,%d,%d,%dn“, s1.name,s1.sex,s1.StuClass, s1.sub.math,s1.sub

14、.eng,p); printf(“Record2%s,%c,%ld,%d,%d,%dn“, s2.name, s2.sex,s2.StuClass, s2.sub.math,s2.sub.eng,p); ,相同结构类型变量可直接赋值,12.4 结 构 体 数 组,结构体数组每个数组元素都是一个结构体类型的数据,且这些数据又分别包括各个分量。 结构体数组的定义、初始化等操作和内存中的存放方式与普通数组相类似。 1.结构体数组的定义 与结构变量的定义相似,结构数组的定义也分直接定义和间接定义两种方法,只需说明为数组即可。 结构体类型名 数组名n 例如: struct student stu 3 s

15、truct BookLib Book4;,2.结构数组初始化 与普通数组一样结构数组也可在定义时进行初始化。 初始化的格式为: 结构数组n 初值表1,初值表2,.,初值表n 例12.4 用结构类型 struct student 定义一个结构体数组stu3,用于存储和显示三个学生的基本情况。 # include “struct.h“ struct student stu 3= “000102”,“张三”,“男”,1980,9,20 , “000105”,“李四”,“男”,1980,8,15 , “000112”,“王五”,“女”,1980,3,10 ;,main() int i; /* “ “表示1个空格字符*/ printf(“No.NameSexBirthdayn“); for(i=0; i3; i+) printf(“%-7s“,stu i .no); printf(“%-9s“,stu i .name); print

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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

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