[理学]第8章-结构体与共用体PPT课件

合集下载

程序设计与C语言第8章结构体、共用体及枚举类型幻灯片

程序设计与C语言第8章结构体、共用体及枚举类型幻灯片
第8章 结构体、共用体及枚举类型
程序设计与C语言第8章结 构体、共用体及枚举类型
幻灯片
本课件PPT仅供大家学习使用 学习完请自行删除,谢谢! 本课件PPT仅供大家学习使用 学习完请自行删除,谢谢!
《程序设计C语言》
第8章 结构体、共用体及枚举类型
8.1 构造体类型
1. 构造体类型的定义 要定义构造体变量,首先要定义构造体类型。构 造体类型定义的一般形式是: struct[<构造名>] {
《程序设计C语言》
第8章 结构体、共用体及枚举类型
(2)还可以在一个构造体内部直接嵌套定义: Struct student {
unsigned num; char name[10]; int age; float score; struct {
int year; int month; int day; 《程序}b设i计rthC语da言y》;
《程序设计C语言》
第8章 结构体、共用体及枚举类型
图8―1 结构体数组的逻辑结构 《程序设计C语言》
第8章 结构体、共用体及枚举类型
2. 对构造体分量的引用 对构造体分量的引用有三种方法:用点运算符引 用法;用指向运算符引用法;对数组元素的分量用下 标加点或指向运算符引用法。下面分别加以说明。 (1)用点运算符引用构造体变量的分量的方法, 有两种引用形式:
stu1=stu2; 那么使stu1的各分量具有了和stu2各分量一样的 《程值序。设计C语言》
第8章 结构体、共用体及枚举类型
4. 构造体指针变量的定义 除了定义构造体变量之外,还可定义构造体指针 变量。如:
struct student stu1,*p; p是构造体类型指针。像其它类型的指针一样, 构造体指针只有和某个构造体变量发生了联系,即得 到了构造体变量的首地址之后才能被使用。如

第八章结构体与共用体-PPT精选.ppt

第八章结构体与共用体-PPT精选.ppt

☻方式1和2可以在多处定义相同结构体类型的变量 而方式3不行
☻结构体类型可以嵌套定义
struct date {int month; int day; int year;}; struct student {int num; char name[20]; char sex; struct date birthday; };
4.结构体类型变量的比较
不能直接比较
if(stu1==stu2)
............error
只能进行
if(stu1.num==stu2.num&&
!strcmp(,))
......
5. sizeof(struct student) struct student{int num; char name[10];}stu1,stu2;
这些数据 之间没有 任何关联
学号 105 108 101 103
姓名 张三 李力 魏红 王一
年龄 18 19 18 20
成绩 89 95 90 76
住址 北京 南京 上海 贵州
如何存放这 些数据?
105 张三
18
89
北京
108 李力
19
95
南京
101 魏红
18
90
上海
103 王一
20
76
贵州
105 张三 18 89 北京 108 李力 19 95 南京 101 魏红 18 90 上海 103 王一 20 76 贵州
第八章 结构体与共用体
8.1 结构体 8.2 结构体数组 8.3 指向结构体类型数据的指针 8.4 链表 8.5 共用体 8.6 枚举类型
8.1 结构体
表示一个同学的数据: 学号 int num; 姓名 char name[20]; 年龄 int age; 成绩 float score; 家庭住址 char addr[30];

结构体与共用体

结构体与共用体

2020/12/16
15
8.1 结构体
8.1.2 结构体数组
定义结构体数组的方法和结构体变量相似:
(1) struct 结构体名 {成员表列} 数组名[数组长度];
(2) 先声明一个结构体类型,然后再用此类型定义结构体数组: 结构体类型 数组名[数组长度];
例8.3 编写程序,利用结构体数组存储和显示三个学生的信息。 算法描述:首先定义并初始化一个结构体数组,然后通过printf 函数输出到屏幕上即可。
return 0;
}
2020/12/16
17
8.1 结构体
程序分析: 程序中定义了一个外部结构体数组stu,共3个元 素,并作了初始化赋值。在main函数中用for语句 逐个输出各元素的各个成员值。
2020/12/16
18
8.1 结构体
8.1.3 结构体指针
指向结构体变量的指针
例8.4 使用指向结构体变量的指针来访问结构体变量的 各个成员。
struct student
{ int num;
char name[10];
float score; };
int main ()
{struct student stu[3]={{1, "Wang", 90.0}, {2, "Qian", 89.5}, {3, "Sun", 85.0}};
struct student *p; int i;
注意 : (1)在定义结构体变量时可以对它的成员初始化。初始化列表是用花括号 括起来的一些常量。如:
struct Student a={10001,"Li Ming",'M',"Bei Jing"};

第八章 结构体和共用体-2004PPT教学课件

第八章 结构体和共用体-2004PPT教学课件
第八章 结构体和共用体
8.1结构体类型的定义 8.2结构体类型变量的定义和引用 8.3结构体类型数组 8.4指向结构体类型数据的指针 8.5共用体类型 8.6枚举类型 8.7用类型是“构造类型”,它是由 若 干个类型相同或不同的数据组合而成的,前面已经介绍过的 数组就是一种构造类型,但是它只有存放数据类型相同的若 干个数据,如果出现数据类型不同的若干个数据,用单个数 组就无法将它们存放在一起为了整体存放这些类型不同的相 关数据,C语言提供了另一种构造类型:结构体类型,它可 以将若干个不同类型的数据存放在一起。
例如,为了存放一个人的姓名、性别、年龄、工资, 可以定义如下的结构体类型: struct person
{ char name[20]; char sex; int age; float wage;
};
6
又如,为了存放一个学生的学号、姓名、性别、年龄、 成绩1、成绩2、成绩3,可以定义如下的结构体类型: struct stu
9
在定义变量的同时,可以对变量赋初值,例如上例中的 定义语句可以改写如下:
struct student x={100001L,"zhao1",'f',{89,94,86}}, y={100002L,"zhao2",'m',{78,86,92}};
这个定义语句将使得变量x和y的各个成员获得如下的初值: number name sex score[0] score[1] score[2]
8
返回
结构体类型变量的定义和引用
一、结构体类型变量的定义和初始化
1、先定义结构体,后定义变量 例如,为学生信息定义2个变量,程序段如下:
struct student {long number; char name[20]; char sex; float score[3]; }; ... struct student x,y;

结构体与共用体链表PPT优质课件

结构体与共用体链表PPT优质课件

/*工资*/
float cost;
/*扣款*/
struct date hiredate; /*聘任日期*/
};
结构体类型可以嵌套定义即一个结 构体类型中的某些成员又是其他结 构体类型
结构体类型变量的定义(1)
• 先定义结构体类型,再定义结构体变量
• 一般形式
struct 结构体名
{
类型标识符 成员名;
结构体变量的初始化(3)
• 形式三
struct {
类型标识符 成员名; 类型标识符 成员名;
……………. }结构体变量={初始数据};
例 struct { int num; char name[20]; char sex; int age; char addr[30]; }stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Road”};
结构体变量的初始化(2)
• 形式二
struct 结构体名 {
类型标识符 成员名; 类型标识符 成员名;
……………. }结构体变量={初始数据};
例 struct student { int num; char name[20]; char sex; int age; char addr[30]; }stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Road”};
char sex;
int age; float score; char addr[30];
用无名结构体直接定义变量,只 能一次,不能在再需要时使用所 定义的结构体类型。
}stu1,stu2;
结构体类型声明的说明
• 说明
结构体类型与结构体变量概念不同
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2021/2/25
C语言大学实用教程课件 制作人 孙勇
6
数组的解决方法
数据的内存管理方式
1
2 3 4 ……
90 78 89 78 ……
2021/2/25
令狐冲 林平之 岳灵珊 任莹莹 ……
83 92 72 95 ……
男 男 女 女 ……
72 88 98 87 ……
C语言大学实用教程课件 制作人 孙勇
3
思考一个问题
在程序里表示一个人(姓名、年龄、性别、……), 怎么表示? 想表示多个人呢? 如何用计算机程序实现下述表格的管理?
表8-1 某学校学生成绩管理表
学号 姓名 性别 入学时间 计算机原理 英 语
1 令狐冲 男 1999
90
83
2 林平之 男 1999
78
92
3 岳灵珊 女 1999
89
72
2
从基本数据类型到抽象数据类型
二进制数 – 在早期的机器指令及汇编语言中,数据对象均用二进制数表示,
没有类型的概念
基本数据类型 –在高级语言中引入了基本数据类型:整型、实型、字符型等 –基本数据类型不能方便的解决所有问题,有些语言(如PL/1)中
试图规定较多的类型,如数组、树、栈等,但实践证明不是个好 办法
char studentSex[4]; /*每个学生的性别*/
int timeOfEnter; /*每个学生的入学时间*/
int scoreComputer; /*每个学生的计算机原理成绩*/
int scoreEnglish; /*每个学生的英语成绩*/
int scoreMath;
/*每个学生的数学成绩*/
用户自己构造数据类型-复合数据类型 –表示复杂的数据对象,典型的代表就是“结构体”,数组、指针
也可算作此类
抽象数据类型(Abstract Data Type,简称ADT)
–在复合数据类型基础上增加了对数据的操作 –类——跨时代的进步 –例如汽车就是一种ADT
2021/2/25
C语言大学实用教程课件 制作人 孙勇
1999 1999 1999 1999 ……
82 78 66 90 ……
7
数组的解决方法
分配内存不集中,寻址效率不高 对数组进行赋初值时,容易发生错位 结构显得比较零散,不容易管理
2021/2/25
C语言大学实用教程课件 制作人 孙勇
8
希望的内存分配图
1 令狐冲
男 1999
90 83 72 82
一般形式:
struct student
struct 结构体名
10
用户自定义的数据类型
结构体: – 把关系紧密且逻辑相关的多种不同类型的变量组织到
统一的名字之下,也称复合数据类型
– 这种类型的变量占用相邻的一段内存单元 共用体: – 把情形互斥但又逻辑相关的多种不同类型的变量组织
在一起
– 这种类型的变量占用同一段内存单元,因此每一时刻
只有一个数据起作用
2021/2/25
int scoreMusic;
/*每个学生的音乐成绩*/
};
– struct STUDENT是一个类型
struct STUDENT students[4];
students[0].studentName students[0].Sex
– 它们都是变量,一般称为结构的成员变量
2021/2/25
C语言大学实用教程课件 制作人 孙勇
第8章 结构体与共用体
孙勇
sunyong_cug@
本章内容
结构体(结构structure) 、共用体(联合union) 类型的定义 结构体变量、结构体数组 结构体变量、结构体数组与指针、函数的关系 用结构体实现动态数据结构 链表的概念及操作原理
2021/2/25
C语言大学实用教程课件 制作人 孙勇
C语言大学实用教程课件 制作人 孙勇
11
结构体的定义
num name sex age score addr 10010 LiFun M 18 87.5 Beijing
structure definition形成一个样板,用于生成结构体变量。
构成结构体的变量称为结构体的成员(member), 也称元素(element)或域(filed)
4 任莹莹 女 1999
78
95
数学 72 88 98 87
5 ……
音乐 82 78语言大学实用教程课件 制作人 孙勇
4
数组的解决方法
int studentId[30]; /* 最多可以管理30个学生, 每个 学生的学号用数组的下标表示*/
char studentName[10][30]; char studentSex[2][30]; int timeOfEnter[30]; /*入学时间用int表示*/ int scoreComputer[30];/*计算机原理课的成绩*/ int scoreEnglish[30]; /*英语课的成绩*/ int scoreMath[30]; /*数学课的成绩*/ int scoreMusic[30]; /*音乐课的成绩*/
2 林平之
男 1999
78 92 88 78
3 岳灵珊
女 1999
89 72 98 66
4 任莹莹
女 1999
78 95 87 90
2021/2/25
C语言大学实用教程课件 制作人 孙勇
9
结构体的解决方法
struct STUDENT
{ int studentID;
/*每个学生的序号*/
char studentName[10];/*每个学生的姓名*/
2021/2/25
C语言大学实用教程课件 制作人 孙勇
5
数组的解决方法
int char
char int int int int int
studentId[30] = {1,2,3,4,5,6}; studentName[10][30] = {{"令狐冲"},{"林平之"},
{"岳灵珊"},{"任莹莹"}}; studentSex[2][30] = {{"男"},{"男"},{"女"},{"女"}}; timeOfEnter[30] = {1999,1999,1999,1999}; scoreComputer[30] = {90,78,89,78}; scoreEnglish[30] = {83,92,72,95}; scoreMath[30] = {72,88,98,87}; scoreMusic[30] = {82,78,66,90};
相关文档
最新文档