《C语言综合实验》2构造数据类型.ppt
《《C语言综合实验》2构造数据类型.ppt》由会员分享,可在线阅读,更多相关《《C语言综合实验》2构造数据类型.ppt(44页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C语言综合实验构造数据类型构造数据类型主要内容主要内容l结构体结构体 结构体的定义及引用结构体的定义及引用 结构体数组结构体数组 结构体与指针结构体与指针l 共用体共用体l 枚举类型枚举类型l 类型标识符的自定义类型标识符的自定义l结构体与链表结构体与链表1.结构体的定义及引用结构体的定义及引用有时候需要有时候需要将不同类型的数据组合成一个有机的整体将不同类型的数据组合成一个有机的整体,这些组合在一个整体中的数据是互相联系的。这些组合在一个整体中的数据是互相联系的。如一个学生的信息包括学号如一个学生的信息包括学号、姓名、性别、年龄、成绩、地址等。姓名、性别、年龄、成绩、地址等。numnames
2、exagescoreaddr08001Li MingM1996.5武汉武汉int num;int num;char name20;char name20;char sex;char sex;int age;int age;float score;float score;char addr30;char addr30;应当把它们组织成一个组合项,在应当把它们组织成一个组合项,在一个组合项内包含若干个类型不同一个组合项内包含若干个类型不同(或或相同相同)的数据项。的数据项。语言提供了这种数据结构:语言提供了这种数据结构:允许允许用户将不同类型的数据组合成一个有机用户将不同类型的数据组合成一个有机的
3、整体,这些数据互相联系的整体,这些数据互相联系;这种数据这种数据结构称为结构称为结构体结构体结构体结构体(structure)。结构体的定义是指定义相应的数据结构及相应的变量。结构体的定义是指定义相应的数据结构及相应的变量。步骤:步骤:先定义一个结构体类型标识符先定义一个结构体类型标识符;用该标识符去定义相应的变量用该标识符去定义相应的变量。structstruct studentstudent int num;char name20;char sex;int age;float score;char addr30;;说明:说明:、structstruct是关键字,不能省略是关键字,不能省略是
4、关键字,不能省略是关键字,不能省略:表示:表示定义结构体;定义结构体;、studentstudent是用户自己定义的结构体是用户自己定义的结构体是用户自己定义的结构体是用户自己定义的结构体类型标识符,即该结构体名;类型标识符,即该结构体名;类型标识符,即该结构体名;类型标识符,即该结构体名;、结构体中具体每项的定义,由、结构体中具体每项的定义,由、结构体中具体每项的定义,由、结构体中具体每项的定义,由 和和和和 括起来。语言中把用户自己定括起来。语言中把用户自己定括起来。语言中把用户自己定括起来。语言中把用户自己定义的数据项称为义的数据项称为义的数据项称为义的数据项称为成员成员成员成员(或称为
5、域或称为域或称为域或称为域),即每个成员也叫结构体中的一个域。即每个成员也叫结构体中的一个域。即每个成员也叫结构体中的一个域。即每个成员也叫结构体中的一个域。结构体类型标识符的定义结构体类型标识符的定义定义一个结构体类型的一般形式:定义一个结构体类型的一般形式:structstruct 结构体类型标识符结构体类型标识符结构体类型标识符结构体类型标识符 类型标识符类型标识符1成员名成员名1;类型标识符类型标识符2成员名成员名2;类型标识符类型标识符n成员名成员名n;结构体名结构体名成成员员表表列列结构体类型标识符的定义结构体类型标识符的定义1、定义形式:定义形式:定义形式:定义形式:struct
6、 结构体类型标识符结构体类型标识符结构体类型标识符结构体类型标识符变量名列表变量名列表变量名列表变量名列表;2、定义结构体变量的三种方法:定义结构体变量的三种方法:定义结构体变量的三种方法:定义结构体变量的三种方法:、先定义结构体类型再定义变量名先定义结构体类型再定义变量名先定义结构体类型再定义变量名先定义结构体类型再定义变量名struct student int num;char name20;float score;;struct studentstruct student stu1,stu2;结构体类型名结构体类型名结构体变量名结构体变量名08001Zhang9208002Li97stu
7、1stu2在定义了结构体变量后,系统会为之分配内存单元。在定义了结构体变量后,系统会为之分配内存单元。sizeof(stu1)=2+20+4=2626结构体变量的定义结构体变量的定义、在定义结构体类型的同时定义变量在定义结构体类型的同时定义变量在定义结构体类型的同时定义变量在定义结构体类型的同时定义变量structstruct 结构体类型标识符结构体类型标识符结构体类型标识符结构体类型标识符 类型标识符类型标识符1成员名成员名1;类型标识符类型标识符2成员名成员名2;类型标识符类型标识符n成员名成员名n;变量名列表变量名列表变量名列表变量名列表;struct student int num;c
8、har name20;float score;stu1,stu2;、直接定义结构体类型变量直接定义结构体类型变量直接定义结构体类型变量直接定义结构体类型变量structstruct 类型标识符类型标识符1成员名成员名1;类型标识符类型标识符2成员名成员名2;类型标识符类型标识符n成员名成员名n;变量名列表变量名列表变量名列表变量名列表;(不出现结构体类型名不出现结构体类型名不出现结构体类型名不出现结构体类型名)struct int num;char name20;float score;stu1,stu2;3、关于结构体类型的几点说明:关于结构体类型的几点说明:关于结构体类型的几点说明:关于结
9、构体类型的几点说明:、类型与变量是不同的概念,不要混淆:、类型与变量是不同的概念,不要混淆:a、只能对变量赋值、存取或运算,而不能对一个类型赋值、只能对变量赋值、存取或运算,而不能对一个类型赋值、存取或运算;存取或运算;b、在编译时,对类型不分配内存空间,只对变量分配空间。在编译时,对类型不分配内存空间,只对变量分配空间。在编译时,对类型不分配内存空间,只对变量分配空间。在编译时,对类型不分配内存空间,只对变量分配空间。、只有在定义变量后,才为该变量开辟存储单元只有在定义变量后,才为该变量开辟存储单元只有在定义变量后,才为该变量开辟存储单元只有在定义变量后,才为该变量开辟存储单元。结构体结构体
10、结构体结构体变量所占的内存长度等于每个成员长度之和变量所占的内存长度等于每个成员长度之和变量所占的内存长度等于每个成员长度之和变量所占的内存长度等于每个成员长度之和;struct student int num;char name20;float score;;sizeof(struct studentstruct student)=26=26、对、对结构体中的成员结构体中的成员结构体中的成员结构体中的成员(“(“域域域域”)”),可以单独使用,可以单独使用,可以单独使用,可以单独使用,它的作用,它的作用与地位相当于普通变量;与地位相当于普通变量;、成员也可以是一个已定义的结构体类型变量成员也
11、可以是一个已定义的结构体类型变量成员也可以是一个已定义的结构体类型变量成员也可以是一个已定义的结构体类型变量:struct date int year;int month;int day;struct student int num;char name20;char sex;struct date birthday;char addr30;sizeof(sizeof(studentstudent)=?注意:结构体变量中各成员按照结构体类型说明的顺序依次存注意:结构体变量中各成员按照结构体类型说明的顺序依次存注意:结构体变量中各成员按照结构体类型说明的顺序依次存注意:结构体变量中各成员按照结构体
12、类型说明的顺序依次存放在一片连续的内存单元中,但它们的长度不同,不能像访问放在一片连续的内存单元中,但它们的长度不同,不能像访问放在一片连续的内存单元中,但它们的长度不同,不能像访问放在一片连续的内存单元中,但它们的长度不同,不能像访问数组元素那样通过下标访问,而是通过它们的名字(即成员名)数组元素那样通过下标访问,而是通过它们的名字(即成员名)数组元素那样通过下标访问,而是通过它们的名字(即成员名)数组元素那样通过下标访问,而是通过它们的名字(即成员名)访问。访问。访问。访问。、成员也可以是指向本结构体类型的指针变量成员也可以是指向本结构体类型的指针变量成员也可以是指向本结构体类型的指针变量
13、成员也可以是指向本结构体类型的指针变量;struct studentstruct student int num;char name20;float score;struct studentstruct student*next*next;、成员名可以与程序中的变量名相同成员名可以与程序中的变量名相同成员名可以与程序中的变量名相同成员名可以与程序中的变量名相同,二者不代表同一对象。,二者不代表同一对象。在定义结构体变量的同时可以给它的全在定义结构体变量的同时可以给它的全部或部分成员赋初值,完成初始化。部或部分成员赋初值,完成初始化。结构体类型名结构体类型名 变量名变量名=初值表列初值表列;st
14、ruct student stu1=10001,“Li Ming”,“男男”,1983,7,1,”武汉理工大学武汉理工大学”;结构体变量的初始化结构体变量的初始化struct student int num;char name20;char sex;struct date int year;int month;int day;birthday;char addr30;注意:要将结构体变量的各成员的值按注意:要将结构体变量的各成员的值按类型说明时的顺序一一对应;所赋的值类型说明时的顺序一一对应;所赋的值可用常量或常量表达式表示;列出的值可用常量或常量表达式表示;列出的值可以少于成员的个数,没有给
15、出的初值,可以少于成员的个数,没有给出的初值,由系统自动赋予缺省值。由系统自动赋予缺省值。struct student timeint hours,minutes,seconds;nowtime=10,30;1、引用形式:引用形式:引用形式:引用形式:结构体变量名结构体变量名结构体变量名结构体变量名.成员成员成员成员名名名名“.”是成员运算符,在所有的运算符中是成员运算符,在所有的运算符中优先级最高优先级最高。struct student int num;char name20;float score;stu1,stu2;stu1.num=10001;stu1.score=95;stu1.na
16、me=Li Ming;strcpystrcpy(stu1.name,Li Ming);结构体变量的引用结构体变量的引用2、不能将一个结构体变量作为一个整体进行输入输出:不能将一个结构体变量作为一个整体进行输入输出:不能将一个结构体变量作为一个整体进行输入输出:不能将一个结构体变量作为一个整体进行输入输出:printf(%d%s%f,stu1);scanf(%d%s%f,&stu1);只能对结构体中的各个成员分别进行输入输出。只能对结构体中的各个成员分别进行输入输出。只能对结构体中的各个成员分别进行输入输出。只能对结构体中的各个成员分别进行输入输出。printf(%d%s%f,stu1.nums
17、tu1.num,stu1.namestu1.name,stu1.scorestu1.score);scanf(%d,&stu1.num&stu1.num);gets(stu1.name);gets(stu1.name);结构体变量的引用结构体变量的引用成员名也是一个变量成员名也是一个变量成员名也是一个变量成员名也是一个变量(称为称为称为称为成员变量成员变量成员变量成员变量),具有自己的数据,具有自己的数据,具有自己的数据,具有自己的数据类型,使用与同类型的变量相同。类型,使用与同类型的变量相同。类型,使用与同类型的变量相同。类型,使用与同类型的变量相同。3、只有在对结构体变量只有在对结构体变量
18、只有在对结构体变量只有在对结构体变量赋值赋值赋值赋值或或或或作为函数参数作为函数参数作为函数参数作为函数参数时才可以对一个时才可以对一个时才可以对一个时才可以对一个结构体变量进行整体操作;结构体变量进行整体操作;结构体变量进行整体操作;结构体变量进行整体操作;(赋值时要求具有相同结构赋值时要求具有相同结构赋值时要求具有相同结构赋值时要求具有相同结构)stu2stu2=stu1;stu1;stu2.num=stu1.num;strcpy(stu2.name,stu1.name);stu2.score=stu1.score;void fun(void fun(studentstudent pxpx
19、););fun(fun(stu1stu1););4、如果成员本身又属于一个结构体类型,则要用若干个成员如果成员本身又属于一个结构体类型,则要用若干个成员如果成员本身又属于一个结构体类型,则要用若干个成员如果成员本身又属于一个结构体类型,则要用若干个成员运算符,一级一级的找到最低一级的成员。运算符,一级一级的找到最低一级的成员。运算符,一级一级的找到最低一级的成员。运算符,一级一级的找到最低一级的成员。只能对最低一只能对最低一只能对最低一只能对最低一级的成员进行赋值、存取或运算级的成员进行赋值、存取或运算级的成员进行赋值、存取或运算级的成员进行赋值、存取或运算;stu1.birthday.yea
20、r=2002;结构体变量的引用结构体变量的引用5、对对对对成员变量可以像普通变量一样进行各种运算成员变量可以像普通变量一样进行各种运算成员变量可以像普通变量一样进行各种运算成员变量可以像普通变量一样进行各种运算(根据其类型根据其类型根据其类型根据其类型决定可以进行的运算决定可以进行的运算决定可以进行的运算决定可以进行的运算)sum=stu1.score+stu2.score;stu1.age+;结构体变量的引用结构体变量的引用6、可以引用结构体变量成员的地址,也可以引用结构体变量可以引用结构体变量成员的地址,也可以引用结构体变量可以引用结构体变量成员的地址,也可以引用结构体变量可以引用结构体变
21、量成员的地址,也可以引用结构体变量的地址;的地址;的地址;的地址;scanf(%d,&stu1.num&stu1.num);printf(%x%x,&stu1&stu1);结构体变量的地址主要用于作函数参数,传递结构体变量结构体变量的地址主要用于作函数参数,传递结构体变量结构体变量的地址主要用于作函数参数,传递结构体变量结构体变量的地址主要用于作函数参数,传递结构体变量的地址;的地址;的地址;的地址;7、在定义结构体变量的同时,可以进行初始化。在定义结构体变量的同时,可以进行初始化。在定义结构体变量的同时,可以进行初始化。在定义结构体变量的同时,可以进行初始化。struct student i
22、nt num;char name20;char sex;char addr30;stu=15001,宋红宋红,M,Beijing;注意:结构体变量的注意:结构体变量的注意:结构体变量的注意:结构体变量的各个初值用大括号各个初值用大括号各个初值用大括号各个初值用大括号、括起来括起来括起来括起来,大括号,大括号,大括号,大括号内各个内各个内各个内各个成员变量的值之间用逗号分隔成员变量的值之间用逗号分隔成员变量的值之间用逗号分隔成员变量的值之间用逗号分隔,其值必须与成,其值必须与成,其值必须与成,其值必须与成员变量一一对应,且员变量一一对应,且员变量一一对应,且员变量一一对应,且数据类型应与成员变量
23、一致数据类型应与成员变量一致数据类型应与成员变量一致数据类型应与成员变量一致。结构体变量的引用结构体变量的引用#include struct student int num;float score;void main()student stu,max;int i;float sum=0;max.score=0;for(i=0;imax.score)max=stu;sum+=stu.score;printf(nMax:%d-%.1fn,max.num,max.score);printf(Sum is:%.1fn,sum);例例例例:输入输入输入输入5 5名学生的学号及成绩,求成绩最好的学生的学号
24、、名学生的学号及成绩,求成绩最好的学生的学号、名学生的学号及成绩,求成绩最好的学生的学号、名学生的学号及成绩,求成绩最好的学生的学号、成绩和所有学生的总成绩。成绩和所有学生的总成绩。成绩和所有学生的总成绩。成绩和所有学生的总成绩。结构体变量的引用结构体变量的引用2.结构体数组结构体数组数组的每个元素都是结构体类型的数据,它们分别包含各个数组的每个元素都是结构体类型的数据,它们分别包含各个成员项。成员项。1、先定义结构体类型,再定义结构体数组先定义结构体类型,再定义结构体数组先定义结构体类型,再定义结构体数组先定义结构体类型,再定义结构体数组struct studentstruct studen
25、t int num;float score;struct studentstruct student stu30stu30;2、定义结构体类型的同时定义结构体数组定义结构体类型的同时定义结构体数组定义结构体类型的同时定义结构体数组定义结构体类型的同时定义结构体数组struct studentstruct student int num;float score;stu30stu30;3、直接定义结构体数组直接定义结构体数组直接定义结构体数组直接定义结构体数组structstruct int num;float score;stustu3030;一般形式:一般形式:一般形式:一般形式:struct
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言综合实验 语言 综合 实验 构造 数据类型
限制150内