高级语言程序设计第9章用户自定义数据类型.ppt_第1页
高级语言程序设计第9章用户自定义数据类型.ppt_第2页
高级语言程序设计第9章用户自定义数据类型.ppt_第3页
高级语言程序设计第9章用户自定义数据类型.ppt_第4页
高级语言程序设计第9章用户自定义数据类型.ppt_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

第九章 用户自己建立数据类型 主要内容 结构体类型共用体类型枚举类型链表 问题的提出 有一张学生的成绩表如下所示 100101LiFunM1887 5Beijing100102ZhangLiF1786Xi an100103WangWuM1889Dalian100104ChenHuaF1990Shanghai100105WuSongM1699Shandong Numnamesexagescoreaddr 如何表示和访问表中的数据 每一列同类型 可以用数组表示 但访问一个学生的记录时需访问几个不同的数组 很麻烦 需要将不同类型的数据组成一个有机的整体 以便于引用 9 1定义和使用结构体变量 C语言用 结构体 把关系密切但类型不同的数据组织在一起 即封装起来 解决上述问题 结构体通常由不同数据类型的数据项组成 一般也称由不同成员组成 每个成员可以有不同的名字和数据类型 声明一个结构体类型的一般形式为 struct结构体名 成员表列 如 structstudent intnum charname 20 charsex intage floatscore charaddr 30 结构体名 类型名 成员名 9 1定义结构体类型变量 可以采取以下3种方法定义结构体类型变量 1 先声明结构体类型再定义变量名例如 structstudentstudent1 student2 结构体类型名结构体变量名定义了student1和student2为structstudent类型的变量 即它们具有structstudent类型的结构 2 在声明类型的同时定义变量 这种形式的定义的一般形式为 struct结构体名 成员表列 变量名表列 例如 structstudent intnum charname 20 charsex intage floatscore charaddr 30 student1 student2 它的作用与第一种方法相同 即定义了两个structstudent类型的变量student1 student2 3 直接定义结构体类型变量 其一般形式为 struct 成员表列 变量名表列 即不出现结构体名 关于结构体的几点说明 1 对结构体中的成员 即 域 可以单独使用 它的作用与地位相当于普通变量 2 成员名可以与程序中的变量名相同 二者不代表同一对象 3 成员也可以是一个结构体变量 例如 structdate 声明一个结构体类型 intmonth intday intyear structstudent intnum charname 20 charsex intage floatscore structdatebirthday birthday是structdate类型 charaddr 30 student1 student2 9 1 3结构体变量的初始化和引用 例9 1对结构体变量初始化 includevoidmain structstudent longintnum charname 20 charsex charaddr 20 a 10101 LiLin M 123BeijingRoad 对结构体变量a赋初值 printf No ld nname s nsex c naddress s n a num a name a sex a addr 结构体变量的引用 引用结构体变量中成员的方式为结构体变量名 成员名例如 student1 num表示student1变量中的num成员 即student1的num 学号 项 可以对变量的成员赋值 例如 student1 num 10010 是成员 分量 运算符 它在所有的运算符中优先级最高 因此可以把student1 num作为一个整体来看待 上面赋值语句的作用是将整数10010赋给student1变量中的成员num 几点说明 1 不能将一个结构体变量作为一个整体进行输入和输出 例如 已定义student1和student2为结构体变量并且它们已有值 printf d s c d f n student1 scanf d s c d f s student1 2 如果成员本身又属一个结构体类型 则要用若干个成员运算符 一级一级地找到最低的一级的成员 只能对最低级的成员进行赋值或存取以及运算 例如 对上面定义的结构体变量student1 可以这样访问各成员 student1 numstudent1 birthday month 注意 不能用student1 birthday来访问student1变量中的成员birthday 因为birthday本身是一个结构体变量 几点说明 3 对结构体变量的成员可以像普通变量一样进行各种运算 根据其类型决定可以进行的运算 例如 student2 score student1 score sum student1 score student2 score student1 age student2 age 4 可以引用结构体变量成员的地址 也可以引用结构体变量的地址 例如 scanf d 输入student1 num的值 printf o student1 输出student1的首地址 结构体变量的地址主要用作函数参数 传递结构体变量的地址 几点说明 5 C99标准允许对某一成员初始化 如 structStudentb name ZhangFang 其它未被初始化的数值型成员置0 字符型成员置 0 指针成员被系统初始化为NULL 6 同类的结构体变量可以互相赋值 如 stu 1 stud2 例9 2输入两个学生的学号 姓名和成绩 输出成绩较高的学生的信息 9 2结构体数组 结构体数组 每个元素都是一个结构体类型数据的数组 定义方法和定义结构体变量的方法相仿 只需说明其为数组即可 例如 structstudent intnum charname 20 charsex intage floatscore charaddr 30 structstudentstu 3 以上定义了一个数组stu 数组有 个元素 均为structstudent类型数据 结构体数组的定义 也可以直接定义一个结构体数组 例如 structstudent intnum stu 3 或 strcut intnum stu 3 结构体数组的初始化 与其他类型的数组一样 对结构体数组可以初始化 例如 structstudent intnum charname 20 charsex intage floatscore charaddr 30 stu 2 10101 LiLin M 18 87 5 103BeijingRoad 10102 ZhangFun M 19 99 130ShanghaiRoad 数组的初始化也可以用以下形式 structstudent intnum structstudentstr 即先声明结构体类型 然后定义数组为该结构体类型 在定义数组时初始化 例9 3对候选人得票的统计程序 设有3个候选人 每次输入一个得票的候选人的名字 要求最后输出各人得票结果 include includestructperson charname 20 incount leader 3 Li 0 Zhang 0 Fun 0 voidmain inti j charleader name 20 for i 1 i 10 i scanf s leader name for j 0 j 3 j if strcmp leader name leader j name 0 leader j count printf n for i 0 i 3 i printf 5s d n leader i name leader i count 9 3结构体指针 9 3 1指向结构体变量的指针一个结构体变量的起始地址就是这个结构体变量的指针 如果把一个结构体变量的地址存放在一个指针变量中 那么 这个指针变量就指向该结构体变量 例9 5通过指向结构体变量的指针变量输出结构体变量中成员的信息 9 3 2指向结构体数组的指针 可以用指针变量指向结构体数组的元素 例9 6有三个学生的信息 放在结构体数组中 要求输出全部学生的信息 9 3 3用结构体变量和结构体变量的指针作函数参数 结构体变量的成员作参数结构体变量做实参指向结构体变量的指针作实参 例9 7输出平均成绩最高的学生的信息 共用体类型数据结构 问题的提出 一个学校人员的通用管理程序中 一般使用下列数据 1 编号 2 姓名 3 性别 4 年龄 5 职业 6 级别 学生 grade 取值 1 2 3 4 教师 title 取值 教授 副教授 讲师 助教 职员 post 校长 处长 科长 科员 这里grade title post虽然类型不同 但不同时出现 如何编写程序 分别输入和输出学生 教师和职员各人的信息 问题的分析 对于前面5个相同的数据 可以用结构体数据表示 而对于级别这个数据 则学生 教师和职员的数据虽然不同 但在程序中它们不会同时出现 就像日常使用的表格一样 对不同的人这一项有不同的内容 在C语言中可以用共用体类型数据来表示 即一个存储空间来存储不同类型的数据 共用体变量的定义 定义共用体类型变量的一般形式为 union共用体名 成员表列 变量表列 例如 uniondatauniondata inti inti charch 或charch floatf floatf a b c uniondataa b c 共用体变量所占的内存长度等于最长的成员的长度 上面定义的 共用体 变量 各占 个字节 而不是7个 共用体类型数据的特点 1 只有先定义了共用体变量才能引用它 而且不能引用共用体变量 而只能引用共用体变量中的成员 2 同一个内存段可以用来存放几种不同类型的成员 但在每一瞬时只能存放其中一种 而不是同时存放几种 3 共用体变量中起作用的成员是最后一次存放的成员 在存入一个新的成员后原有的成员就失去作用 4 共用体变量的地址和它的各成员的地址都是同一地址 共用体类型数据的特点 5 不能对共用体变量名赋值 也不能企图引用变量名来得到一个值 又不能在定义共用体变量时对它初始化 6 不能把共用体变量作为函数参数 也不能使函数带回共用体变量 但可以使用指向共用体变量的指针7 共用体类型可以出现在结构体类型定义中 也可以定义共用体数组 反之 结构体也可以出现在共用体类型定义中 数组也可以作为共用体的成员 例 编写程序 分别输入和输出学生 教师和职员各人的信息 3枚举类型 枚举 将变量的值一一列举出来 变量的值只限于列举出来的值的范围内 申明枚举类型用enumenumweekday sun mon tue wed thu fri sat 定义变量 enumweekdayworkday week day enum sun mon tue wed thu fri sat workday 变量值只能是sun到sat之一 说明 在 编译中 对枚举元素按常量处理 故称枚举常量 它们不是变量 不能对它们赋值 2 枚举元素作为常量 它们是有值的 语言编译按定义时的顺序使它们的值为 3 枚举值可以用来作判断比较 4 一个整数不能直接赋给一个枚举变量 例子 从键盘输入一个今天是星期几的整数 程序输出与之对应的今天是星期几的英文字母 用typedef定义类型 用typ

温馨提示

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

评论

0/150

提交评论