第9章用户自己建立数据类型PPT课件_第1页
第9章用户自己建立数据类型PPT课件_第2页
第9章用户自己建立数据类型PPT课件_第3页
第9章用户自己建立数据类型PPT课件_第4页
第9章用户自己建立数据类型PPT课件_第5页
已阅读5页,还剩121页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

1、9.1 定义和使用结构体变量9.2 使用结构体数组9.3 结构体指针9.4 用指针处理链表9.5 共用体类型9.6 使用枚举类型第第9章章 用户自己建立数据类型用户自己建立数据类型19.1 定义和使用结构体变量定义和使用结构体变量9.1.1 自己建立结构体类型9.1.2 定义结构体类型变量9.1.3 结构体变量的初始化和引用2数字字符+数字字符串多种不同类型数据的混合结构结构体数据结构体数据3乘客信息系统,混合结构大数据管理结构体的概念结构体的概念l结构体结构体将不同类型的数据有序组合在一起是用户的自定义数据类型需要先定义再使用4l用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体

2、;l例如,一个学生的学号、姓名、性别、年龄、成绩、家庭地址等项,是属于同一个学生的,因此组成一个组合数据,如student_1的变量,反映它们之间的内在联系;9.1.1 自己建立结构体类型自己建立结构体类型5登机乘客信息管理登机乘客信息管理NoNameAgeSexWeightLuggageMeal1David21M89.9495.2A2Kate14F54.2376.3B3John70M74.2469.6B4Mary46F62.7412.7A编号姓名年龄性别体重行李重量所选套餐登机乘客信息6例例1:1:定义结构体定义结构体struct passenger int no; char name20;

3、 int age; char sex; float weight; float luggage; char meal;编号姓名年龄性别体重行李重量所选套餐7struct Student int num; char name20; char sex; int age; float score; char addr30; ;9.1.1 自己建立结构体类型自己建立结构体类型 由程序设计者指定了一个结构体类型struct Student 它包括num,name,sex,age,score,addr等不同类型的成员8结构体的定义结构体的定义自定义的结自定义的结构体类型名构体类型名结构体类型中结构体类型中

4、成员的名字成员的名字struct是结构是结构体类型的标识体类型的标识分号不能缺!分号不能缺! struct 结构体名 类型标识符1 成员名1; 类型标识符n 成员名n; ;结构体的定义格式:结构体的定义格式:9l说明:(1) 结构体类型并非只有一种,而是可以设计出许多种结构体类型,例如struct Teacherstruct Workerstruct Date 等结构体类型。 各自包含不同的成员9.1.1 自己建立结构体类型自己建立结构体类型10l说明:(2) 成员可以属于另一个结构体类型。 9.1.1 自己建立结构体类型自己建立结构体类型 struct Date int month; int

5、 day; int year; ;struct Stu int num;char name20; char sex;int age; struct Date birthday; char addr30; ;11l说明:(3) 成员可以属于另一个结构体类型。 numnamesexagebirthdayaddrmonthdayyear9.1.1 自己建立结构体类型自己建立结构体类型129.1.2 定义结构体类型变量定义结构体类型变量l前面只是建立了一个结构体类型,它相当于一个模型,并没有定义变量,其中并无具体数据,系统对之也不分配存储单元。l相当于设计好了图纸,但并未建成具体的房屋。为了能在程序中

6、使用结构体类型的数据,应当定义结构体类型的变量,并在其中存放具体的数据。13结构体变量结构体变量l结构体变量结构体变量为自定义结构体数据类型的变量定义结构体类型变量时开辟内存空间在内存所占的存储空间等于各成员存储空间的总和结构体变量定义方式1.先定义结构体类型再定义变量名2.在定义结构体类型的同时定义变量名3.不定义结构体类型名,只定义结构体变量名1. 先声明结构体类型,再定义该类型变量l声明结构体类型struct Student,可以用它来定义变量 struct Student student1,student2;9.1.2 定义结构体类型变量定义结构体类型变量结构体类型名结构体类型名结构体

