北京科技大学c语言第7章

上传人:san****019 文档编号:70642205 上传时间:2019-01-17 格式:PPT 页数:86 大小:921.51KB
返回 下载 相关 举报
北京科技大学c语言第7章_第1页
第1页 / 共86页
北京科技大学c语言第7章_第2页
第2页 / 共86页
北京科技大学c语言第7章_第3页
第3页 / 共86页
北京科技大学c语言第7章_第4页
第4页 / 共86页
北京科技大学c语言第7章_第5页
第5页 / 共86页
点击查看更多>>
资源描述

《北京科技大学c语言第7章》由会员分享,可在线阅读,更多相关《北京科技大学c语言第7章(86页珍藏版)》请在金锄头文库上搜索。

1、1,第7章 其他自定义数据类型,北京科技大学 计算机系,C 语言程序设计,2019/1/17,2,第7章 结构体与共用体,主要内容 7.1 构造数据类型概述 7.2 结构体类型 7.3 共用体类型 7.4 枚举类型 7.5 类型重命名 7.6 案例分析,2019/1/17,3,一个学生的信息有学号、姓名、性别、年龄、住址、成绩等。 一本图书的信息有分类编号、书名、作者、出版社、出版日期、价格、库存量等。 如何描述这些类型不同的相关数据?,7.1 构造数据类型概述,?,信息管理,结构体一种构造类型数据 结构体由若干不同类型的数据项组成, 构成结构体的各个数据项称为结构体成员。,2019/1/17

2、,4,struct 结构体名 数据类型1 成员名1; 数据类型2 成员名2; 数据类型n 成员名n; ;,7.2 结构体类型,7.2.1 结构体与结构体类型的定义,结构体类型定义的一般形式:,struct为关键字; 结构体名是用户定义的类型标识。 中是组成该结构体的成员。成员的数据类型可以是C语言所允许的任何数据类型。,2019/1/17,5,例如图书类型的定义: struct bookcard char num10; /*图书分类编号是字符数组类型*/ char name30; /*书名是字符数组类型*/ char author30; /*作者是字符数组类型*/ char publisher

3、60; /*出版社是字符数组类型*/ float price; /*价格是单精度实型*/ int n; /*库存量是整型*/ ;,7.2 结构体类型,7.2.1 结构体与结构体类型的定义,2019/1/17,6,例如学生类型的定义: struct student char num8; /* 学号是字符数组类型 */ char name30; /* 姓名是字符数组类型 */ char sex; /* 性别是字符型 */ int age; /* 年龄是整型 */ char addr60; /* 住址是字符数组类型 */ int score6; /* 成绩是整型数组类型 */ ;,7.2 结构体类型

4、,7.2.1 结构体与结构体类型的定义,2019/1/17,7,7.2 结构体类型,7.2.2 结构体变量的定义、引用与初始化,1. 结构体类型变量的定义,利用已定义的结构体类型名定义变量 struct 结构体名 变量名表; 例如: struct bookcard book1100; struct student s30, t1, t2;,结构体变量的各个成员在内存中占用连续存储区域,结构体变量所占内存大小为结构体中每个成员所占用内存的长度之和。,2019/1/17,8,类型与变量是不同的概念。 应先定义一个结构体类型,而后再定义结构体变量。 系统对类型不分配空间,仅对变量分配空间。 只能对变

5、量赋值、存取或运算,而不能对一个类型赋值、存取或运算。,成员也可以是结构体变量。,对结构中的成员,可以单独使用,它的作用与地位相当于普通变量。 成员名可与程序中的变量名相同时,也可与不同结构体类型的成员名相同,二者代表不同的对象。,struct date int year,month,day; struct student char num8; char name30; char sex; struct date birthday; /* 成员为结构体类型 */ char addr60; int score6; ;,7.2 结构体类型,结构体类型与变量的说明,2019/1/17,9,7.2.2

6、 结构体变量的定义、引用与初始化,1. 结构体类型变量的定义,在定义结构体类型的同时定义变量,例如:struct student char num8,name20,sex; int age; float score; st30;,struct 结构体名 成员定义表; 变量名表;,2019/1/17,10,1. 结构体类型变量的定义,直接定义结构体类型变量,例如:struct char num8,name20,sex; int age; float score; st30, a, b, c;,struct 成员定义表; 变量名表;,7.2.2结构体变量的定义、引用与初始化,2019/1/17,1

