C语言程序设计教学做一体化-模块9.ppt_第1页
C语言程序设计教学做一体化-模块9.ppt_第2页
C语言程序设计教学做一体化-模块9.ppt_第3页
C语言程序设计教学做一体化-模块9.ppt_第4页
C语言程序设计教学做一体化-模块9.ppt_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

C语言程序设计教学做一体化主编滕泓虬中国水利水电出版社 模块九 构造数据类型 9 1结构体 1 掌握结构体类型的定义2 掌握结构体类型变量的定义 初始化和应用 本节学习目标 9 1 1结构体类型的定义 结构体是由不同数据类型的数据组成的集合体 它包含若干个成员 在说明和使用结构体之前必须先定义它 也就是构造它 结构体定义实际上是说明结构体是由哪些成员所组成 以及成员的数据类型 9 1 1结构体类型的定义 案例9 1 使用结构体类型描述学生的基本信息 需要包含学号 姓名 性别 年龄和入学成绩 structstudent charnum 11 char name charsex intage floatscore 结构体类型名 其中struct是保留字 student是结构体名 结构体由5个成员组成 第一个成员为num 字符数组 第二个成员为name 字符数组 第三个成员为sex 字符变量 第四个成员为age 整型变量 第五个成员为score 实型变量 提示 在大括号后的分号是不可少 知识连接 定义一个结构的一般形式为 struct结构体名 结构体成员表 9 1 2结构体变量的定义 定义结构体类型相当于做了一个模型 但是其中并没有具体数据 系统不对它分配实际的内存单元 为了能在程序中使用结构体类型的数据 就要定义结构体类型的变量 并且在其中存放具体的数据 9 1 2结构体变量的定义 案例9 2 使用结构体student定义结构体变量jack和rose structstudent charnum 11 char name charsex intage floatscore structstudentjack structstudentrose 提示 在这种定义方法中 保留字struct和结构名student必须同时出现 知识连接 1 结构体变量同其他变量一样 也必须先定义 然后才能使用 首先定义结构类型 然后定义结构变量 2 结构变量定义的一般形式如下 struct结构体名 结构体成员表 struct结构体名结构体变量名 9 1 3结构体变量的初始化 对结构体变量的初始化 就是在定义该结构体变量的同时 对其成员变量赋初值 结构体变量初始化的一般形式如下 struct结构体名结构体变量名 初始数据 9 1 3结构体变量的初始化 案例9 3 对结构体student类型的结构体变量jack和rose初始化 includevoidmain structstudent intnum char name charsex floatscore structstudentjack 2010 jack M 765 4 structstudentrose 2012 rose F 876 5 printf Themessageofstudentjack n printf Number d nName s n jack num jack name printf Sex c nScore f n jack sex jack score printf Themessageofstudentrose n printf Number d nName s n rose num rose name printf Sex c nScore f n rose sex rose score 知识连接 1 初始化数据的个数要与成员的个数相同 2 初始化数据的类型要与相应的成员变量的类型一致 9 1 4结构体变量成员的引用 结构体变量被定义之后 就可以在程序中使用它 在对结构体进行引用时 不能对一个结构体变量作为一个整体直接进行操作 一般只能对结构体变量中的各个成员进行直接操作 结构体变量成员的引用的两种方式 用结构体成员运算符方式 结构变量名 成员名用指针方式 9 1 4结构体变量成员的引用 案例9 4 引用结构体student类型的结构体变量jack和jack2的成员 structstudentjack structstudentjack2 jack num 2010 jack name jack printf inputsexandscore n scanf c f 9 2指向结构体类型数据的指针 学习目标1 理解结构体指针变量的定义 2 掌握结构体指针变量的运用 3 了解结构体数组变量的定义和初始化 9 2 1指向结构体变量的指针 结构体指针变量即指向结构体变量的指针 它是一个指针变量 结构体指针变量中的值是所指向的结构体变量的首地址 通过结构体指针即可访问该结构体变量 这与数组指针和函数指针的情况是相同的 9 2 1指向结构体变量的指针 定义结构体指针变量的一般形式为 struct结构体名 结构体指针变量名structstudentboy 2010 jack M 607 3 structstudent ps ps 9 2 1指向结构体变量的指针 定义结构体指针变量后 就可以用指针变量来引用结构体变量的各个成员 用指针变量引用结构体成员的一般形式为 结构体指针变量名 成员名或者 结构体指针变量名 成员名例如 ps num或者 ps num 9 2 1指向结构体变量的指针 includestructstudent intnum char name charsex floatscore voidmain structstudentboy 2010 jack M 607 3 structstudent ps ps 提示 ps 两侧的括号不可少 因为成员符 的优先级高于 如果去掉括号写作 pstu num则等效于 pstu num 这样 意义就完全不对了 9 2 2指向结构体数组的指针 结构体数组是其元素都是具有相同结构体类型的结构体变量 与一般数组一样 结构体数组也是要先定义后使用 structstudentstu 5 2010 jack M 523 45 2012 tom M 634 567 2013 rose F 492 7891 2014 kate F 787 2015 jim M 580 9 案例9 6 用指针变量输出结构体数组 includestructstudent intnum char name charsex floatscore voidmain structstudentstu 5 2010 jack M 523 45 2012 tom M 634 567 2013 rose F 492 7891 2014 kate F 787 2015 jim M 580 9 structstudent ps printf No tName tSex tScore t n for ps stu psnum ps name ps sex ps score 在main函数中定义structstudent类型结构体数组stu并对其初始化 定义了一个指向structstudent类型结构体的指针变量ps 知识连接 1 结构体数组定义的一般格式如下 struct结构体名结构体数组名 元素个数 2 结构体数组与其他类型的数组一样 可以初始化 初始化的一般格式如下 struct结构体名结构体数组名 初始化数据 或者是 struct结构体名 结构体成员列表 结构体数组名 初始化数据 9 3用指针处理链表 学习目标1 理解链表的概念 2 了解使用指针和结构体构成链表的方法 3 掌握单链表的建立 插入 删除等算法 9 3用指针处理链表 单链表分配一些任意的存储单元来存储线性表中的数据元素 这些存储单元可以分散在内存中的任意位置上 它们在物理上可以是一片连续的存储单元 也可以是不连续的 9 3用指针处理链表 单链表为了表示线性表每个数据元素ai与数据元素ai 1的逻辑关系 在存储元素ai的数据信息时 必须使用一个指针指向它的直接后继ai 1 因此单链表的每个结点的存储区分为数据域和指针域两个部分 如图9 1所示 案例9 7程序分析 使用结构体structnode来描述单链表的这种结构 structnode类型 里面包含float型数据域data和指向下一个structnode结点的指针next structnode 结构体node floatdata 定义数据域 structnode next 定义指针域 案例9 7程序分析 程序中自定义的insert函数用后插法为带头结点的单链表插入新的结点 从而建立带头结点的单链表 案例9 7程序分析 程序中自定义的dele函数实现删除链表结点 如图9 3所示删除单链表中一个已存在的结点的过程 案例9 7程序分析 main函数调用malloc函数为链表的头结点动态的申请了一个structnode类型的内存空间 头结点中的data成员用于记录链表的结点数 next指针指向下一个链表结点 调用while语句无限循环的让用户选择插入 删除 打印和退出的操作 若选择退出则终止循环结束程序 9 4共用体 学习目标1 掌握共用体类型的定义2 掌握共用体类型的引用 9 4 1共用体类型的定义 共用体是将不同的数据项放在同一段内存单元的一种构造数据类型 共用体变量定义的一般形式如下 union共用体名 成员列表 9 4 1共用体类型的定义 案例9 8 定义共用体类型people 并且使用该类型声明变量a 计算a所占内存长度 includeunionpeople charname 10 longsno charsex floatscore 4 main unionpeoplea printf Thelengthofais d n sizeof a 案例9 8程序分析 共用体所需的存储空间的大小则取决于共用体内占用空间最大的成员的大小 本案例的共用体people有四个成员 其中第四个成员是一个含有4个元素的浮点型数组 该数组每个元素占用4个字节 大小为4 4 16字节 是共用体people占用空间最大的成员 所以共用体people所需的存储空间为16字节 它所定义的变量的大小也就是16字节 9 4 2共用体类型的引用 对共用体变量引用的方式与结构体变量的引用方式类似 但共用体变量不能直接引用 只能引用共用体成员 其引用方式为 共用体变量名 成员名ex a 4 ex b 6 9 4 2共用体类型的引用 案例9 9 引用共用体类型变量中的成员变量 includeunionexample struct intx inty in inta intb ex voidmain ex a 4 ex b 6 ex in x ex a ex b ex in y ex a ex b printf d d n ex in x ex in y 共用体是用同一段内存存放不同类型的数据 所以在每一时刻内存只有一成员 案例中先对成员ex a进行赋值 然后对成员ex b进行赋值 那么只有ex b是有效存在的 而之前对成员ex a的赋值已经被后者ex b覆盖而不再有效 共用体变量的地址和它所有成员的地址都是相同的 如 ex ex a ex b都是同一个地址 9 5枚举类型 学习目标1 掌握枚举类型和枚举变量的定义 2 掌握枚举变量的使用 9 5枚举类型 1 若某个变量只有几种可能的值 如人民币的面值只有分 角 元这三种取值 那么就可以把该变量定义为枚举类型 所谓 枚举 是指把变量的值一一列举出来 变量的取值只能是列举出来的某一个值 2 枚举类型的一般定义格式如下 enum枚举类型名 标识符1 标识符2 标识符n 变量名列表 9 5枚举类型 案例9 10 枚举类型的使用 includeenummonth Jan Feb Mar Apr 8 May Jun Jul Aug Sept Oct Nov Dev voidmain enummonthmon1 Mar enummonthmon2 Jun printf d d n mon1 mon2 9 6用户自定义类型 学习目标掌握用typedef定义类型 9 6用户自定义类型 1 使用typedef语句的一般形式如下 typedef原数据类型新的数据类型名 2 使用typedef的目的 一个是给复杂的数据类型一个易于记忆的名字 另一个是有利于程序的通用和移植 有时候程序会依赖于硬件特性 用typedef便于移植 案例9 11 使用typedef自定义STU类型 includetypedefstructstudent intnum char name charsex floatscore STU voidmain structstudentjack1 2010 jack M 987 6 STUjack2 2010 jack M 987 6 printf Themessageofstudentjack1 n printf Number d nName s n jack1 num jack1 name printf Sex c nScore f n jack1 sex jack1 score printf Themessageofstudentjack2 n printf Number d nName s n jack2 num jack2 name printf Sex c nScore f n jack2 sex jack2 score 使用typedef声明新的类型名STU代替已有的structstudent类型名 声明的新类型名STU 它代表上面指定的structstudent结构体类型 STU可以声明变量 课后练习 选择题1 若有以下定义 structst inta floatf s p p 执行后输出结果是 A 产生语法错B 随机值C AD 65 3 设有以下定义structss intinfo struct

温馨提示

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

评论

0/150

提交评论