计算机二级__构造数据类型_第1页
计算机二级__构造数据类型_第2页
计算机二级__构造数据类型_第3页
计算机二级__构造数据类型_第4页
计算机二级__构造数据类型_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

6 1结构体类型6 2联合体6 3枚举类型6 4用typedef定义类型 第6章构造数据类型 6 1 1结构体类型的定义 structstudent intnum charname 20 charsex intage doublescore charaddr 30 结构是由一系列相同类型或不同类型数据构成的集合 结构中的每个数据称为结构的成员 struct结构类型名 数据类型成员名1 数据类型成员名2 数据类型成员名n 6 1 2结构体类型变量的定义 先定义结构体类型再定义变量名structstudentstudent1 student2 在定义类型的同时定义变量无名定义 不定义结构体名 structstudent intnum charname 20 charsex intage doublescore charaddr 30 student1 student2 struct intnum charname 20 charsex intage doublescore charaddr 30 student1 student2 结构类型的定义说明了该数据类型的组成 要使用该结构 必须定义结构类型的变量 6 1 2结构体类型变量的定义 结构体类型和结构体变量是两个不同的概念 不要混同 结构体变量所占内存空间的大小是其各个成员所占空间之和 C 允许在一个结构中嵌套另一个结构 成员名与程序中的变量可以同名 但不能与结构体类型同名 结构体变量名可以和结构体类型同名 注意 structaddr intpost charad 30 structstudent longnum charname charsex doublescore structaddraddr structstudent intnum charname 20 charsex stu 10001 WangPing F stu 1001 zhangsan f 78 032111 hebeitangshan includevoidmain cout stu num cout stu sex cout stu addr post 初始数据个数 顺序和类型应与结构成员一一对应 structstudent intnum 10001 charname 20 WangPing charsex F stu 6 1 3结构体变量的初始化 Wrong 不能在定义类型时初始化 访问结构体变量的成员结构体变量名 成员名 是成员运算符 优先级最高 左结合性 例如 student1 num 10010 student1 age cout student1 num sum student1 num student1 age 结构体变量可以整体赋值 赋值号左右都必须是同类型的结构体变量 但是输入输出只是针对每一个成员进行 不能整体输出输入 student1 student2 6 1 4结构体变量的成员的访问 定义 每个数组元素都是一个结构体类型的数据 structstudent intnum charname 20 charsex structstudentstu 10 初始化 全部初始化时长度可省略 studentstu 1001 LiuLi F 1101 HeFei M 使用 可访问结构体数组元素的成员 stu 1 sexstu 0 num可进行同一个结构体类型变量 数组元素 的整体赋值stu 0 stu 1 要对结构体数组元素的单个成员进行输入输出for i 0 i stu i num stu i name stu i sex 6 1 5结构体数组 例 输入n个学生的学号 班级 平时成绩 期末成绩 计算其总评成绩 总评成绩 平时成绩 0 2 期末成绩 0 8 并打印 include include includevoidmain structstudent intnum charbj 10 charname 10 intps intqm intzp stu 3 inti for i 0 i stu i name cout stu i ps cout stu i qm stu i zp stu i ps 0 2 stu i qm 0 8 cout 学号班级姓名平时成绩期末成绩总评成绩 endl for i 0 i 3 i cout setw 4 stu i num cout setw 8 stu i bj cout setw 8 stu i name cout setw 8 stu i ps cout setw 8 stu i qm cout setw 8 stu i zp endl studentstu p p 把结构变量的地址赋给结构指针 指向结构体变量的指针 6 1 6结构体指针 结构体指针是一个指针变量 指向一个结构体变量 即指向该变量所分配的存储区域的首地址 p sex p num p name p sex指针变量名 成员名 是指向运算符 左结合性 p sex 使用指针形式访问结构体成员 structperson charname 20 intage charsex a lining 20 m p 则对字符串lining的访问方式可以是 A p nameB p nameC a nameD p name ACD p num 得到p指向的结构体变量中的成员num的值 得到p指向的结构体变量中的成员num的值 用完该值后使它加1 得到p指向的结构体变量中的成员num的值使之加1 先加 p num p num 得到p指向的结构体变量中的成员num的值 而后p的值加1 p num p num 先将p的值加1 而后得到p指向的结构体变量中的成员num的值 指向结构体数组的指针 structstudent intnum charname 20 charsex stu 20 p p stu 即将该数组的首地址赋值给该指针变量 注意 p num p num的结果分别为何 stu 0 stu 1 stu 2 p 1101 1001 includestructdate intyear month day voidfunc structdatep p year 2000 p month 5 p day 22 voidmain structdated d year 1999 d month 4 d day 23 cout d year d month d day func d cout d year d month d day 1999423 1999423 可将整个结构体变量作为参数进行单向值传递 若成员多 开销大 用指向结构体的指针作函数参数 6 1 7结构体指针的应用 可将结构体变量的存储地址或结构数组名作为实参向函数传递 形参为指向相同结构体类型的指针 1999423 2000522 structdate intyear month day voidfunc structdate p p year 2000 p month 5 p day 22 main structdated d year 1999 d month 4 d day 23 cout d year d month d day func 可将形参定义为相同结构体类型的实参的引用 structdate intyear month day voidfunc structdate main structdated d year 1999 d month 4 d day 23 cout d year d month d day func d cout d year d month d day 1999423 2000522 编写print函数 输出包含n个学生信息的结构数组 每个学生的信息包括学号 姓名 和三门课程的成绩 用指针实现 includestructstudent charname 10 intcj voidprint student p voidmain studentstu 3 p p stu for inti 0 i p name cin p cj p print stu voidprint student p for inti 0 iname coutcj endl p 用结构体指针处理链表 链表是一种最为常见的数据结构 它能够动态地进行存储分配 主要优势在于 数据动态增减的情况处理 插入 删除 链表概述 1 所谓链表是指若干个数据项 每个数据项称为一个 结点 按一定的原则连接起来 每个数据项都包含有若干个数据和一个指向下一个数据项的指针 依靠这些指针将所有的数据项连接成一个链表 链表概述 2 structstudent charname 20 longnum floatscore structstudent next structstudent head 一个简单链表示例 链表的基本操作 链表的建立从链尾到链头 新结点插入到链头从链头到链尾 新结点插入到链尾链表的插入操作根据一定的条件 把新结点插入到指定位置链表的删除操作根据一定的条件 删除一个或多个结点链表的输出操作链表的查找操作 建立链表操作 从链尾到链头 head head p p new structnode p data a i for i 0 i n i p next head 建立链表操作 从链头到链尾 p next q q new structnode q data a i q next NULL p q for i 0 i n i 链表的插入操作 p next q q new structnode q data x if p满足插入条件 q next p next 链表的删除操作 p next q next delete q q p next if p next满足删除条件 链表的输出操作 p p next while p printf d p data 链表的查找操作 p2 p1 p1 p1 next while num p1 num p1 NULL printf find ld 5 2f n num p1 score 两种链表的区别 带头结点的链表 p第一个节点表示 p head next 不带头结点的链表 第一个节点表示 p head 例6 8p204 编写程序 在main函数中调用creat函数和print函数 分别实现学生信息链表的创建和链表数据的输出 其中链表数据包括学号和成绩两部分 使几个不同的变量共同占同一段内存的结构 定义形式 同结构体 union共用体名 成员表列 变量表列 uniondata shortinti charch floatf uniondataa b c 6 2联合体 uniondata shortinti charch floatf a b c union shortinti charch floatf a b c 1000H 共用体变量占用的内存长度等于最长的成员的长度 4个字节 共用体类型数据的特点 同一个内存段在每一瞬时只能存放其中一种类型的成员 并非同时都存在和起作用 共用体变量的地址和它的各成员的地址都是同一地址 a a i a f a ch 起作用的成员是最后一次存放的成员 a i 1 a ch a a f 1 5 cout a f 共用体变量不能作为函数参数 但可使用指向共用体变量的指针 不能对共用体变量名赋值 不能在定义共用体变量时对它初始化 uniondata inti charch floatf a 1 a 1 5 a 1 m a 不能初始化 不能对共用体变量赋值 不能引用共用体变量名以得到值 共用体类型可出现在结构体定义中 结构体也可出现在共用体定义中 includevoidmain unionexample struct intx y in inta b e e a 1 e b 2 e in x e a e b e in y e a e b cout e in x e in y 4 8 请问 e a和e b分别是多少 6 3枚举常量 使用关键字enum定义枚举类型常量 枚举常量是一种符号常量 在内存中表示整型数 enum类型名 枚举常量1 枚举常量2 例如 enumCOLOR RED BLUE GREEN WHITE BLACK 其中COLOR是枚举类型名 不是变量名 不占内存空间 RED BLUE 是符号常量 如果没有专门规定 第一个符号常量的枚举值就是0 其他依次为 1 2 3 故RED的值为0 BLUE的值为1 可以给符号常量指定枚举值 也可以部分指定枚举值 enumCOLOR RED 100 BLUE 200 GREEN WHITE 400 其中GREEN自动被赋值为201 6 3枚举常量 枚举元素被视为常量 在枚举类型定义之外 均不能对其赋值 在定义中各枚举元素不能重名 程序中其他标识符也不能与枚举元素重名 定义枚举变量的方法同结构体变量一样 enumcolorC1 C2 6 3枚举常量 枚举元素的访问 枚举元素可以直接赋给枚举变量 直接访问 C1 red C1 10 同类型的枚举变量间 枚举元素间 枚举变量与枚举元素间可以进行算术元素 关系运算 枚举变量和枚举元素也可以作为函数的参数 返回值也可以是枚举类型 错误 其他整型常量不能直接赋给枚举变量 typedefintINTEGER typedefstructstudentSTUD 6 4用typedef为类型定义别名 structstudent intnum charname 20 charsex intage doublescore charaddr 30 STUDstudent1 student2 用STUD代替structstudent类型 includestructstudent intnum charname 20 doublescore voidmain structstudentstu 4 p q inti for i 0 i stu i num stu i name stu i score for p q stu pscore q score q p coutnumnamescore endl 例24个学生 每个学生包括学号 姓名 成绩 要求找出成绩最高者的姓名和成绩 includestructstudent intnum charname 20 doublescore voidmain structstudentstu 4 inti k for i 0 i stu i num stu i name stu i score k 0 for i 1 istu k score k i cout stu k num t stu k name t stu k score endl 4个学生 每个学生包括学号 姓名 成绩 要求找出成绩最高者的姓名和成绩 include defineN30structstudent intnum charname 12 intscore voidinput studentstu in

温馨提示

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

评论

0/150

提交评论