C语言培训教材课件第8章.ppt
《C语言培训教材课件第8章.ppt》由会员分享,可在线阅读,更多相关《C语言培训教材课件第8章.ppt(49页珍藏版)》请在三一办公上搜索。
1、1,第8章 结构体与共用体,C 语言程序设计,烟台大学 计算机学院,刘 培 华,2023/11/7,2,第8章 结构体与共用体,8.1 结构体8.2 共用体8.3 枚举类型与类型命名,2023/11/7,3,一个学生的信息有学号、姓名、性别、年龄、住址、成绩等。一本图书的信息有分类编号、书名、作者、出版社、出版日期、价格、库存量等。如何描述这些类型不同的相关数据?,8.1 结构体,8.1.1 结构体与结构体类型的定义,?,信息管理,结构体一种构造类型数据 结构体由若干不同类型的数据项组成,构成结构体的各个数据项称为结构体成员。,2023/11/7,4,struct 结构体名 数据类型1 成员名
2、1;数据类型2 成员名2;数据类型n 成员名n;,8.1 结构体,8.1.1 结构体与结构体类型的定义,结构体类型定义的一般形式:,struct为关键字;结构体名是用户定义的类型标识。中是组成该结构体的成员。成员的数据类型可以是C语言所允许的任何数据类型。,2023/11/7,5,例如图书类型的定义:struct bookcard char num10;/*图书分类编号是字符数组类型*/char name30;/*书名是字符数组类型*/char author30;/*作者是字符数组类型*/char publisher60;/*出版社是字符数组类型*/float price;/*价格是单精度实型
3、*/int n;/*库存量是整型*/;,例如学生类型的定义:struct student char num8;/*学号是字符数组类型*/char name30;/*姓名是字符数组类型*/char sex;/*性别是字符型*/int age;/*年龄是整型*/char addr60;/*住址是字符数组类型*/int score6;/*成绩是整型数组类型*/;,8.1 结构体,8.1.1 结构体与结构体类型的定义,2023/11/7,6,8.1 结构体,8.1.2 结构体变量的定义与初始化,1.结构体类型变量的定义,利用已定义的结构体类型名定义变量 struct 结构体名 变量名表;例如:stru
4、ct bookcard book1100;struct student s30,t1,t2;,按照结构体类型的组成,系统为定义的结构体变量分配内存单元。结构体变量的各个成员在内存中占用连续存储区域,结构体变量所占内存大小为结构体中每个成员所占用内存的长度之和。,2023/11/7,7,8.1 结构体,结构体类型与变量的说明,类型与变量是不同的概念。应先定义一个结构体类型,而后再定义结构体变量。系统对类型不分配空间,仅对变量分配空间。只能对变量赋值、存取或运算,而不能对一个类型赋值、存取或运算。,成员也可以是结构变量。对结构中的成员,可以单独使用,它的作用与地位相当于普通变量。成员名可与程序中的
5、变量名相同时,也可与不同结构体类型的成员名相同,二者代表不同的对象。,struct date int year,month,day;struct student char num8;char name30;char sex;struct date birthday;/*成员为结构体类型*/char addr60;int score6;,2023/11/7,8,8.1 结构体,8.1.2 结构体变量的定义与初始化,1.结构体类型变量的定义,在定义结构体类型的同时定义变量,例如:struct student char num8,name20,sex;int age;float score;st30
6、;,struct 结构体名 成员定义表;变量名表;,2023/11/7,9,8.1 结构体,8.1.2 结构体变量的定义与初始化,1.结构体类型变量的定义,直接定义结构体类型变量,例如:struct char num8,name20,sex;int age;float score;st30,a,b,c;,struct 成员定义表;变量名表;,2023/11/7,10,8.1 结构体,8.1.2 结构体变量的定义与初始化,2.结构体变量的初始化,【例8.4】结构体变量的初始化。struct date int year,month,day;struct student char num8,name
7、20,sex;struct date birthday;float score;a=9606011,Li ming,M,1977,12,9,83,b=9608025,Zhang liming,F,1978,5,10,87,c;,如果初值个数少于结构体成员个数,则将无初值对应的成员赋以0值。如果初值个数多于结构体成员个数,则编译出错。,2023/11/7,11,8.1 结构体,8.1.2 结构体变量的定义与初始化,2.结构体变量的初始化,【例8.5】结构体数组的初始化。struct s char num8,name20,sex;float score;stu3=9606011,Li ming,M
8、,87.5,9606012,Zhang jiangguo,M,79,9606013,Wang ping,F,90;,元素的个数可以省略,根据赋初值时结构体常量的个数确定数组元素的个数,2023/11/7,12,8.1 结构体,8.1.2 结构体变量的定义与初始化,3.结构体变量的运算,用sizeof运算符计算结构体变量所占内存空间,struct date int year,month,day;struct student char num8,name20,sex;struct date birthday;float score;a;,sizeof(a)的结果为8+20+1+6+4=39 siz
9、eof(struct student)的结果为39,2023/11/7,13,8.1 结构体,8.1.2 结构体变量的定义与初始化,3.结构体变量的运算,同类型结构体变量之间的赋值运算,结构体变量之间进行赋值时,系统将按成员一一对应赋值。,struct date int year,month,day;struct student char num8,name20,sex;struct date birthday;float score;a=9606011,Li ming,M,1977,12,9,83,b,c;c=a;,2023/11/7,14,8.1 结构体,8.1.2 结构体变量的定义与初始
10、化,3.结构体变量的运算,对结构体变量进行取址运算,struct date int year,month,day;struct student char num8,name20,sex;struct date birthday;float score;a;,对结构体变量a进行&a 运算,可以得到a的首地址,它是结构体类型指针。,2023/11/7,15,8.1 结构体,8.1.2 结构体变量的定义与初始化,4.结构体变量成员的引用,结构体变量成员引用的一般形式:结构体变量名.成员名,结构体变量a的各成员可分别表示为a.num、a.name、a.sex、a.birthday、a.score,st
11、ruct date int year,month,day;struct student char num8,name20,sex;struct date birthday;float score;a;,“.”是分量运算符,运算级别最高。,a.birthday.yeara.birthday.montha.birthday.day,结构体变量的各个成员可进行何种运算,由该成员的数据类型决定,2023/11/7,16,8.1 结构体,8.1.2 结构体变量的定义与初始化,【例8.6】编写一个统计选票的程序。struct candidate char name20;/*name为候选人姓名*/int
12、count;/*count为候选人得票数*/list=invalid,0,Zhao,0,Qian,0,Sun,0,Li,0,Zhou,0;,2023/11/7,17,8.1 结构体,8.1.2 结构体变量的定义与初始化,main()int i,n;printf(Enter voten);scanf(%d,/*输入所投候选人编号*/,2023/11/7,18,9.1 结构体,9.1.2 结构体变量的定义与初始化,for(i=1;i=5;i+)printf(%s:%dn,listi.name,listi.count);printf(%s:%dn,list0.name,list0.count);,2
13、023/11/7,19,8.1 结构体,1.结构体指针变量的定义,结构体指针变量定义的一般形式:struct 结构体名*指针变量名;,struct date int year,month,day;*q;,例如:struct student*p;,p是指向struct student结构体变量的指针变量,8.1.3 结构体的指针,2023/11/7,20,8.1 结构体,8.1.3 结构体的指针,2.结构体成员的三种引用形式,用结构体变量名的引用形式:d.year d.month d.day,struct date int year,month,day;d,*p=,用结构体指针变量的引用形式:(
14、*p).year(*p).month(*p).day p-year p-month p-day,“-”是指向结构体成员运算符,优先级为一级,2023/11/7,21,8.1 结构体,8.1.3 结构体的指针,【例】输入今天的日期,然后输出该日期。main()struct date/*在函数中定义结构体类型*/int year,month,day;today,*p=,2023/11/7,22,结构体类型解决了如何描述一个逻辑上相关,但数据类型不同的一组分量的集合。在需要节省内存储空间时,c语言还提供了一种由若干个不同类型的数据项组成,但共享同一存储空间的构造类型。,8.2 共用体,8.2.1 共
15、用体与共用体类型的定义,共用体一种构造类型数据 共用体由若干不同类型的数据项组成,构成共用体的各个数据项称为共用体成员。,由于共享的特性,只有最新存储的数据是有效的。,2023/11/7,23,union 共用体名 数据类型1 成员名1;数据类型2 成员名2;数据类型n 成员名n;,8.2 共用体,8.2.1 共用体与共用体类型的定义,共用体类型定义的一般形式:,union为关键字;共用体名是用户定义的类型标识。中是组成该共用体的成员。成员的数据类型可以是C语言所允许的任何数据类型。,2023/11/7,24,例如:union utype int i;char ch;long l;char c
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 培训教材 课件
链接地址:https://www.31ppt.com/p-6503808.html