━━结构体、枚举类型.ppt
《━━结构体、枚举类型.ppt》由会员分享,可在线阅读,更多相关《━━结构体、枚举类型.ppt(31页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C+程序设计程序设计第第4章章(4)结构体、枚举类型结构体、枚举类型1主要内容主要内容l结构体类型的定义结构体类型的定义l结构体变量的定义结构体变量的定义l结构体变量的使用结构体变量的使用l结构体数组结构体数组l结构体中的静态成员结构体中的静态成员l位域(选读)位域(选读)l共同体(选读)共同体(选读)l枚举类型的定义枚举类型的定义l枚举变量的定义和使用枚举变量的定义和使用2结构体类型的定义结构体类型的定义l结构体属于构造数据类型结构体属于构造数据类型:数组是一组相同类型数据组成的集合体;结构体是若干个不同类型数据组成的集合体。数组是一组相同类型数据组成的集合体;结构体是若干个不同类型数据组成
2、的集合体。结构体弥补了数组的不足,使得一个结构体数据可以包含多种类型的数据项。结构体弥补了数组的不足,使得一个结构体数据可以包含多种类型的数据项。一个结构体类型由若干个不同类型的成员数据项组成,用一个类型名来命名,这样就一个结构体类型由若干个不同类型的成员数据项组成,用一个类型名来命名,这样就可将这些不同类型的成员数据项作为一个整体来处理。可将这些不同类型的成员数据项作为一个整体来处理。【例】【例】描述学生的数据项有:学号、姓名、性别、成绩,可将这些不同类型的数据项描述学生的数据项有:学号、姓名、性别、成绩,可将这些不同类型的数据项 作为一个整体来处理,定义一个名为作为一个整体来处理,定义一个
3、名为 student 的数据类型,包括的数据类型,包括 id、name、sex、score 四个成员数据项,那么四个成员数据项,那么 student 就是一个结构体类型。就是一个结构体类型。struct student int id;char name 10 ;char sex;float score;3结构体类型的定义结构体类型的定义l结构体类型的定义结构体类型的定义:struct 结构体类型名结构体类型名 类型类型 成员名成员名1;类型类型 成员名成员名2;类型类型 成员名成员名 n;/此处分号不可缺少此处分号不可缺少l几点说明:几点说明:结构体类型名结构体类型名按标识符命名规则命名。按标
4、识符命名规则命名。注意:注意:结构体类型是一种构造的数据类型,结构体类型是一种构造的数据类型,定义一个结构体类型,就是定义该结构体中成员的结构框架,编译系统不为任何数定义一个结构体类型,就是定义该结构体中成员的结构框架,编译系统不为任何数据类型分配存储空间,当然也不为结构体类型分配存储空间!据类型分配存储空间,当然也不为结构体类型分配存储空间!结构体成员结构体成员花括号中依次列出组成该结构体类型的各个成员,并对各成员进行类花括号中依次列出组成该结构体类型的各个成员,并对各成员进行类型声明,成员的类型可以是型声明,成员的类型可以是C+中任意基本数据类型,也可以是已定义的构造数据类中任意基本数据类
5、型,也可以是已定义的构造数据类型。型。注意:注意:声明成员时,不能指定其存储类型为:声明成员时,不能指定其存储类型为:auto、register、extern,因为,因为系统并不为结构体类型分配存储空间,但可以指定成员的存储类型为系统并不为结构体类型分配存储空间,但可以指定成员的存储类型为 static,关于,关于结构体中结构体中 static 静态成员的作用本章后续介绍。静态成员的作用本章后续介绍。4结构体变量的定义结构体变量的定义l结构体变量的定义结构体变量的定义:格式格式1:存储类型存储类型 结构体类型名结构体类型名 变量名变量名1 ,变量名,变量名2 ;格式格式2:存储类型存储类型 s
6、truct 结构体类型名结构体类型名 变量名变量名1 ,变量名,变量名2 ;l几点说明:几点说明:存储类型有存储类型有 auto、static、register、extern 四种。当存储类型省略时,对于局部四种。当存储类型省略时,对于局部结构体变量,表示结构体变量,表示auto。定义结构体变量时,系统按结构体类型中的成员框架为其分配一段连续的存储空间,定义结构体变量时,系统按结构体类型中的成员框架为其分配一段连续的存储空间,依次存放各个成员的数据,所占内存的字节数为各个成员所占字节数之和。依次存放各个成员的数据,所占内存的字节数为各个成员所占字节数之和。结构体变量的作用域与一般变量的作用域相
7、同,全局结构体变量具有文件作用域,局结构体变量的作用域与一般变量的作用域相同,全局结构体变量具有文件作用域,局部结构体变量具有块作用域。部结构体变量具有块作用域。结构体变量的生存期也与一般变量的生存期相同,结构体变量的生存期也与一般变量的生存期相同,全局全局结构体变量结构体变量、static静态局部静态局部结构体变量结构体变量存放在静态区,存放在静态区,auto局部局部结构体变量结构体变量存放在栈区。存放在栈区。5结构体变量的定义结构体变量的定义 定义结构体变量的方法有三种:定义结构体变量的方法有三种:先定义结构体类型,再定义结构体类型的变量。先定义结构体类型,再定义结构体类型的变量。定义结构
8、体类型的同时,紧跟着定义结构体类型的变量。定义结构体类型的同时,紧跟着定义结构体类型的变量。定义无名的结构体类型,并同时定义结构体类型的变量。定义无名的结构体类型,并同时定义结构体类型的变量。【例】【例】#include struct person int id;char name 10 ;struct date int year;int month;int day;d1 ;/定义结构体类型的同时,紧跟着定义其变量。定义结构体类型的同时,紧跟着定义其变量。struct int hour;/无名结构体类型无名结构体类型 int minute;int second;t1,t2 ;/定义无名结构体类
9、型,并同时定义其变量。定义无名结构体类型,并同时定义其变量。person p1,p2;/先定义结构体类型,再定义结构体变量。先定义结构体类型,再定义结构体变量。6结构体变量的使用结构体变量的使用l结构体变量的初始化:结构体变量的初始化:与数组类同,在定义结构体变量时,用花括号将每一个成员与数组类同,在定义结构体变量时,用花括号将每一个成员的初值括起来赋给该变量。注意,花括号中列出初值其类型和顺序必须与结构体类的初值括起来赋给该变量。注意,花括号中列出初值其类型和顺序必须与结构体类型定义中所声明的成员一一对应。型定义中所声明的成员一一对应。【例】【例】student s1=408001 ,“张小
10、笑张小笑”,F,98 ;l结构体变量成员的引用:(使用成员运算符结构体变量成员的引用:(使用成员运算符“.”)结构体变量名结构体变量名.成员名成员名l几点说明:几点说明:同类型的结构体变量之间可以相互赋值,这种赋值等同于各个成员的依次赋值。同类型的结构体变量之间可以相互赋值,这种赋值等同于各个成员的依次赋值。结构体变量不能直接进行输入结构体变量不能直接进行输入/输出,它的每一个成员能否直接进行输入输出,它的每一个成员能否直接进行输入/输出,取决输出,取决于其成员的类型,若是基本数据类型或字符数组,则可以直接进行输入于其成员的类型,若是基本数据类型或字符数组,则可以直接进行输入/输出。输出。7【
11、例】【例】#include#includestruct student int id;char name 10 ;char sex;float score;void main()student s1=408001 ,“张小笑张小笑”,m ,98 ;cout“s1=”s1.id t s1.name t s1.sex t s1.score endl;student s2,s3;cout s2.id s2.name s2.sex s2.score;cout“s2=”s2.id t s2.name t s2.sex t s2.score endl;s3=s2;cout“s3=”s3.id t s3.n
12、ame t s3.sex t s3.score endl;s3.id=408003;strcpy(s3.name,“王嘻嘻王嘻嘻”);cout“s3=”s3.id t s3.name t s3.sex t s3.score endl;运行:运行:s1=408001 张小笑张小笑 m 98请输入学号请输入学号、姓名、姓名、性别、性别(m/f)、成绩、成绩:408002 王哈哈王哈哈 f 88 s2=408002 王哈哈王哈哈 f 88s3=408002 王哈哈王哈哈 f 88 s3=408003 王嘻嘻王嘻嘻 f 888结构体变量的使用结构体变量的使用 结构体中成员的类型可以是结构体中成员的类型
13、可以是C+中任意基本数据类型,也可以是已定义的构造数据类中任意基本数据类型,也可以是已定义的构造数据类型,因此当然可以是已定义的结构体类型,当要访问嵌套在内层的结构体成员时,型,因此当然可以是已定义的结构体类型,当要访问嵌套在内层的结构体成员时,同样使用成员运算符同样使用成员运算符“.”来实现。来实现。【例】【例】#includestruct date int year;int month;int day;struct student int id;char name 10 ;char sex;date birthday;float score;void main()student s=408
14、001 ,“张小笑张小笑”,m ,1991,5,15 ,98 ;cout s.id t s.name t s.sex t t;cout t t s.score endl;运行:运行:408001 张小笑张小笑 m 1991 5 15 98 id name sex birthday score year month daystudent9结构体变量的使用结构体变量的使用 结构体变量与一般变量一样,可以作为函数的参数,同样结构体类型也可以作为函数结构体变量与一般变量一样,可以作为函数的参数,同样结构体类型也可以作为函数返回值的类型。返回值的类型。【例】【例】#includestruct compl
15、ex float real ,image;/定义一个表示复数的结构体类型定义一个表示复数的结构体类型void swap1(complex c1 ,complex c2 )complex t;t=c1;c1=c2;c2=t;void swap2(complex&c1 ,complex&c2 )complex t;t=c1;c1=c2;c2=t;complex add(complex c1 ,complex c2 )/两个复数相加,返回的和也是复数两个复数相加,返回的和也是复数 complex t;t.real=c1.real+c2.real;t.image=c1.image+c2.image;r
16、eturn t;10void main()complex c1=5,7 ,c2=3,2 ,c3;cout “c1=(”c1.real “,”c1.image “i)n”;cout “c2=(”c2.real “,”c2.image “i)nn”;swap1(c1,c2);cout “c1=(”c1.real “,”c1.image “i)n”;cout “c2=(”c2.real “,”c2.image “i)nn”;swap2(c1,c2);cout “c1=(”c1.real “,”c1.image “i)n”;cout “c2=(”c2.real “,”c2.image “i)nn”;c
17、3=add(c1,c2);cout “c3=(”c3.real “,”c3.image “i)n”;运行:运行:c1=(5,7i)c2=(3,2i)c1=(5,7i)c2=(3,2i)c1=(3,2i)c2=(5,7i)c3=(8,9i)11结构体数组结构体数组l结构体数组:结构体数组:数组是一组相同类型的元素组成的集合体,数组是一组相同类型的元素组成的集合体,而数组元素的类型当然可而数组元素的类型当然可以是已定义的结构体类型,这种由结构体变量组成的数组称为结构体数组。以是已定义的结构体类型,这种由结构体变量组成的数组称为结构体数组。【例】(结构数组)【例】(结构数组)#includestru
18、ct student int id;char name 10 ;char sex 4 ;float score;void input(student&s )cout s.id s.name s.sex s.score;void output(student&s )cout “学号学号=”s.id “t姓名姓名=”s.name;cout “t性别性别=”s.sex “t成绩成绩=”s.score endl;12void sort(student s ,int n )int i,j;student t;for (i=0 ;in-1 ;i+)for (j=i+1 ;jn ;j+)if (s i.sc
19、ore s j.score )t=s i ;s i =s j ;s j =t;void main()int i;student s 4 ;for (i=0 ;i4 ;i+)input(s i );cout “排序前:排序前:n”;for (i=0 ;i4 ;i+)output(s i );sort(s,4 );cout “排序后:排序后:n”;for (i=0 ;i4 ;i+)output(s i );运行:运行:请输入学号、姓名、性别、成绩请输入学号、姓名、性别、成绩:408001 王哈哈王哈哈 男男 65 请输入学号、姓名、性别、成绩请输入学号、姓名、性别、成绩:408002 李依依李依依
20、 女女 97 请输入学号、姓名、性别、成绩请输入学号、姓名、性别、成绩:408003 张晓晓张晓晓 男男 71 请输入学号、姓名、性别、成绩请输入学号、姓名、性别、成绩:408004 孟虎虎孟虎虎 女女 83 排序前排序前:学号学号=408001 姓名姓名=王哈哈王哈哈 性别性别=男男 成绩成绩=65学号学号=408002 姓名姓名=李依依李依依 性别性别=女女 成绩成绩=97学号学号=408003 姓名姓名=张晓晓张晓晓 性别性别=男男 成绩成绩=71学号学号=408004 姓名姓名=孟虎虎孟虎虎 性别性别=女女 成绩成绩=83排序后排序后:学号学号=408002 姓名姓名=李依依李依依 性
21、别性别=女女 成绩成绩=97学号学号=408004 姓名姓名=孟虎虎孟虎虎 性别性别=女女 成绩成绩=83学号学号=408003 姓名姓名=张晓晓张晓晓 性别性别=男男 成绩成绩=71学号学号=408001 姓名姓名=王哈哈王哈哈 性别性别=男男 成绩成绩=6513【例】(有三位侯选人,输入各张选票上得票人的名字,统计出各人的得票数。【例】(有三位侯选人,输入各张选票上得票人的名字,统计出各人的得票数。)#include#includestruct person char name 10 ;int count;void main()int i;char name 10 ;person lead
22、er 3 =“王哈哈王哈哈”,0 ,“肖嘻嘻肖嘻嘻”,0,“乐咪咪乐咪咪”,0 ;cout name;while(strcmp(name,“0”)!=0 )for (i=0;i name;cout “统计结果:统计结果:n”;for (i=0;i3;i+)cout leader i.name “=”leader i.count “tt”;cout 结构体指针结构体指针 -成员名成员名 格式格式2:通过点成员运算符通过点成员运算符.(*结构体指针)结构体指针).成员名成员名16【例】【例】#includestruct student int id;char name 10 ;float scor
23、e;void main()student s=408001 ,“张小笑张小笑”,98 ;student *p=&s;cout “s=”s.id t s.name t s.score endl;cout “s=”(*p).id t (*p).name t (*p).score endl;cout “s=”id t name t score endl;运行:运行:s=408001 张小笑张小笑 98s=408001 张小笑张小笑 98s=408001 张小笑张小笑 98408001张小笑张小笑98idnamescoresp17【例】(结构体中的【例】(结构体中的static静态成员)静态成员)#i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 结构 枚举 类型
限制150内