




已阅读5页,还剩60页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章结构 联合及枚举类型 重点与难点8 1结构体类型和结构变量的定义8 2结构体变量的引用和初始化8 3结构体数组8 4结构体类型的指针变量 8 5结构体与函数8 6用typedef定义类型8 7用指针处理链表8 8共用体8 9枚举类型 本章小结 作业 重点与难点 重点 结构体 共用体和枚举类型 难点 链表的操作 二维表 关系 8 1结构体类型和结构体变量的定义 8 1 1结构体类型的定义8 1 2结构体变量的定义 8 1 1结构体类型的定义 struct结构体名 数据类型成员名1 数据类型成员名2 数据类型成员名n 点坐标 二维坐标的点 structpoint floatx floaty 点的结构体类型 圆的结构体 structcircle structpoint floatx floaty dot floatr structpointdot 8 1 2结构体变量的定义 1 先定义结构体类型 再定义结构体变量2 定义结构体类型的同时定义结构体变量3 直接定义结构体类型变量 1 先定义结构体类型 再定义结构体变量 structcircle structpointdot floatr structcirclegraph1 graph2 2 定义结构体类型的同时定义结构体变量 structstudent intnum charname 20 charsex intagefloatscore charaddr 30 stu1 stu2 3 直接定义结构体类型变量 struct intmonth intday intyear date1 date2 8 2结构体变量引用和初始化 1 结构体变量的引用2 结构体变量的初始化 1 结构体变量的引用 在ANSI中除了允许具有相同类型的结构体变量相互赋值外 一般对结构体变量的引用是通过其成员来实现 成员引用形式 结构体变量名 成员名 举例 graph1 rgraph1 dot x 例8 1求两个同心圆的面积差 main structpoint floatx floaty structcircle structpointdot floatr structcirclegraph1 graph2 floatarea graph1 dot x 2 graph1 dot y 3 graph1 r 4 graph2 dot graph1 dot printf Graph2 r scanf f 2 结构体变量的初始化 初始化形式结构体类型结构体变量 初始化数据 举例structcirclegraph1 2 3 4 即x 2 y 3 r 4 其中内层 可省 8 3结构体数组 structcirclecir 3 structcredit intnum char name charsex floatscore 3 stu 5 结构体数组举例 structcredit intnum char name charsex floatscore 3 stu 5 101 ZhaoHua M 45 80 78 102 XianJiang M 62 5 76 80 103 SunJun F 92 5 92 89 104 LiWei F 87 88 91 105 ZhouLi M 58 60 77 例8 2计算学生的总分 按总分排名次及输出名次表 stu i total stu i score j 排序 选择法 for i 0 istu k total k j if k i temp stu i stu i stu k stu k temp 8 4结构体类型的指针变量 结构体变量可以由不同类型的成员构成 各个成员所占空间字节数之和是结构体变量所占的内存空间 结构体的指针是结构体变量在内存中得首地址 结构体类型的指针变量可以存放结构体的首地址 成员引用方法 一般方法graph1 dot x指针方法已知p p r p dot x或p rp dot x其中 结构体指针变量名 成员名 方法直观 举例 成员的指针引用方式 structcredit p 索引表结构 structindex intnum structcredit link index id 5 structcredit intnum char name charsex floatscore 3 floattotal stu 5 索引图示 8 5结构体与函数 结构体成员可以像简单变量一样作为函数的参数 结构体变量也可以作为函数的参数 它的传递方式是值传递 由于在值传递时 实参拷贝到形参变量 如果结构体变量的成员较多 数据量较大时 传递效率会很低 一般采用结构体指针变量作为函数的参数 这样 在参数传递时仅需要拷贝一个地址而已 例8 4结构体与函数 voidcaltotal structcreditstu intn inti j for i 0 i n i stu i total 0 for j 0 j 3 j stu i total stu i score j 形参也可以为 structcredit p intn 8 6用typedef定义类型 typedef声明新的类型名来代替已有的类型名 注意 typedef并不是创造新的类型 举例 typedefstructdate intmonth intday intyear DATE DATEbirthday 声明一个新的类型名的步骤 1 先按定义变量的方法写出定义体inti 2 将变量名换成新类型名将i换成COUNT3 在最前面加typedeftypedefintCOUNT4 然后可以用新类型名去定义变量COUNTi j 举例 typedefintNUM 100 NUMn typedefstructstudent intnum charname 20 STU STUst1 说明 typedef与 define define是在预编译时处理的 它只作简单的字符串替换 typedef是在编译时处理的 并不是作简单的字符串替换 typedef的作用有利于程序的通用与移植 譬如 typedefintINTEGER 课堂训练 1 已知5个学生的数据存储在一个数组中 每个学生包括学号 姓名 3门课程的成绩和平均成绩 编写输入 输出函数 1 输入函数 输入5个学生数据 计算平均分 2 输出函数 在屏幕上输出5个学生的数据 8 7用指针处理链表 1 链表概述2 简单链表3 处理动态链表所需的函数4 建立动态链表5 输出链表6 对链表的删除操作7 对链表的插入操作8 对链表的综合操作 1 链表概述 structnode charch structnode next structnode node1 node2 typedefstructnode charch structnode next NODE NODEnode1 node2 2 简单链表 举例 defineNULL0structstudent longnum floatscore structstudent next main structstudenta b c head p a num 99101 a score 89 5 b num 99103 b score 90 c num 99107 c score 85 head p head do printf n ld g p num p score p p next while p NULL 3 处理动态链表所需的函数 4 建立动态链表 建立动态链表是指在程序执行过程中从无到有地建立起一个链表 即一个一个地开辟结点和输入各结点数据 并建立起前后相链的关系 建立过程图示 head 创建链表函数 structstudent creat void structstudent head p1 p2 intn 0 head NULL p2 head while 1 p1 p2 structstudent malloc sizeof structstudent scanf ld f head指向表头p2指向表尾p1指向新结点 5 输出链表 输出链表 首先要得到链表第一个结点的地址 即head的值 然后设一个指针变量p 先指向第一个结点 输出p所指的结点 然后使p后移一个结点 再输出 直到链表的尾结点 编写一个输出链表的函数 voidprint structstudent head structstudent p p head if head NULL do printf n ld 5 1f p num p score p p next while p NULL elseprintf nlinktableisempty 输出链表图示 head 6 对链表的删除操作 从动态链表中删除结点是将某个结点的前驱结点和它的后续结点链结起来 并将该结点所占的内存释放 删除结点图示 head 删除结点程序 while num p1 num 7 对链表的插入操作 对链表的插入 是将一个结点插入到一个已有的链表中 head 插入操作 if head NULL head p0 p0 next NULL else while p0 num p1 num 链到表头 链到表尾 链到表中 8 对链表的综合操作 链表的综合操作包括链表的建立 插入结点 删除结点和输出链表的结点数据等操作 其中 建立链表的操作可以由插入操作完成 插入操作可以控制链表的建立是有序的 8 8共用体 1 共用体的概念2 共用体变量的引用方式3 共用体类型数据的特点 1 共用体的概念 共用体 实现不同类型的变量存放在同一内存单元中 使用覆盖技术 几个变量相互覆盖 共用体类型 定义一般形式 union共用体名 成员表列 变量表列 举例 uniondata inti charch floatf a b c 2 共用体变量的引用方式 引用方式 不能引用共用体变量 而只能共用变量中的成员 举例 uniondata inti charch floatf a b c 成员引用 a ia cha f 共用体与结构体 例8 7验证共用体变量的存储形式 main unionuarea charc data inti data floatf data udata printf 3 共用体类型数据的特点 1 每一瞬时只有一个成员起作用 其他的成员不起作用 即不是同时都存在和起作用 2 新存入的成员值覆盖原来成员的值 只有最近一次存放的成员起作用 3 共用体变量的地址与各个成员地址相同 4 由于只有一个成员起作用 故不能使用定义共用体变量时对它初始化 同样地 不能把共用体作为函数参数 也不能使函数返回值为共用体变量 程序输出 程序运行情况 udatais65498 udata c datais65498 valueisA udata i datais65498 valueis114 udata f datais65498 valueis1 18000e 02 udata i datais65498 valueis0 共用体应用举例 设有若干个人员的数据 其中有学生和教师 学生的数据中包括 姓名 号码 性别 职业 职务 根据职业 教师或学生 的不同 职务成员存放的值可以为职称 教师 或班级 学生 从中可知 职务 成员应该是共用体 数据定义 struct intnum charname 10 charsex charjob union intclass charposition 10 category person 2 共用体变量 8 9枚举类型 枚举 是指将变量的值一一列举出来 变量的值只限于列举出来值的范围内 举例enumweekday sun mon tue wed thu fri sat 其中 sun mon 是枚举常量enumweekdayworkday week end 其中 workday 是枚举变量 枚举常量 不能对它赋值 枚举常量按定义时的顺序确定它们的值为 0 1 2 可以改变枚举元素的值 enumweekday sun 7 mon 1 tue wed thu fri sat 应用举例 口袋中有红 黄 蓝 白 黑5种颜色的球若干个 每次从口袋中取出3个球 问得到3中不同色的球可能取法 打印出每种组合的3种颜色 分析 可以使用简单类型 1 2 使用枚举类型更直观 枚举变量 枚举变量的值虽然整型值 但与整型量不同 需要进行强制转换 workday enumweekday 2 例8 8输入0 6 输出对应的星期英文名称 main intx enumdays sun mon tue wed thu fri sat day printf Whichday 0 6 isToday scanf d 程序 enumcolor re
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二年级新班主任发言稿
- 时间管理授课课件
- 高三班级成绩质量分析
- 初中历史学科试卷质量分析
- 爱护环境读书课件
- 二零二五版汽车抵押贷款合同借款人信用记录查询与维护合同
- 二零二五年度个人应急借款合同担保公证及援助方案
- 2025版彩瓦租赁与销售结合服务合同
- 二零二五年度彩钢房租赁与临时办公解决方案协议
- 二零二五年度生态修复工程承包垫资协议
- 我院科室护理病人隐私保护与信息安全
- 2025汽车销售合同标准经销商范本
- 暖通运维面试题库及答案
- 路面注浆打孔合同范本
- 新疆维吾尔自治区巴音郭楞蒙古自治州2024-2025学年八年级下学期期末模拟数学试题(无答案)
- DB32/T+5124.6-2025+临床护理技术规范+第6部分:成人危重症患者身体约束
- 资产收购方案(3篇)
- 混凝土立方体抗压强度试验工程材料试验与检测63课件
- 宠物合同购买协议书
- 口腔招聘笔试试题及答案
- 2025年中国邮政集团工作人员招聘考试笔试试题(含答案)
评论
0/150
提交评论