C++程序设计第6章构造数据类型_第1页
C++程序设计第6章构造数据类型_第2页
C++程序设计第6章构造数据类型_第3页
C++程序设计第6章构造数据类型_第4页
C++程序设计第6章构造数据类型_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、12022-6-12构造数据类型构造数据类型16.1 6.1 结构体类型结构体类型6.2 6.2 联合体联合体6.3 6.3 枚举类型枚举类型22022-6-12构造数据类型构造数据类型6.1 结构体类型结构体类型,在结构体,在结构体中可以包含若干个不同数据类型和不同意义的数据中可以包含若干个不同数据类型和不同意义的数据项,从而使这些数据项组合起来反映某一个信息。项,从而使这些数据项组合起来反映某一个信息。用户自定义的数据类型可以与用户自定义的数据类型可以与intint、doubledouble等等基本数据类型一样,用来作为定义其他变量的数据基本数据类型一样,用来作为定义其他变量的数据类型。类

2、型。 结构体类型的概念结构体类型的概念32022-6-12构造数据类型构造数据类型struct struct 结构体名结构体名 数据类型成员名数据类型成员名1 1; 数据类型成员名数据类型成员名2 2; : 数据类型成员名数据类型成员名n n; 在大括号中的内容也称为在大括号中的内容也称为“成员表列成员表列”或或“域表域表”。数据。数据类型可以是类型可以是基本类型、数组、指针、结构体基本类型、数组、指针、结构体等类型;等类型;结构体类型的声明结构体类型的声明42022-6-12构造数据类型构造数据类型struct Student / /学生信息结构体学生信息结构体 int num; /学号学号

3、 char name20; / /姓名姓名 char sex; /性别性别 int age; /年龄年龄 float score; /成绩成绩 char addr30; /住址住址; /注意分号不要省略注意分号不要省略例:学生信息结构体例:学生信息结构体52022-6-12构造数据类型构造数据类型结构体类型的特点总结如下:结构体类型的特点总结如下:结构体类型是用户自行构造的。结构体类型是用户自行构造的。它由若干不同的基本数据类型的数据构成。它由若干不同的基本数据类型的数据构成。它属于它属于C+C+语言的一种数据类型,与整型、实型语言的一种数据类型,与整型、实型相当。因此,声明它时不分配空间。相

4、当。因此,声明它时不分配空间。结构体类型的特点结构体类型的特点62022-6-12构造数据类型构造数据类型结构体类型变量的定义结构体类型变量的定义一、先定义结构体类型再定义变量名一、先定义结构体类型再定义变量名 这是这是C+C+语言中定义结构体类型变量最常见语言中定义结构体类型变量最常见的方式,一般语法格式如下:的方式,一般语法格式如下:struct 结构体名 成员表列;struct 结构体名 变量名;一般不要!72022-6-12构造数据类型构造数据类型例:例:#include void main()struct Student /学生信息结构体学生信息结构体 int num; char n

5、ame20; char sex; int age; ; Student student1;/定义定义 Student student2=10003,Cao Men, M,20;/初始化初始化 coutsizeof(student1)endl; testStruct.cpp82022-6-12构造数据类型构造数据类型structstruct 结构体名结构体名 成员表列;成员表列; 变量名表列;变量名表列;struct Student int num; char name20; char sex; int age; student1,student2=10003,Cao Men, M,20; 二、

6、在声明类型的同时定义变量二、在声明类型的同时定义变量92022-6-12构造数据类型构造数据类型三、直接定义结构体类型变量三、直接定义结构体类型变量( (无名定义无名定义) )struct /注意没有结构体类型名 成员表列; 变量名表列;l方式3很少使用。提倡先定义类型后定义变量提倡先定义类型后定义变量的方法。l在程序比较简单,结构体类型只在本文件中使用时,也可以用第(2)种方法。102022-6-12构造数据类型构造数据类型结构体成员也可以是一个结构体变量struct Date int month; int day; int year;struct Student int num; char

7、 name20; char sex; int age; Date birthday; char addr30;student1,student2; /Date是结构体类型,birthday是Date类型的成员112022-6-12构造数据类型构造数据类型结构体变量的引用结构体变量的引用可以将一个结构体变量的值赋给另一个具有相同结构可以将一个结构体变量的值赋给另一个具有相同结构的结构体变量。的结构体变量。 student1= student2;可以引用一个结构体变量中的一个成员的值。可以引用一个结构体变量中的一个成员的值。格式:结构体变量名格式:结构体变量名.成员名成员名student1.num