7、变量名结构体变量名15 student1 student29.1.2 定义结构体类型变量定义结构体类型变量1. 先声明结构体类型,再定义该类型变量l声明结构体类型struct Student,可以用它来定义变量 struct Student student1,student2;10001Zhang XinM 1990.5Shanghai10002Wang LiF2098Beijing161. 先定义结构体类型再定义变量名结构体变量的定义结构体变量的定义struct student student1, student2;结构体类型名结构体类型名变量变量1 1变量变量2 2struct stude

8、nt int num; char name20; char sex; int age; float score; char addr30;先定义结构先定义结构体类型体类型例例1struct 结构体名结构体名 成员列表成员列表; 结构体名结构体名 变量名列表变量名列表struct date int day; int month; int year; ; struct student char name20; struct date birthday; struct student stu;结构体变量的定义方法结构体变量的定义方法一个结构体中一个结构体中可包含其他结可包含其他结构体的变量!构体的变

9、量!1. 先定义结构体类型再定义变量名例例2 # define STUDENT struct student STUDENT int num; char name20; char sex; char addr30; ; STUDENT student1, student2;结构体变量的定义方法结构体变量的定义方法1. 先定义结构体类型再定义变量名例例3利用宏简化程序!利用宏简化程序!凡是凡是STUDENT的地方都用的地方都用struct student机械替换机械替换 struct student int num; char name20; char sex; int age; float s

10、core; char addr30; student1, student2;结构体变量的定义方法结构体变量的定义方法2.在定义结构体类型的同时定义变量名例例1 struct 结构体名结构体名 成员列表成员列表 变量名列表变量名列表; 在定义结构体类型在定义结构体类型的同时定义变量的同时定义变量struct int num; char name20; char sex; int age; float score; char addr30; student1, student2;结构体变量的定义方法结构体变量的定义方法3.不定义结构体类型名,只定义结构体变量名例例1 struct 成员列表成员列表

