![[理学]第二讲--结构体.ppt_第1页](http://file.renrendoc.com/FileRoot1/2019-1/3/95c46268-60c3-4c51-aa03-b17beae6a0d8/95c46268-60c3-4c51-aa03-b17beae6a0d81.gif)
![[理学]第二讲--结构体.ppt_第2页](http://file.renrendoc.com/FileRoot1/2019-1/3/95c46268-60c3-4c51-aa03-b17beae6a0d8/95c46268-60c3-4c51-aa03-b17beae6a0d82.gif)
![[理学]第二讲--结构体.ppt_第3页](http://file.renrendoc.com/FileRoot1/2019-1/3/95c46268-60c3-4c51-aa03-b17beae6a0d8/95c46268-60c3-4c51-aa03-b17beae6a0d83.gif)
![[理学]第二讲--结构体.ppt_第4页](http://file.renrendoc.com/FileRoot1/2019-1/3/95c46268-60c3-4c51-aa03-b17beae6a0d8/95c46268-60c3-4c51-aa03-b17beae6a0d84.gif)
![[理学]第二讲--结构体.ppt_第5页](http://file.renrendoc.com/FileRoot1/2019-1/3/95c46268-60c3-4c51-aa03-b17beae6a0d8/95c46268-60c3-4c51-aa03-b17beae6a0d85.gif)
已阅读5页,还剩43页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
程序设计基础B 张立红 2760092(8092)第二讲 结构体 主要内容 结构体定义和使用 共用体定义和使用 枚举类型定义和使用 8.1 结构体类型 结构体概念:一组相关变量的集合,而且这些变量的类型可以 是互不相同的。 有的高级语言中称为记录。 例如 : 一个学生:学号、姓名、性别、年龄、成绩、地址等信息 -一个结构体。 结构体属于构造类型。 前面所使用的数据类型,都是直接定义变量。 对于结构体类型,则必须先声明类型 , 再定义变量。 8.1.1 结构体类型的定义 格式: struct 结构体类型名 类型名 成员1; 类型名 成员2; ; 例如 : struct stud / stud为结构体类型名 int num; char name20; char sex; int age; float score; char addr30; ; / 此分号不能勿缺失 8.1.2 结构体类型变量的定义 格式1: struct 结构体类型名 结构体变量名; 例如: struct stud s1,s2; / struct 不可少 其中的s1、s2是结构体类型的变量。 注意:上述格式是先声明了结构体类型之后 ,才可以定义结构体类型变量。 格式2:在定义结构体类型的同时定义结构体变量。 此时,结构体类型名可以缺省。 如 : struct stud / stud为结构体类型名 int num; char name20; char sex; int age; float score; char addr30; s1,s2; /s1、s2是结构体类型的变量*/ 格式3:在定义结构体类型的同时定义结构 体变量。此时,结构体类型名可以缺省。 struct / 结构体类型名缺省 int num; char name20; char sex; int age; float score; char addr30; s1,s2; / s1、s2是结构体类型的变量 注 意 定义结构体类型变量后,系统在内存中 为该变量分配连续的存储单元; 结构体类型变量的首地址称为该变量的 地址; 结构体变量占用的内存空间长度是其全 部成员占用的内存空间长度总和。 注意:结构体类型的成员可以是另一个结构体类 型。 例如: struct date / date为结构体类型名 int month,day,year; struct stud / stud为结构体类型名 int num; char name20; char sex; int age; struct date birth; / birth是结构体变量 float score; char addr30; s1,s2; /s1、s2是结构体类型的变量 8.1.3 结构体类型变量的引用 注意: 1)使用结构体类型的变量时,不能将结构 体变量作为一个整体进行输入、输出。 2)只能对结构体变量的成员按其类型进行 输入、输出。 8.1.3 结构体类型变量的引用 一、结构体变量成员的引用 格式:结构体变量名.成员名 例如: struct stud s1; 则: s1.score=95; 对结构体类型变量的成员可以像普通变量一样进行各种合 适的运算。 例如:boy1.score = boy2.score; x boy1.score + boy2.score; 8.1.3 结构体类型变量的引用 注意: 1)如果结构体成员本身又是一个结构体类型,必须 逐级找到最低级的成员才能使用。 例如:boy1.birth.month,表示boy1的birth 成员的 month成员。 2)“.”是成员运算符,它在所有运算符中优先级最高 ,可以把boy1.birth.month作为一个整体来看待。 二、结构体变量成员的操作 因为结构体的成员本质上也是变量(或数组) ,所以对结构体成员的操作与同普通变量(或数 组)的操作相同。 例如: scanf(“%f“, strcpy(,“Tom“); gets(s1.addr); 注意: 相同类型结构体变量之间可以整体赋值.。 例如: struct stud s1,s2; s2=s1; / 使s2的各个成员值与s1 相同。 例8.1:结构体类型变量的使用。 #include #include struct stud int num; char name10; boy1,boy2; int main() boy1.num=102; strcpy(, “Zhang ping“); boy2=boy1; / 将boy1的所有成员的值整体赋予boy2 printf(“boy1=%d %s n“,boy1.num,); printf(“boy2=%d %s n“,boy2.num,); return 0; 8.1.4 结构体类型变量的初始化 结构体类型变量的初始化和其他类型变量一样,也可以在 定义时进行初始化赋值。 例8.2:对结构体类型类型变量初始化。 #include #include struct stud int num; char name20; boy1=102,“Zhang ping“; int main() printf(“%d %sn“,boy1.num,); return 0; 8.1.5 结构体类型数组 概念: 若一个数组的元素是结构体变量,则 称之为结构体数组。 一、定义结构体数组 例如: struct stud int num; char name20; char sex; int age; float score; char addr30; st 3; / st是具有3个元素的stud结构体数组 二、结构体数组的初始化 对结构体类型数组可以作初始化赋值,实际上是 对数组元素的最低层成员赋值 。 例如: struct stud / 定义结构体类型 int num; char name20; char sex; int age; float score; char addr30; ; struct stud st3= 10101,“Li Lin“,m, 20,90,“123 Beijing Road“, 10102,“Zhang Feng“,m,19,85,“130 Shang Hai Road“, 10103,“Wang Min”,f,21,95,“100 Zhong Shan Road” ; / 对st的3个元素分别赋初值 三、结构体数组应用举例 例8.3:计算4个学生的平均成绩、不及格的人数。 #include struct stud int num; float score; boy4= 101,45, 102,62.5, 103,92.5, 104 ,87 ; int main() int i,c=0; float ave,s=0; for (i=0;i #include struct person char name20; int count; leader3=“LI“,0,“ZHAN G“,0,“FAN“,0; 例8.5: 利用结构体数组完成成绩由高到低排序(注意原序号 ) #include #include struct stud int num; float score; void main() struct stud s10,t; int i,j; for (i=0;i void main() int num10,s10,t,i,j; for (i=0;inum 注意:(*p1)两侧的括号不可少 -原因:成员符“ . ”的优先级高于“ * ”。 int main() struct stud s1,*p; s1.num=89101; strcpy(,“Lilin“); s1.sex=M; s1.score=89.5; p= printf(“%d %s %c %fn“, (*p).num , (*p).name , (*p).sex , (*p).score); / (*p) 括号不可省? printf(“%d %s %c %fn“, p-num , p-name , p-sex ,p-score); return 0; #include #include struct stud long num; char name20; char sex; float score; ; 例:指向结构体变量的指针应用。 二、指向结构体类型数组的指针 指针变量可以指向一个结构体类型的数 组,这时指针变量的值是整个结构体类 型数组的首地址。 结构体类型指针变量也可以指向结构体 类型数组的一个元素,这时指针变量的 值是该数组元素的首地址。 例: 指向结构体数组的指针应用。 #include struct stud int num; char name20; char sex; int age; st3= 10101,“Li Lin“,m,20, 10102,“Zhang Feng“,m,19, 10103,“Wang Min“,f,21 ; void main() struct stud *p; printf(“No. Name Sex Agen“); for(p=st;pnum,p-name,p-sex,p-age); / 注意指针p的指向。 1. 共用体类型的定义 格式:union 共用体名 数据类型 成员名表1; 数据类型 成员名表n; ; 例如: union undata int a; double b; char ch; ; 8.2 共用体类型 共用体:将不同类型的数据项存放于同一段存储单元的 一种构造数据类型。 共用体类型与结构体有的本质区别: 结构体各成员有各自存储单元,一个结构体类型变量 占用的存储单元长度是各成员所占存储单元长度之和 。 共用体类型变量的各成员共享一段存储单元,一个共 用体类型变量占用的存储单元的长度是各成员所占用 存储单元最长的长度。 注意:共用体类型变量中所谓的共享不是把多个成员同 时装入,而是该共用体类型变量能被赋予任一成员值 ,每赋予一个成员值同时覆盖原成员值。 2. 共用体类型变量的定义 在类型定义之后定义共用体变量: union undata u1,u2,u3; 在类型定义的同时定义共用体变量: union undata int a;double b;char ch;u1,u2,u3; 在类型定义时直接定义变量: union int a;double b;char ch; u1,u2,u3; 说明:u1、u2、u3变量占用的存储单元的长度是各成员所占 用存储单元最长的长度,即double类型的所占用的长度。 8.2.2 共用体类型变量的引用 共用体类型变量的成员引用格式: 共用体类型变量名.成员名 例如:u1.a u1.b u1.ch 注意1:对共用体类型的变量进行赋值时,只能对变量的 某一个成员进行,不允许直接对用共用体变量名进行 赋值、初始化等操作。 注意2:对于一个共用体类型变量,在某一时刻只能赋给 一个成员值,即一个共用体变量的值就是共用体变量 的某一成员值。 例8.7:共用体类型的定义和使用。 #include union undata int a; double b; char ch; u1; int main() u1.a=6; printf(“u1.a=%dn“, u1.a); u1.b=87.2; printf(“u1.b=%fn“, u1.b); u1.ch=W; printf(“u1.ch=%cn“, u1.ch); return 0; 8.2.3 共用体类型数据的特点 1同一个存储空间可以用来存放几种不同类型的共用体类型的成 员,但是共用体类型变量中有效的成员是最后一次存放的成员 ,在存入一个新的成员后原有的成员就失去作用。 例如: u1.a=18; u1.b= 77.5; u1.ch=Y; 注意:当前存放在共用体类型变量中的究竟是哪个成员? 8.2.3 共用体类型数据的特点 2共用体类型变量的地址和它的各成员的地址都是同一地址 。 例如: p= / 正确 或者: p=(int *) / 正确 5共用体类型数据的成员可以是结构体类型、共用体类型或 其他类型。 例8.11:结构体和共用体的综合应用。 设有一个教师与学生通用的结构体(记录):姓名、职业、 教研室或班级。 要求:编程输入人员数据,再输出。 注意:由于职业不同,第3项不同 分析: 1)数据要求: 教师:姓名、职业-教师、教研室 学生:姓名、职业-学生、班级 2)处理要求:根据职业,确定数据是教研室?班级? #include /结构体和共用体的综合应用。 union dp int cls; char office10; ; struct record char name10; char job; dp dd; ; int main() struct record body; body.job=getchar(); if(body.job=s) printf(“intput name and class:n “); scanf(“%s%d“,, 11 printf(“%s %c %dn“,,body.job,body.dd.cls); 12 13 else 14 printf(“intput name and office: n“); 15 scanf(“%s%s“,,body.dd.office); 16 printf(“%s %c %sn“,,body.job,body.dd.office); 17 18 8.3 枚举类型 枚举:列举出所有可能的取值。 8.3.1 枚举类型定义 格式:enum 枚举类型名 枚举值列表 ; 例如:enum weekday sun,mon,tue,wed,thu,fri,sat; 注意1:枚举类型是一种基本数据类型,而不是一种构造类型 ,因为它不能再分解为任何基本类型。 注意2:“枚举值列表”是该枚举类型变量的所有可用值,这些 值也称为枚举值。 8.3 枚举类型 注意3:枚举值是用户定义的标识符,这些标识符并不自动代 表任何含义。 例如:不能因为写成sun,就自动代表“星期天”。 枚举类型变量的定义: 格式 先定义类型,后定义变量。 如: enum weekday a,b,c; 格式 定义类型的同时定义变量。 如:enum weekdaysun,mon,tue,wed,thu,fri,sata,b,c; 格式 定义枚举类型时,直接定义变量。 如:enum sun,mon,tue,wed,thu,fri,sata,b,c; 8.3.2 枚举类型变量的赋值和使用 枚举类型在使用中有以下规定: 1、枚举值是常量,不能再用赋值语句对它赋值。 例如:对枚举类型weekday的枚举值再作以下赋值: sun=5; / 错误 sun=mon; / 错误 2、枚举值本身由系统定义了一个表示序号的数值,编译时默认 按顺序使枚举值的序号为0、1、2、。 例如:在weekday类型中,sun的序号为0、mon序号为1、sat序 号为6。 int a; a=mon; / 变量a 的值为l printf(“d”,a); / 输出1 8.3.2 枚举类型变量的赋值和使用 3、枚举值的数值序号也可以在定义时由程序指定。 例如: enum weekday sun=7,mon=1,tue,wed,thu,fri,sat; / 定义sun为7、mon为1、以后顺序加1至sat为6。 4、只能把枚举值赋予枚举变量,不能把枚举值的序号直接赋予枚 举变量。 例如: weekday a,b; a=sun; b=mon; / 正确 a=0; b=1; / 错误 若一定要把枚举值的序号赋予枚举变量,必须用强制类型转换: 例如:a=(enum weekday)2; / 将序号为2的枚举值赋予枚举变量a,a的值是tue; 8.3.2 枚举类型变量的赋值和使用 5、枚举值不是字符常量也不是字符串常量,使用时不能 加单引号、双引号。 6枚举值可以用于作判断比较。 例如:若 a、b是weekday枚举类型变量 if (a=mon) / 正确 if (bsun) / 正确 注意:枚举值的比较规则是按其在定义时的序号比较。 例8.8 枚举类型定义和使用。 #include enum color red,yellow,green,blue,whilt,blackc1,c2,c3; void main() c1=blue; c2=red; c3=black; if (c3c1) printf(“%d %dn“,c3,c1); else printf(“%d %dn“,c3,c2); 8.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农业无人机租赁服务平台的用户需求与满意度调查报告
- 房屋拆除工程防护方案(3篇)
- 农业无人机植保作业效率2025年提升策略及案例分析报告
- 东莞亮化工程方案(3篇)
- 安全教育常培训课件
- 安全教育工作培训课件
- 安全教育家长培训课件
- 农业品牌建设2025年资金申请流程与注意事项报告
- 辽宁国企面试题库及答案
- 乐亭二中面试题库及答案
- (高清版)DG∕TJ 08-2068-2019 超高压喷射注浆技术标准
- 环洪泽湖生态农业生物技术重点实验室可行性研究报告
- 5A写字楼二次装修管理培训
- 阅兵中的数学知识
- 眼外伤护理业务查房
- 个人IP打造与推广实战指南
- 2024-2025年中国中小银行行业深度分析及投资规划研究建议报告
- 2025机动车维修企业安全管理员安全考试题库及参考答案
- 2024至2030年网络安全预警系统项目投资价值分析报告
- 国土空间生态保护修复工程生态成效监测评估技术导则 DB32 T 4867-2024
- 2024年司法考试完整真题及答案
评论
0/150
提交评论