结构体和共用体.ppt_第1页
结构体和共用体.ppt_第2页
结构体和共用体.ppt_第3页
结构体和共用体.ppt_第4页
结构体和共用体.ppt_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

专题之十结构体 共用体和用户定义类型 主要内容 10 1结构体类型的定义与变量说明10 2结构体类型变量的引用10 3结构体与数组10 4结构体与指针10 5结构体与函数10 6链表10 7共用体10 8用typedef定义类型 考纲分析 这部分主要讲解结构体与共用体的知识 一般会有2 3个选择题和1 2个填空题 笔试题所占分值在8分左右本章是编写复杂程序的重要知识 属于C语言程序设计提高部分 要求考生重点掌握结构体 共用休和用户定义类型的概念及应用 考生应理解掌握 但结构体是必考知识点 上机考试中考核概率极高 10 1结构体类型的定义与变量说明 10 1 1结构体类型的定义结构体是具有不同类型的数据的有序集合结构体定义 struct结构体类型名 类型标识符成员名1 类型标识符成员名2 类型标识符成员名n struct 定义结构体类型的关键字 域 结构体类型定义中的每1个成员 成员名的命名规则和变量相同 同一结构体的同层成员不可同名 例 定义结构体类型student structstudent intnum charname 20 charsex intage floatscore charaddr 30 structstudent应作为一个整体对待 号不能少 10 1 2定义结构体类型变量的定义 一 先定义结构体类型再定义变量名形式 struct结构体名结构体变量名表例 在前面已定义结构体类型structstudent则可定义 structstudentstu1 stu2 stu1 stu2即为structstudent类型的变量 一般形式为 struct结构体名 成员表列 变量名表列 structstudent intnum charname 20 charsex intage floatscore charaddr 30 student1 student2 二 在定义类型的同时定义变量 一般形式为 struct 成员表列 变量名表列 不出现结构体名 struct intnum charname 20 charsex intage floatscore charaddr 30 student1 student2 三 直接定义结构类型的变量 结构体变量的定义 用typedef为已存在的类型定义新名字structstudent intnum charname 20 charsex intage floatscore charaddr 30 typedefstructstudentSTUD STUDstudent1 student2 用STUD代替structstudent类型 10 1 3结构体类型的嵌套 例 structdate intmonth intday intyear structstudent charname 20 charsex intage structdatebirthday stu1 stu2 定义 结构体成员又是一个结构体变量 嵌套结构体变量的引用 点标记法 但只能对最低成员进行赋值或存取 运算 例 stu1 age 20 stu1 dirthday month 7 stu1 dirthday day 31 思考以下的引用 printf d d d stu1 birthday stu1 birthday 12 31 1988 10 2结构体类型变量引用与初始化 10 2 1引用不能将一个结构体变量作为一个整体进行输入和输出 只能对各个成员分别输入输出例如 printf d s c d f s n student1 引用 student1 num 102 成员的引用方式为 结构体变量名 成员名注意 成员运算符 在所有运算符中优先级最高 结构体变量引用方法 structclock inthour minute second structdate intyear month day structclocktime today nextday 1 单独引用结构体变量的成员today year 2004 today time second 15 2 结构体变量作为一个整体引用nextday today 10 2 2结构体类型变量的初始化 定义时初始化 将各元素初值放在 里赋值给变量 例 structstudent charname 20 charsex intage floatscore stu1 stu2 Wangwu m 20 88 5 10 3结构体与数组 10 3 1结构体数组变量的定义与结构体变量定义类似 只是结构体变量名现为结构体数组变量名如 structstudent intnum charname 20 charsex intage floatscore stu 30 数组各元素在内存中连续存放 如右图所示 10 3 2结构体数组变量的初始化与引用 初始化 数组 初值表列 引用 结构体数组分量 结构体成员 structstudent intnum charname 20 charsex intage floatscore charaddr 30 stu 3 101 WGJ M 28 88 5 CS 102 DYH F 26 88 0 CS 103 DYC M 24 78 5 CZ 结构体数组程序举例 例10 5 计算一个班学生的三门课程的平均成绩 并输出该班学生姓名及平均成绩 程序见下 include defineMAXSIZE100structstudent charname 16 学生姓名 intgrade 3 average 三门成绩 平均分 程序 voidmain inti j num s structstudentstu MAXSIZE printf Enternumberofstudents scanf d 10 4结构体类型与指针 一个结构体变量的指针就是该结构体变量所占据的内存的起始地址 指针变量可存放结构体变量的指针 指针变量不仅可以用来指向结构体变量 还可以用来指向结构体数组中的元素 10 4 1指向结构体变量的指针 形式 struct结构体类型名 结构体指针名例 structstudentstu1 pst pst q stu1 num合法 例14 6 用指向结构体变量的指针来访问学生的各项数据 include string h structstu intnum char name charsex floatscore boy 102 Zhangping M 78 5 p voidmain p 10 4 2指向结构体数组的指针 例10 7 输出数组中各元素中各成员的值 structstudent intnum charname 20 charsex intage structstudentstu 3 10101 Zhang M 18 10102 Li M 19 10103 Wang F 20 续 main 续上页 structstudent p printf No NameSexAge n for p stu pnum p name p sex p age 注意事项 如果p的初值为stu 即指向结构体数组的第1个元素stu 0 则p 1指向下1个元素的起始地址stu 1 区别 p num和 p num p已定义为指向structstudent类型的指针变量 则p只能指向1个结构体类型数据 而不能指向结构体类型的某一成员 即p的地址不是成员的地址 如 p stu name 错误 10 5结构体与函数 10 5 1结构体变量作为函数的参数将1个结构体变量的值传递给1个函数 方法有二 用结构体变量的成员作参数 用法和普通变量作实参是一样的 属 值传递 方式 用指向结构体变量 数组的指针作实参 将结构体变量 数组的地址传给形参 结构体指针作为函数参数 10 5 2用指向结构体的指针作函数参数 例 编写一个函数 计算指定学生的6科平均成绩 根据平均成绩评定登记 结构类型 structstudent charname 20 charnum 10 floatscore 6 floatave main structstudenta 100 inti j n floatsum scanf d 将6门课程数据输入定义为函数input 函数的返回值为结构型地址 structstudentinput void structstudentstud inti floatsum scanf s stud name scanf s stud num for i 0 i 6 i scanf f main structstudenta 100 inti j n structstudentinput void scanf d 假设有 structpoint intx y 函数定义如下 voidenter structpoint p intn inti j for i 0 i n i printf Enterp d i scanf d d 如果在主控函数中定义了结构体数组 structpointa 100 则调用语句为enter a 30 10 5 3结构体类型函数 编写程序 查找分数大于或等于90的学生数据 includestructstudent charname 20 intscore structstudent find structstudentst inti for i 0 i 90 return main intI structstudentst 4 pst for I 0 Iname pst score 10 6链表 10 6 1概述链表存储结构是一种动态数据结构 其特点是它包含的数据对象的个数及其相互关系可以按需要改变 存储空间是程序根据需要在程序运行过程中向系统申请获得链表也不要求逻辑上相邻的元素在物理位置上也相邻 它没有顺序存储结构所具有的弱点 1 链表结构 1 头指针变量head 指向链表的首结点 2 每个结点由2个域组成 1 数据域 存储结点本身的信息 2 指针域 指向后继结点的指针 3 尾结点的指针域置为 NULL 空 作为链表结束的标志 链表结构的定义 structstudent charname 10 structstudent next next为student类型指针变量 指向下一个结点的指针域 结点的变量或指针变量的定义 structstudentnode head node可以存放一个学生结点指针head可以存放学生结点的地址 例10 12 动态定义数组 includevoidmain intn i p printf n scanf d 程序运行结果 n 100149162536496481 对链表的基本操作 链表的基本操作有 创建 查找 插入 删除和修改等 创建链表 从无到有地建立起一个链表 查找 按给定的结点索引号或检索条件 查找某个结点 如果找到指定的结点 则称为检索成功 否则 称为检索失败 插入 在结点ki 1与ki之间插入一个新的结点k 使表的长度增1 且逻辑关系发生如下变化 插入前 ki 1是ki的前驱 ki是ki 1的后继 插入后 新插入的结点k 成为ki 1的后继 ki的前驱 4 删除操作 删除结点ki 使链表的长度减1 且ki 1 ki和ki 1结点之间的逻辑关系发生如下变化 删除前 ki是ki 1的前驱 ki 1的后继 删除后 ki 1成为ki 1的前驱 ki 1成为ki 1的后继 10 6 2建立链表 1 尾插法建立单链表特点 头指针固定不变 新产生的结点总是链接到链表的尾部 操作步骤 1 设head为链表头 last为链表尾结点 head last NULL 2 生成新结点 由p指针指示 并将新结点的地址域清空 p next NULL 3 如果head为NULL 则head p 否则last next p 4 last p 5 重复 2 4 继续建立新结点 2 头插法建立单链表 特点 新产生的结点作为新的链表头插入链表 操作步骤 1 head NULL 2 生成新结点 指针变量p指向该结点 3 p next head head p 4 重复 2 3 继续生成下一个链表结点 10 6 3链表的访问 1 输出链表结点操作步骤 1 得到链表头结点的地址head 2 指针变量p head 3 输出p所指结点的成员值 4 p后移一个结点 p p next 5 重复 3 4 直到链表为空 2 统计链表结点的个数 一般情况下 各个单链表中结点个数是随机的 要想知道表中结点数目 必须从表头开始访问到表尾 逐个统计出结点数目 3 查找链表的某个结点在链表上查找符合某个条件的结点 也必须从链表头开始访问链表 10 6 4链表的插入操作 在第n个结点之后插入1个新结点 插入操作步骤 1 q指针指向新结点 i为已访问过的结点数 2 p head r指向p结点的前一个结点 3 i r p p p next p结点往前移动一个结点 4 若inext head head q 6 若inext q q next NULL 7 否则 将q结点插入到第n个结点之后 即插入到r结点与p结点之间 r next q q next p 8 返回链表头head 10 6 5链表的删除操作 删除第n个结点 1 p head q指针指向p所指结点的前1个结点 2 i为访问过的结点数目 3 i q p p p next p q移动1个结点 4 若p NULL且inext 6 若head NULL 链表为空 不能删除 7 若p NULL 第n个结点不存在 不能删除 8 找到第n个结点 删除p结点 q next p next p的前1个结点的next值赋值为p的next域 9 返回head 插入动态结点 把q所指结点插入到r所指结点之后语句 q next r next r next q 删除结点 2个q和p指针q next p next free q 10 7共用体 共用体概述共用体是有别于以前任何一种数据类型的特殊数据类型 它是多个成员的一个组合体 但与结构体不同 共用体的成员被分配在同一段内存空间中 它们的开始地址相同 使得同一段内存由不同的变量共享 共同使用这段内存的变量既可以具有相同的数据类型 也可以具有不同的数据类型 所谓共用体类型 就是几个不同类型的变量共占一段内存的结构 10 7共用体 共用体类型定义一般形式如下 union共用体名 数据类型成员名1 数据类型成员名2 数据类型成员名n uniondata inti charch floatf 10 7共用体 共用体变量的定义1 共用体类型与共用体变量同时定义2 先定义共用体类型 再定义共用体变量3 直接定义共用体变量 uniondata inti charch floatf u1 u2 u3 uniondata inti charch floatf uniondatau1 u2 u3 union inti charch floatf u1 u2 u3 10 7共用体 共用体变量的引用如 使用u5 i形式引用共用变量u5的成员i 使用u5 ch形式引用共用变量u5的成员ch 使用u5 f形式引用共用变量u5的成员f

温馨提示

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

评论

0/150

提交评论