11、 变量名列表;变量名列表; 不出现结构体名不出现结构体名结构体变量定义结构体变量定义l结构体变量变量的定义例22void main(void) struct date int year, month, day; today; printf(“%dn”, sizeof(struct date); 12定义结构体类型变量时开辟内存空间结构体变量的初始化结构体变量的初始化l直接在结构体变量之后通过赋值语句完成初始化void main(void) struct student long int num; char name20; char sex; char addr30; student1=9010

12、31, “Li Lin”, M, “123 Beijing Road”;printf(“%sn”, );输出:输出: Li Lin对变量初始化,一一赋值对变量初始化,一一赋值结构体变量的使用结构体变量的使用l结构体变量的使用格式 结构体变量名结构体变量不能作为一个整体进行输入或输结构体变量不能作为一个整体进行输入或输出,只能分别使用变量的各个成员出,只能分别使用变量的各个成员。成员运算符成员运算符成员名. scanf(“%d”, &student1);scanf(“%d”, &student1.num); student1.num=100;错误错误必须

13、用成员名引用必须用成员名引用结构体变量的使用结构体变量的使用l使用结构体变量成员格式嵌套的结构体变量必须逐层引用。25student1.student1.birthday.birthday.dayday=25;=25;如果结构体变量的成员本身又是一个结构体如果结构体变量的成员本身又是一个结构体类型,则要用若干个成员运算符,由外向内类型,则要用若干个成员运算符,由外向内逐层找到最内层的一级成员,而且只能对最逐层找到最内层的一级成员,而且只能对最内层的成员进行访问。内层的成员进行访问。结构体变量的使用结构体变量的使用l使用结构体变量成员格式结构体变量中的成员可以同一般变量一样进行运算。26结构体变

14、量的成员同普通变量一样,都可以结构体变量的成员同普通变量一样,都可以进行同类型普通变量所允许的各种运算。进行同类型普通变量所允许的各种运算。student1.birthday.day+; student1.score+=60; 例9.1 把一个学生的信息(包括学号、姓名、性别、住址)放在一个结构体变量中,然后输出这个学生的信息。l解题思路:自己建立一个结构体类型,包括有关学生信息的各成员。用它定义结构体变量,同时赋以初值。输出该结构体变量的各成员。9.1.3 结构体变量的初始化和引用结构体变量的初始化和引用27#include int main()struct Student long int

15、 num; char name20; char sex; char addr20; a=10101,“Li Lin”,M, “123 Beijing Road”; printf(NO.:%ldnname:%sn sex:%cnaddress:%sn, a.num,,a.sex,a.addr); return 0; 9.1.3 结构体变量的初始化和引用结构体变量的初始化和引用28#include int main()struct Student long int num; char name20; char sex; char addr20; a=10101,“Li Lin”,M,

16、“123 Beijing Road”; printf(NO.:%ldnname:%sn sex:%cnaddress:%sn, a.num,,a.sex,a.addr); return 0; 9.1.3 结构体变量的初始化和引用结构体变量的初始化和引用29#include int main()struct Student long int num; char name20; char sex; char addr20; a=10101,“Li Lin”,M, “123 Beijing Road”; a.num=10010; 对对printf(“%sn”,a); 不对不对9.1.3

17、结构体变量的初始化和引用结构体变量的初始化和引用30#include int main()struct Student long int num; char name20; char sex; char addr20; a=10101,“Li Lin”,M, “123 Beijing Road”; b=a; 对对struct Student b;b.num+; 对对9.1.3 结构体变量的初始化和引用结构体变量的初始化和引用31#include int main()struct Student long int num; char name20; char sex; char addr20;

18、a=10101,“Li Lin”,M, “123 Beijing Road”; scanf(%ld,&a.num); 对对scanf(“%ld,%s,%c,%sn”,&a); 错错9.1.3 结构体变量的初始化和引用结构体变量的初始化和引用32#include int main() struct Date int month; int day; int year; ;struct Stu int num;char name20; char sex;int age; struct Date birthday; char addr30; a,b;a.birthday.month=1

19、2; 对对a.age=10; b.age=9; 对对sum=a.age+b.age; 对对9.1.3 结构体变量的初始化和引用结构体变量的初始化和引用33 例9.2 输入两个学生的学号、姓名和成绩,输出成绩较高学生的学号、姓名和成绩l解题思路: 定义两个结构相同的结构体变量student1和student2 分别输入两个学生的学号、姓名和成绩; 比较两个学生的成绩,如果学生1的成绩高于学生2,就输出学生1的全部信息,如果学生2的成绩高于学生1,就输出学生2的全部信息。如果二者相等,输出2个学生的全部信息。9.1.3 结构体变量的初始化和引用结构体变量的初始化和引用34#include int

20、main() struct Student int num; char name20; float score; student1,student2; 9.1.3 结构体变量的初始化和引用结构体变量的初始化和引用 scanf(%d%s%f,&student1.num, , &student1.score); scanf(“%d%s%f”,&student2.num, , &student2.score); 35 printf(The higher score is:n); if (student1.scores

21、tudent2.score) printf(%d %s %6.2fn,student1.num, , student1.score); else if (student1.scorestudent2.score) printf(%d %s %6.2fn,student2.num, , student2.score); else 9.1.3 结构体变量的初始化和引用结构体变量的初始化和引用printf(%d %s %6.2fn,student1.num, , student1.score); printf(%d %s

22、%6.2fn,student2.num, , student2.score); return 0;36结构体数组结构体数组l结构体数组定义结构体数组结构体数组:结构体数组中的每个元素都是一个结构体类型的变量,其中包括该类型的各个成员。数组各元素在内存中连续存放。struct student 成员列表; ; student std5;37结构体数组结构体数组38struct student int num; char name20; char sex; int age; float score; char addr30; ;struct student stu30;st

23、ruct student int num; char name20; char sex; int age; float score; char addr30; stu30;直接定义直接定义结构体数组结构体数组l结构体数组初始化与数值型数组的初始化方式类似,只需将数组的各个元素用花括号分隔开。39struct student int num; char name20; char sex; stu3= 1011, Li Lin,M, 1012,Wang Lan,F, 1013,Liu Fang,F;结构体数组结构体数组l结构体数组的使用 结构体数组的引用与普通数组类似,同样通过下标来访问。数组元素

24、是结构体类型,所以只能对成员进行访问。40结构体数组名下标.成员名例:结构体变量的定义例:结构体变量的定义struct passenger person1, person2, person3, person4;struct passenger person4;变量名变量类型用数组替代具体变量用数组替代具体变量41例例3 3:结构体变量的初始化:结构体变量的初始化struct passenger person4= 1, “David”, 21, M, 89.9, 495.2, A, 2, “Kate”, 14, F, 54.2, 376.3, B, 3, “John”, 70, M, 74.2,

25、 469.6, B, 4, “Mary”, 46, F, 62.7, 412.7, A; ;42例:例:43struct person char name9; int age; ;struct person bme10= “Jone”,17, “Paul”,19, “Mary”,18, “Adam”,16 ;A) printf(“%sn”, );B) printf(“%cn”, 1);C) printf(“%cn”, 1);D) printf(“%cn”, 0);输出:输出:Adam输出:输出:d输出:输出:a输出:输出:

