第九章 结构体与共用体ppt课件.pptx
《第九章 结构体与共用体ppt课件.pptx》由会员分享,可在线阅读,更多相关《第九章 结构体与共用体ppt课件.pptx(99页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第九章第九章 结构体与共用体结构体与共用体结构体结构体类型的类型的定义格式定义格式struct struct 结构体类型名结构体类型名 成员成员1;1; 成员成员2;2; 成员成员n;n;说明:1 1)structstruct是定义结构体类型的关键字。是定义结构体类型的关键字。2 2)成员成员包括包括数据类型和成员名数据类型和成员名。3 3)大括号外要有)大括号外要有“;”号号。9.1 结构体概述 numnamesexbirthbirpmonthdayyear定义定义DateDate结构体类型:结构体类型:struct Datestruct Date int int year;year; in
2、t month int month; ; int int day;day; ; 定义定义StaffStaff结构体类型结构体类型: struct struct StaffStaff int int num;num; char char name10;name10; char char sex2;sex2; struct struct Date birth; Date birth; char char birp20;birp20; ; 成员的类型也可以是一个结构体类型。成员的类型也可以是一个结构体类型。 9.2.1 9.2.1 结构体变量的定义结构体变量的定义定义定义结构体结构体变量有变量有3
3、3种方式:种方式: 1 1先定义结构体类型,再先定义结构体类型,再定义该类型的变量。定义该类型的变量。 例如:例如:struct struct DateDate int year int year; ; int month int month; ; int day int day; ; ; struct struct Date birth1,birth2Date birth1,birth2; ; 9.2 结构体变量2 2定义定义结构体类型的同时结构体类型的同时定义该类型的变量定义该类型的变量例如:例如:struct struct DateDate int int year;year; int
4、int month month; ; int day int day; ; birth1,birth2; birth1,birth2; 3.3.定义时不指定结构体类定义时不指定结构体类型名,直接定义该类型的型名,直接定义该类型的变量变量。例如例如:structstruct int year int year; ; int month int month; ; int day int day; ; birth1,birth2; birth1,birth2; 9.2.2 9.2.2 结构体变量结构体变量的内存分配的内存分配 结构体结构体变量内存空间的大小是其成员所占据内存单变量内存空间的大小是其成
5、员所占据内存单元的总和。元的总和。例如:例如:struct Stustruct Stu int num; int num; int age; int age; char sex; char sex; float score; float score;st1,st2;st1,st2;4 4字节字节4字节字节1字节字节4字节字节num age sex scorest14 4字节字节4 4字节字节1 1字节字节4 4字节字节num age sex scorest2st1st1和和st2st2在内存中都占在内存中都占4+4+1+4=4+4+1+4=1313字节字节。 说明:说明: 实际实际中,计算机系
6、统对结构体变量是按中,计算机系统对结构体变量是按“字节对齐字节对齐”原则进行管理,即所有的成员在分配内存时都要与成员原则进行管理,即所有的成员在分配内存时都要与成员中占内存最多的数据类型所占字节数对齐中占内存最多的数据类型所占字节数对齐。变量变量st1st1和和st2st2的实际的实际结构结构:st1st1和和st2st2在在内存占内存占4+4+4+4=4+4+4+4=1616字节字节。 4 4字节字节4字节字节1字节字节 填充填充3 3字节字节 num age sex scorest14 4字节字节4 4字节字节1 1字节字节4 4字节字节num age sex scorest2填充填充3
7、3字节字节4 4字节字节9.2.3 9.2.3 结构体变量结构体变量的初始化的初始化 结构体结构体变量的初始化是为其中各个成员赋初值的过变量的初始化是为其中各个成员赋初值的过程,分为程,分为2 2种方式:种方式:1 1)定义结构体类型的同时定义该类型变量,并为其初)定义结构体类型的同时定义该类型变量,并为其初始化。始化。例如:例如:structstruct int int hour;hour;intintminute;minute;int int second;second; time= time=1010,2020,2828; ; 2 2)定义结构体类型后,再定义该类型变量并为其初始化。)定
8、义结构体类型后,再定义该类型变量并为其初始化。例如:例如:struct Datestruct Date int yearint year; ;intintmonth;month;int int day;day; ;struct Date birth2=struct Date birth2=19981998,1212,1010; ; 9.2.4 9.2.4 结构体变量结构体变量的引用的引用 结构体结构体变量不能整体进行输入和输出,只能引用结变量不能整体进行输入和输出,只能引用结构体变量成员的值。构体变量成员的值。引用结构体变量成员的方式为引用结构体变量成员的方式为 结构体结构体变量名变量名. .
9、成员名成员名说明:说明:1 1)“. .”是成员运算符,结构体变量的成员相当于一是成员运算符,结构体变量的成员相当于一个个变量。变量。2 2)如果结构体变量中的成员也属于一个结构体类型,)如果结构体变量中的成员也属于一个结构体类型,则要用若干个则要用若干个“. .”,逐级地找到最低一级的成员进行,逐级地找到最低一级的成员进行操作。操作。3 3)同一结构体类型的变量可以相互赋值。)同一结构体类型的变量可以相互赋值。4 4)结构体变量可以作为函数的参数)结构体变量可以作为函数的参数。【例【例9.19.1】输入两个学生的学号、姓名和成绩,按成绩】输入两个学生的学号、姓名和成绩,按成绩由高到低输出学生
10、的信息。由高到低输出学生的信息。#include#includestruct Stustruct Stu int int num; num; char char name10; name10; int score; int score; stu1,stu2;stu1,stu2;void main( )void main( ) printfprintf(Please input records:n(Please input records:n); ); scanfscanf(%d%s%d,&stu1.num,stu1.name,&stu1.score(%d%s%d,&stu1.num,stu1.
11、name,&stu1.score););scanfscanf(%d%s%d,&stu2.num,stu2.name,&stu2.score);(%d%s%d,&stu2.num,stu2.name,&stu2.score); if(stu1.scoreif(stu1.score=stu2.score)=stu2.score) printf(%d,%s,%dn,stu1.num,stu1.name,stu1.score); printf(%d,%s,%dn,stu1.num,stu1.name,stu1.score); printf(%d,%s,%dn,stu2.num,stu2.name,st
12、u2.score); printf(%d,%s,%dn,stu2.num,stu2.name,stu2.score); else else printfprintf(%d,%s,%dn,stu2.num,stu2.name,stu2.score(%d,%s,%dn,stu2.num,stu2.name,stu2.score); ); printf(%d,%s,%dn,stu1.num,stu1.name,stu1.score);printf(%d,%s,%dn,stu1.num,stu1.name,stu1.score); 程序运行结果:程序运行结果:Please input records:
13、Please input records:1001 ZHAO 801001 ZHAO 80 1002 QIAN 901002 QIAN 90 1002,QIAN,901002,QIAN,901001,ZHAO,801001,ZHAO,80【例【例9.29.2】输入员工的编号、姓名、性别、生日和籍贯,】输入员工的编号、姓名、性别、生日和籍贯,并输出。并输出。 #include#include#include#includestruct struct DateDate int int year;year; int month int month; ; int day int day; ;struc
14、t Staffstruct Staff int int num; num; char char name10; name10; char char sex4; sex4; struct struct Date birth; Date birth; char char birp20birp20; st1=1501,st1=1501,李芳李芳,女女,1996,10,20,1996,10,20,吉林省吉林省;void main( )void main( ) struct struct Staff st2=1502,Staff st2=1502,郑宁宁郑宁宁,女女, 2003,11,5 2003,11
15、,5,黑龙江省黑龙江省; struct struct Staff st3,st4; Staff st3,st4; st3.num=1503 st3.num=1503; ; strcpy(st3.name strcpy(st3.name,张江张江);); strcpy(st3.sex strcpy(st3.sex,男男);); st3.birth.year=1993 st3.birth.year=1993; ; st3.birth.month=5;st3.birth.month=5; st3.birth.day=6 st3.birth.day=6; ; strcpy(st3.birp strcp
16、y(st3.birp,江苏省江苏省);); printf printf(Please input a record:n(Please input a record:n);); scanfscanf(%d%s%s%d%d%d%s,&st4.num,st4.name(%d%s%s%d%d%d%s,&st4.num,st4.name, , st4.sex,& st4.sex,&, , & &st4.birth.month, st4.birth.month, & &st4.birth.day,st4.birpst4.birth.day,st4.birp); ); printf printf(* * *
17、 * * * * * * * * * * * * * * * * * * * * * * * * * * * * *n);n); printf printf(%d,%s,%s,%d-%d-%d,%sn,(%d,%s,%s,%d-%d-%d,%sn,st1st1.num,.num,st1st1.name.name, , st1st1.sex,.sex,st1st1.birth.year,.birth.year,st1st1.birth.month,.birth.month, st1st1.birth.day,.birth.day,st1st1.birp.birp); ); printf prin
18、tf(%d,%s,%s,%d-%d-%d,%sn,(%d,%s,%s,%d-%d-%d,%sn,st2st2.num,.num,st2st2.name.name, , st2st2.sex,.sex,st2st2.birth.year,.birth.year,st2st2.birth.month.birth.month, , st2st2.birth.day,.birth.day,st2st2.birp.birp); ); printf printf(%d,%s,%s,%d-%d-%d,%sn,(%d,%s,%s,%d-%d-%d,%sn,st3st3.num,.num,st3st3.name
19、,.name, st3st3.sex,.sex,st3st3.birth.year,.birth.year,st3st3.birth.month,.birth.month, st3st3.birth.day,.birth.day,st3st3.birp.birp); ); printf printf(%d,%s,%s,%d-%d-%d,%sn,(%d,%s,%s,%d-%d-%d,%sn,st4st4.num,.num,st4st4.name.name, , st4st4.sex,.sex,st4st4.birth.year,.birth.year,st4st4.birth.month.bir
20、th.month, , st4st4.birth.day,.birth.day,st4st4.birp.birp); ); 程序运行结果:程序运行结果:Please input a record:Please input a record:1504 1504 李珊珊李珊珊 女女 1998 10 25 1998 10 25 云南省云南省 * * * * * * * * * * * * * * * * * * * * * * * * * * * * *1501,1501,李芳李芳, ,女女,1996-10-20,1996-10-20,吉林省吉林省1502,1502,郑宁宁郑宁宁, ,女女,2003
21、-11-5,2003-11-5,黑龙江省黑龙江省1503,1503,张江张江, ,男男,1993-5-6,1993-5-6,江苏省江苏省1504,1504,李珊珊李珊珊, ,女女,1998-10-25,1998-10-25,云南省云南省定义并初始化结构体数组有定义并初始化结构体数组有3 3种方式:种方式:9.3 结构体数组 9.3.1 9.3.1 结构体数组的定义与初始化结构体数组的定义与初始化1 1)先定义结构体类型,再定义该类型的数组并初始)先定义结构体类型,再定义该类型的数组并初始化化。 例如:例如:struct Personstruct Person char name10;char
22、name10;intintcount;count;struct Person candi5=Lusy,0, Bob,0, struct Person candi5=Lusy,0, Bob,0, Kai,0, Tom,0, Bella,0; Kai,0, Tom,0, Bella,0; 2 2)定义结构体类型的同时,定义该类型的数组并初)定义结构体类型的同时,定义该类型的数组并初始化。始化。 例如:例如:struct Personstruct Person char name10;char name10;intintcount;count;candi5candi5=Lusy,0, Bob,0,
23、Kai,0, Tom,0, =Lusy,0, Bob,0, Kai,0, Tom,0, Bella,0; Bella,0; 3 3)定义时不指定结构体类型名,直接定义该类型的)定义时不指定结构体类型名,直接定义该类型的数组并初始化数组并初始化。 例如:例如:struct struct char name10;char name10;intintcount;count;candi5candi5=Lusy,0, Bob,0, Kai,0, Tom,0, =Lusy,0, Bob,0, Kai,0, Tom,0, Bella,0; Bella,0; 9.3.2 9.3.2 结构体数组元素的结构体数组
24、元素的引用引用【例【例9.39.3】有有5 5个候选人,个候选人,1010位选民,每位选民只能投位选民,每位选民只能投票选一个候选人,统计每个候选人的得票数票选一个候选人,统计每个候选人的得票数。分析分析:创建一个结构体数组,存放创建一个结构体数组,存放5 5个候选人,数组个候选人,数组中的元素信息包括候选人姓名和候选人得票数。输入一中的元素信息包括候选人姓名和候选人得票数。输入一个候选人的名字,与数组元素中的个候选人的名字,与数组元素中的“候选人姓名候选人姓名”成员成员相比较,相同,就为这个元素中的相比较,相同,就为这个元素中的“候选人得票数候选人得票数”成成员加员加1 1。例9.3 算法
25、例9.3 程序 #include#include#include#includestruct Personstruct Person char name10; char name10; int int count count; ; candi5= lusy,0, bob,0, kai,0, tom,0, candi5= lusy,0, bob,0, kai,0, tom,0, ann,0,;ann,0,;void main()void main() int i,j; int i,j; char voter20 char voter20;例9.3 程序 for(i=1;i for(i=1;i=1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第九章 结构体与共用体ppt课件 第九 结构 共用 ppt 课件
限制150内