8、=10010; 其中其中.是成员访问运算符,见是成员访问运算符,见p21。不能将一个结构体变量作为一个整体进行输入和输出,不能将一个结构体变量作为一个整体进行输入和输出,只能对结构体变量中的各个成员分别进行输入和输出。只能对结构体变量中的各个成员分别进行输入和输出。coutstudent1; /错误错误coutstudent1.num; /正确正确122022-6-12构造数据类型构造数据类型如果成员本身也是一个结构体类型,则要用若干个如果成员本身也是一个结构体类型,则要用若干个成员运算符成员运算符,一级一级地找到最低一级的成员。一级一级地找到最低一级的成员。 coutstudent1.bir

9、thday.month;对结构体变量的成员可以像普通变量一样进行各种对结构体变量的成员可以像普通变量一样进行各种运算。运算。 sumstudent1.scorestudent2.score;可以引用结构体变量成员的地址,也可以引用结构可以引用结构体变量成员的地址,也可以引用结构体变量的地址。体变量的地址。 cout&student1; cout&student1.age;132022-6-12构造数据类型构造数据类型结构体数组结构体数组 结构体数组与以前介绍过的数值型数组的不同之结构体数组与以前介绍过的数值型数组的不同之处在于:处在于: 每个每个数组元素数组元素都是一个都是一个

10、结构体类型结构体类型的数据,的数据,它们都分别包括各个成员项。它们都分别包括各个成员项。1. 1. 定义结构体数组定义结构体数组struct Student /声明结构体类型声明结构体类型Student int num;char name20;char sex;int age;Student stu3; /定义定义Student类型的数组类型的数组stu142022-6-12构造数据类型构造数据类型2 2 结构体数组初始化结构体数组初始化 student stu23=10101,Li Lin,M,18, 10102, Zhang Fun, M,19, 10104, Wang Min,F ;15

11、2022-6-12构造数据类型构造数据类型结构体数组应用举例结构体数组应用举例struct Person char name20; int count;void main( ) Person leader3=Li,0, Zhang,0, Sun,0; 设有设有3 3个候选人,最终只能有个候选人,最终只能有1 1人当选为领导。今有人当选为领导。今有1010个人参加投票,从键盘先后输入这个人参加投票,从键盘先后输入这1010个人所投的候选人的个人所投的候选人的名字名字,要求最后输出这,要求最后输出这3 3个候选人的个候选人的得票得票结果。结果。testStructArray.cpp162022-6