26、M结构体变量的使用结构体变量的使用for(i=0, select_B=0; inum来代替(*p).name等价于p-name如果p指向一个结构体变量stu,以下等价: stu.成员名(如stu.num) (*p).成员名(如(*p).num) p-成员名(如p-num)9.3.1指向指向结构体结构体变量的指针变量的指针48结构体与指针结构体与指针l结构体指针变量的使用格式: 结构体指针变量名-结构体成员名 (*结构体指针变量名).结构体成员名例如:student stu; student *p=&stu; printf(“%s, %s”, p-num, (*p).num);49必须加

27、圆括号,因为必须加圆括号,因为“.”运算符优先级更高运算符优先级更高。 例9.5 通过指向结构体变量的指针变量输出结构体变量中成员的信息。l解题思路:在已有的基础上,本题要解决两个问题: 怎样对结构体变量成员赋值; 怎样通过指向结构体变量的指针访问结构体变量中成员。9.3.1指向指向结构体结构体变量的指针变量的指针50#include #include int main() struct Student long num; char name20; char sex; float score; ;9.3.1指向指向结构体结构体变量的指针变量的指针51 struct Student stu_1;

28、 struct Student * p; p=&stu_1; stu_1.num=10101; strcpy(stu_1.name,“Li Lin”); stu_1.sex=M; stu_1.score=89.5; printf(No.:%ldn”,stu_1.num); printf(name:%sn,stu_1.name); printf(sex:%cn”,stu_1.sex); printf(”score:%5.1fn”,stu_1.score); return 0;stu_110101Li LinM89.5p9.3.1指向指向结构体结构体变量的指针变量的指针52 struct

29、Student stu_1; struct Student * p; p=&stu_1; stu_1.num=10101; strcpy(stu_1.name,“Li Lin”); stu_1.sex=M; stu_1.score=89.5; printf(No.:%ldn”,stu_1.num); printf(name:%sn,stu_1.name); printf(sex:%cn”,stu_1.sex); printf(”score:%5.1fn”,stu_1.score); return 0;stu_110101Li LinM89.5p(*p).num(*p).name(*p)

30、.sex(*p).score9.3.1指向指向结构体结构体变量的指针变量的指针53第第7讲讲 结构体与共用体结构体与共用体547.1 结构体7.2 共用体7.2 共用体共用体6.2.1 结构体与共用体变量的定义6.2.2 共用体变量的使用6.2.3 共用体与指针557.2.1 共用体与共用体变量定义共用体与共用体变量定义l共用体类型定义格式union 共用体类型名共用体类型名 类型标识符类型标识符1 成员名成员名1; 类型标识符类型标识符n 成员名成员名n;56共用体类型定义的标识符共用体类型定义的标识符7.2.1 共用体与共用体变量定义共用体与共用体变量定义l共用体类型定义格式union d

31、ata char a; int b; float c; ;577.2.1 共用体与共用体变量定义共用体与共用体变量定义l所谓“共用”是指多种不同数据类型的变量从同一地址开始存放,共同占用同一段内存单元。l但是在某一时刻有且仅有一个变量占用这一段内存单元。l这种由不同类型的数据共用同一段内存单元的用户自定义类型成为共用体。587.2.1 共用体与共用体变量定义共用体与共用体变量定义l可以把一个char型变量a,一个short型变量b和一个long型变量c存放在起始地址为2000的同一段内存单元中。592000abc7.2 共用体共用体7.2.1 结构体与共用体变量的定义7.2.2 共用体变量的使

32、用7.2.3 共用体与指针60共用体变量的使用共用体变量的使用l共用体变量的使用不能对共用体变量初始化和赋值 61union data char a; int b; float c; u1=A, 25, 3.5; /错误的! u1.a /只能直接使用变量中的成员 u1.b u1.c共用体变量的使用共用体变量的使用l共用体变量的使用不能对共用体变量初始化和赋值 62 共用体变量虽然可以存放几种不同类型的成员,但在同一时刻只能有一个成员起作用,其它成员不起作用。 共用体变量中起作用的成员是最后一次存放的成员。共用体变量的使用共用体变量的使用63union un int i; double y;st

33、ruct st char a10; union un b;printf(“%dn”, sizeof(struct st);1864void main(void) union EXAMPLE struct int x, int y; in; int a,b; e; e.a=1; e.b=2; e.in.x=e.a*e.a; e.in.y=e.b+e.b; printf(“%dt%dn”, e.in.x, e.in.y);inxyabb1 2 48输出:输出:4 8共用体共用体7.2.1 结构体与共用体变量的定义7.2.2 共用体变量的使用7.2.3 共用体与指针657.2 共用体共用体l共用体与

34、指针共用体指针变量的定义与对共用体的引用形式与结构体类似。66#include union data char a; short b; long c; ;void main() union data un,*p; p=&un; un.a=s; printf(“%cn”, p-a); un.b=6; printf(“%dn”, p-b); un.c=18; printf(“%ldn”, p-c); 例9.11 有若干个人员的数据,其中有学生和教师。学生的数据中包括:姓名、号码、性别、职业、班级。教师的数据包括:姓名、号码、性别、职业、职务。要求用同一个表格来处理。9.5.3 共用体类型数

35、据的特点共用体类型数据的特点 67l解题思路:学生和教师的数据项目多数是相同的,但有一项不同。现要求把它们放在同一表格中例:例:68l解题思路:如果job项为s,则第5项为class。即Li是501班的。如果job项是t,则第5项为position。Wang是prof(教授)。例:例:69l解题思路:对第5项可以用共用体来处理(将class和position放在同一段存储单元中)例:例:70#include struct int num; char name10; char sex; char job; union int clas; char position10; category; pe

36、rson2; 外部的结构体数组外部的结构体数组共用体变量共用体变量例:例:71#include union Categ int clas; char position10; ; struct 声明共用体类型声明共用体类型定义共用体类型变量定义共用体类型变量例:例: int num; char name10; char sex; char job; union Categ category person2; 72int main()int i; for(i=0;i2;i+) scanf(%d %s %c %c“,&personi.num, &, &personi.sex,&personi.job); if(personi.job = s) 例:例:73 scanf(%d“,&personi.category.clas); else if(personi.job = t) scanf(“%s”,personi.category.position); else printf(“Input error!”); printf(n); for(i=0;isun) 枚举元素的比较规则是

温馨提示

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

评论

0/150

提交评论