7、1,2. 结构体变量的初始化,【例7-4】结构体变量的初始化。 struct date int year, month, day; struct student char num8, name20, sex; struct date birthday; float score; a=“40826011“,“Li ming“,M,1991,2,9,87.5, b=“40826025“,“Zhang qiang“,F,1990,5,12,85,c;,如果初值个数少于结构体成员个数, 则将无初值对应的成员赋以0值。 如果初值个数多于结构体成员个数, 则编译出错。,7.2.2结构体变量的定义、引用与初

8、始化,2019/1/17,12,2. 结构体变量的初始化,【例7-5】结构体数组的初始化。 struct s char num8,name20,sex; float score; stu3=“40826011“,“Li ming“,M,87.5, “40826025“,“Zhang qiang“,F,85, “40826032“,“Wang xinping“,F,90;,元素的个数可以省略,根据赋初值时 结构体常量的个数确定数组元素的个数,7.2.2结构体变量的定义、引用与初始化,2019/1/17,13,3. 结构体变量的运算,用sizeof运算符计算结构体变量所占内存空间,struct d

9、ate int year, month, day; struct student char num8, name20, sex; struct date birthday; float score; a;,sizeof(a) 的结果为8+20+1+12+4=45 sizeof(struct student) 的结果为45,7.2.2结构体变量的定义、引用与初始化,2019/1/17,14,3. 结构体变量的运算,同类型结构体变量之间的赋值运算,结构体变量之间进行赋值时,系统将按成员一一对应赋值。,struct date int year, month, day; struct student

10、char num8, name20, sex; struct date birthday; float score; a=“40826011“,“Li ming“,M,1977,12,9,87.5,b,c; c = a;,7.2.2结构体变量的定义、引用与初始化,2019/1/17,15,3. 结构体变量的运算,对结构体变量进行取址运算,struct date int year, month, day; struct student char num8, name20, sex; struct date birthday; float score; a;,对结构体变量a进行 &a 运算,可以得

11、到a的首地址,它是结构体类型指针。,7.2.2结构体变量的定义、引用与初始化,2019/1/17,16,4. 结构体变量成员的引用,结构体变量成员引用的一般形式: 结构体变量名.成员名,结构体变量a的各成员可分别表示为a.num、a.name、a.sex、a.birthday、a.score,struct date int year, month, day; struct student char num8, name20, sex; struct date birthday; float score; a;,“.”是分量运算符,运算级别最高。,a.birthday.year a.birthd

12、ay.month a.birthday.day,结构体变量的各个成员可进行何种运算,由该成员的数据类型决定,7.2.2结构体变量的定义、引用与初始化,2019/1/17,17,【例7-6】编写一个统计选票的程序。 struct candidate char name20; /* name为候选人姓名 */ int count; /* count为候选人得票数 */ list =“invalid“,0,“Zhang“,0,“Wang“,0, “Li“,0,“Zhao“,0,“Liu“,0;,7.2.2结构体变量的定义、引用与初始化,2019/1/17,18,main( ) int i,n; pr

13、intf(“Enter voten“); scanf(“%d“, /* 输入所投候选人编号 */ ,7.2.2结构体变量的定义、引用与初始化,2019/1/17,19,for (i=1; i=5; i+) printf(“%s:%dn“,listi.name,listi.count); printf(“%s:%dn“,list0.name,list0.count); ,7.2.2结构体变量的定义、引用与初始化,2019/1/17,20,7.2 结构体类型,1. 结构体指针变量的定义,结构体指针变量定义的一般形式: struct 结构体名 *指针变量名;,struct date int year

14、, month, day;*q;,例如: struct student *p;,p是指向struct student结构体变量的指针变量,7.2.3 结构体的指针,2019/1/17,21,7.2.3 结构体的指针,2. 结构体成员的三种引用形式,用结构体变量名的引用形式: d.year d.month d.day,struct date int year, month, day;d, *p=,用结构体指针变量的引用形式: (*p).year (*p).month (*p).day p-year p-month p-day,“-”是指向结构体成员运算符,优先级为一级,p=&d.year,201

15、9/1/17,22,【例】输入今天的日期,然后输出该日期。 main( ) struct date /* 在函数中定义结构体类型 */ int year, month, day; today,*p= ,7.2.3 结构体的指针,Enter today date(YYYY/MM/DD):2006/06/23 Today:2006/6/23,2019/1/17,23,3. 指向结构体数组的指针,【例7-7】利用结构体指针输出一组化学 元素名称及其原子量。 struct list int i; char name4; float w; tab4=1,“H“,1.008,2,“He“,4.0026, 3,“Li“,6.941,4,“Be“,9.01218;,7.2.3 结构体的指针,2019/1/17,24,3. 指向结构体数组的指针,main( ) struct list *p; printf(“NotNametAtomic Weightn“); for (p=tab; pi, p-name, p-w); ,N

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

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

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