12、-12构造数据类型构造数据类型 int i,j; char leader_name20; for(i=0;ileader_name; /先后输入10张票上所写的姓名 for(j=0;j3;j+) /将票上姓名与3个候选人的姓名比较 if(strcmp(leader_name,)=0) leaderj.count+; for(i=0;i3;i+) :; coutleaderi.count-成员名。成员名。 如:如:s-nums-num访问成员的第三种方法:访问成员的第三种方法:结构体变量名结构体变量名. .成员名。如:成员名。如:stude

13、nt1.numstudent1.num192022-6-12构造数据类型构造数据类型例:例:#include void main()struct Student int num; char name20; char sex; int age; ; Student student1=10003,Cao Men, M,20; Student *s=&student1; cout(*s).num,(*s)name, sex, student1.ageendl;1003,Cao Men,M,20testStructPoint.cpp202022-6-12构造数据类型构造数据类型*结构体指针的应

14、用(结构体指针的应用(自学自学) 用结构体指针构成链表用结构体指针构成链表 链表是一种常见的重要的数据结构,最简单单向链表结构:链表是一种常见的重要的数据结构,最简单单向链表结构:链表有一个链表有一个“头指针头指针”变量,图中以变量,图中以head表示,它存放表示,它存放一个地址。该地址指向一个元素。链表中的每一个元素称为一个地址。该地址指向一个元素。链表中的每一个元素称为“结点结点”,每个结点都应包括两个部分:,每个结点都应包括两个部分: 一是用户需要用的一是用户需要用的实际数据,二是下一个结点的地址。实际数据,二是下一个结点的地址。212022-6-12构造数据类型构造数据类型链表中链表中

15、各元素在内存中的存储单元可以是在内存中的存储单元可以是不连续的。要找。要找某一元素,可以先找到上一个元素,根据它提供的下一元素地某一元素,可以先找到上一个元素,根据它提供的下一元素地址找到下一个元素。可利用址找到下一个元素。可利用结构体变量和和指针来实现来实现struct Student int num;/实际数据1 float score;/实际数据2 Student *next; /存放下一结点地址的指针变量;222022-6-12构造数据类型构造数据类型例:创建下图的链表例:创建下图的链表 每一个结点都属于每一个结点都属于StudentStudent类型,在它的成员类型,在它的成员nex

16、tnext中存放中存放下一个结点的地址,程序设计者不必知道各结点的具体地址,只下一个结点的地址,程序设计者不必知道各结点的具体地址,只要保证能将下一个结点的地址放到前一结点的成员要保证能将下一个结点的地址放到前一结点的成员nextnext中即可。中即可。createLinkList.cpp232022-6-12构造数据类型构造数据类型#include struct Student long num; float score; Student *next;void main() Student *head,*p; Student a=31001,89.5,b=31003,90,c=31007,8

17、5; head=&a; /将结点将结点a的起始地址赋给头指针的起始地址赋给头指针head a.next=&b;/将结点将结点b的起始地址赋给的起始地址赋给a结点的结点的next成员成员 b.next=&c; c.next=NULL; /结点的结点的next成员不存放其他结点地址成员不存放其他结点地址 p=head; /使使p指针指向指针指向a结点结点 do coutnum scorenext; /使使p指向下一个结点指向下一个结点 while(p!=NULL); /输出完输出完c结点后结点后p的值为的值为NULL 242022-6-12构造数据类型构造数据类型*结构体类

18、型数据作为函数参数结构体类型数据作为函数参数将一个结构体变量中的数据传递给另一个函数:将一个结构体变量中的数据传递给另一个函数: (1) 用结构体变量名作参数用结构体变量名作参数(传值调用)。一般较少用这。一般较少用这种方法。种方法。(2) 用指向结构体变量的指针作实参,将结构体变量的用指向结构体变量的指针作实参,将结构体变量的地址传给形参地址传给形参(传址调用) 。(3) 用结构体变量的引用变量作函数参数用结构体变量的引用变量作函数参数(引用调用) 。252022-6-12构造数据类型构造数据类型#include #include struct Student int num; char n

19、ame20; float score3;void print(Student stu) coutstu.num stu.score0 stu.score1 stu.score2endl;void main() Student stu; stu.num=100; strcpy(,Li Fung); stu.score0=67.5; stu.score1=89; stu.score2=78.5; print(stu); testStructFun.cpp262022-6-12构造数据类型构造数据类型#include struct Student int num;

20、char name20; float score3;stu=12345,Li Fung,67.5,89,78.5;void print(Student *stu) coutnum name score0 score1 score2endl;void main() print(&stu); testStructFun1.cpp272022-6-12构造数据类型构造数据类型#include struct Student int num; char name20; float score3;stu=12345,Li Fung,67.5,89,78.5;void print(Student &

21、amp;stu) coutstu.num stu.score0 stu.score1 stu.score2-成员名。成员名。 如:如:s-is-i联合体变量名联合体变量名. .成员名。如:成员名。如: da1.i.i2022-6-12构造数据类型32共用体共用体类型数据的特点类型数据的特点 使用共用体变量的目的是希望用同一个内存段存放使用共用体变量的目的是希望用同一个内存段存放几种不同类型的数据。但请注意:几种不同类型的数据。但请注意: 在每一瞬时只能在每一瞬时只能存放其中一种,而不是同时存放几种。存放其中一种,而不是同时存放几种。 能够访问的是共用体变量中最后一次被赋值的成

22、员,能够访问的是共用体变量中最后一次被赋值的成员,在对一个新的成员赋值后原有的成员就失去作用。在对一个新的成员赋值后原有的成员就失去作用。 共用体变量的地址和它的各成员的地址都是同一地共用体变量的地址和它的各成员的地址都是同一地址。址。 不能对共用体变量名赋值;不能企图引用变量名来不能对共用体变量名赋值;不能企图引用变量名来得到一个值;不能在定义共用体变量时对它初始化;得到一个值;不能在定义共用体变量时对它初始化;不能用共用体变量名作为函数参数。不能用共用体变量名作为函数参数。332022-6-12构造数据类型构造数据类型例例6.10#includeunion data int i; char ch2;void main()data da1;cinda1.i;coutda1.chendl;342022-6-12构造数据类型构造数据类型6.3 枚举类型枚举类型如果一个

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论