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

下载本文档

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

文档简介

1 第9章结构体 华北电力大学控制与计算机 C语言程序设计 1 2020 1 1 2 第9章结构体 9 1结构体9 2类型命名 2020 1 1 3 一个学生的信息有学号 姓名 性别 年龄 住址 成绩等 一本图书的信息有分类编号 书名 作者 出版社 出版日期 价格 库存量等 如何存储这些类型不同的相关数据 9 1结构体 9 1 1结构体与结构体类型的定义 信息管理 结构体 一种构造类型数据结构体由若干个数据项组成 构成结构体的各个数据项称为结构体成员 2020 1 1 4 struct结构体名 数据类型1成员名1 数据类型2成员名2 数据类型n成员名n 9 1结构体 9 1 1结构体与结构体类型的定义 结构体类型定义的一般形式 struct为关键字 结构体名是用户定义的类型标识 中是组成该结构体的成员 成员的数据类型可以是C语言所允许的任何数据类型 struct结构体名合起来称为结构体类型为什么结构体数据类型要自己定义 C语言为什么不提供 分号不能少 2020 1 1 5 例如图书类型的定义 structbookcard charnum 10 图书分类编号是字符数组类型 charname 30 书名是字符数组类型 charauthor 30 作者是字符数组类型 charpublisher 60 出版社是字符数组类型 floatprice 价格是单精度实型 intn 库存量是整型 例如学生类型的定义 structstudent charnum 8 学号是字符数组类型 charname 30 姓名是字符数组类型 charsex 性别是字符型 intage 年龄是整型 charaddr 60 住址是字符数组类型 intscore 6 成绩是整型数组类型 9 1结构体 9 1 1结构体与结构体类型的定义 2020 1 1 6 9 1结构体 9 1 2结构体变量的定义与初始化 1 结构体类型变量的定义 利用已定义的结构体类型名定义变量或者数组struct结构体名变量名表 例如 structbookcardbook1 100 structstudents 30 t1 t2 按照结构体类型的组成 系统为定义的结构体变量分配内存单元 结构体变量的各个成员在内存中占用连续存储区域 结构体变量所占内存大小为结构体中每个成员所占用内存的长度之和 2020 1 1 7 9 1结构体 结构体类型与变量的说明 类型与变量是不同的概念 应先定义一个结构体类型 而后再定义结构体变量系统对类型不分配空间 仅对变量分配空间 只能对变量赋值 存取或运算 而不能对一个类型赋值 存取或运算 成员也可以是结构体变量 对结构体中的成员 可以单独使用 它的作用与地位相当于普通变量 成员名可与程序中的变量名相同 也可与不同结构体类型的成员名相同 二者代表不同的对象 structdate intyear month day structstudent charnum 8 charname 30 charsex structdatebirthday 成员为结构体类型 charaddr 60 intscore 6 2020 1 1 8 9 1结构体 9 1 2结构体变量的定义与初始化 1 结构体类型变量的定义 在定义结构体类型的同时定义变量或者数组 例如 structstudent charnum 8 name 20 sex intage floatscore st 30 a b c struct结构体名 成员定义表 变量名表 2020 1 1 9 9 1结构体 9 1 2结构体变量的定义与初始化 1 结构体类型变量和数组的定义 直接定义结构体类型变量或者数组 省略结构体名 例如 struct charnum 8 name 30 sex intage floatscore st 30 a b c struct 成员定义表 变量名表 省略结构体名的结构体类型 只能使用一次 为什么 2020 1 1 10 9 1结构体 9 1 2结构体变量的定义与初始化 2 结构体变量的初始化 例9 4 结构体变量的初始化 structdate intyear month day structstudent charnum 8 name 20 sex structdatebirthday floatscore a 9606011 Liming M 1977 12 9 83 b 9608025 Zhangliming F 1978 5 10 87 c 如果初值个数少于结构体成员个数 则将无初值对应的成员赋以0值 如果初值个数多于结构体成员个数 则编译出错 2020 1 1 11 9 1结构体 9 1 2结构体变量的定义与初始化 3 结构体数组的初始化 例9 5 结构体数组的初始化 structs charnum 8 name 30 sex floatscore stu 3 9606011 Liming M 87 5 9606012 Zhangjiangguo M 79 9606013 Wangping F 90 元素的个数可以省略 根据赋初值时结构体常量的个数确定数组元素的个数 2020 1 1 12 9 1结构体 9 1 2结构体变量的定义与初始化 4 结构体变量的运算 用sizeof运算符计算结构体变量所占内存空间 structdate intyear month day structstudent charnum 8 name 30 sex structdatebirthday floatscore a sizeof a 的结果为8 30 1 12 4 55sizeof structstudent 的结果为55 2020 1 1 13 9 1结构体 9 1 2结构体变量的定义与初始化 4 结构体变量的运算 同类型结构体变量之间的赋值运算 结构体变量之间进行赋值时 系统将按成员一一对应赋值 structdate intyear month day structstudent charnum 8 name 30 sex structdatebirthday floatscore a 9606011 Liming M 1977 12 9 83 b c c a 2020 1 1 14 9 1结构体 9 1 2结构体变量的定义与初始化 4 结构体变量的运算 对结构体变量进行取址运算 structdate intyear month day structstudent charnum 8 name 30 sex structdatebirthday floatscore a 对结构体变量a进行 a运算 可以得到a的首地址 它是结构体类型指针 2020 1 1 15 9 1结构体 9 1 2结构体变量的定义与初始化 5 结构体变量成员的引用 结构体变量成员引用的一般形式 结构体变量名 成员名 结构体变量a的各成员可分别表示为a num a name a sex a birthday a score structdate intyear month day structstudent charnum 8 name 30 sex structdatebirthday floatscore a 是分量运算符 运算级别最高 a birthday yeara birthday montha birthday day 结构体变量的各个成员可进行何种运算 由该成员的数据类型决定 2020 1 1 16 9 1结构体 例9 6 编写一个统计选票的程序 structcandidate charname 20 name为候选人姓名 intcount count为候选人得票数 list invalid 0 Zhao 0 Qian 0 Sun 0 Li 0 Zhou 0 9 1 2结构体变量的定义与初始化 List 0 List 1 List 6 2020 1 1 17 9 1结构体 9 1 2结构体变量的定义与初始化 includevoidmain inti n printf 投票开始 n scanf d 输入所投候选人编号 2020 1 1 18 9 1结构体 9 1 2结构体变量的定义与初始化 for i 1 i 5 i printf s d n list i name list i count printf s d n list 0 name list 0 count 2020 1 1 19 结构体变量的地址与结构体第1个成员的地址相同 但意义不同如 structstu charname 10 intscore a 10个字节4个字节 a name a score a 2000H 结构体变量a的地址和变量a的第1个成员字符数组的起始地址相同 都是2000H 但意义不同 2020 1 1 20 9 1结构体 1 结构体指针变量的定义 结构体指针变量定义的一般形式 struct结构体名 指针变量名 structdate intyear month day q 例如 structstudent p p是指向structstudent结构体变量的指针变量 9 1 3结构体的指针 q是指向structdate结构体变量的指针变量 2020 1 1 21 9 1结构体 9 1 3结构体的指针 2 结构体成员的三种引用形式 用结构体变量名的引用形式 d yeard monthd day structdate intyear month day d p 用结构体指针变量的引用形式 p year p month p dayp yearp monthp day 是指向结构体成员运算符 优先级为一级 p d year 2020 1 1 22 设有如下定义 若要使px指向rec 正确的赋值语句是 structaa intx floaty rec px A px rec x B px rec xC px structaa rec xD px structaa rec x D 2020 1 1 23 151 若有语句 chars1 Beijing s2 10 s3 s4 Shanghai 则对库函数strcpy调用正确的是 A strcpy s1 s4 B strcpy s2 s4 C strcpy s3 s1 D strcpy s4 s1 B 2020 1 1 24 9 1结构体 9 1 3结构体的指针 例9 a 用指针变量完成输入今天的日期 然后输出该日期 voidmain structdate 在函数中定义结构体类型 intyear month day today p 2020 1 1 25 9 1结构体 9 1 3结构体的指针 3 指向结构体数组的指针 例9 7 利用结构体指针输出一组化学元素名称及其原子量 structlist inti charname 4 floatw tab 4 1 H 1 008 2 He 4 0026 3 Li 6 941 4 Be 9 01218 tab是一个全局的结构体数组 2020 1 1 26 9 1结构体 9 1 3结构体的指针 3 指向结构体数组的指针 voidmain structlist p printf No tName tAtomicWeight n for p tab pi p name p w NoNameAtomicWeight 1H1 008 2He4 0026 3Li6 941 4Be9 01218 2020 1 1 27 9 1结构体 9 1 3结构体的指针 例9 8 分析自增自减运算对程序结果的影响 structcode inti charc a 100 A 200 B 300 C 400 D 2020 1 1 28 9 1结构体 9 1 3结构体的指针 voidmain structcode p a printf d t p i printf c t p c printf d t p i printf c t p c printf d t p i printf d n p i p 101 D 301 101 B 200 D 300 301 2020 1 1 29 9 1结构体 9 1 4函数间结构体数据的传递 方法一 在函数之间直接传递结构体数据 函数的形参定义为结构体变量 函数调用时 可将主调函数的结构体类型实参传递给被调函数的形参 如果将函数定义为结构体类型函数 可利用return语句将一个结构体数据结果返回到主调函数中 如 structSTUfunc structSTUa returnb 2020 1 1 30 9 1结构体 9 1 4函数间结构体数据的传递 方法二 在函数之间传递结构体指针 形参定义为指向结构体类型的指针变量 可将主调函数的结构体指针传递给被调函数的形参变量 通过形参指针的指向 操作主调函数中的结构体变量及其成员 如 voidfunc structSTU p 2020 1 1 31 9 1结构体 9 1 4函数间结构体数据的传递 例9 9 编制一个复数乘法函数 采用值传递的方法传送数据 structcomplex 定义存放复数的结构体类型 floatre re成员用于存放复数的实部 floatim im成员用于存放复数的虚部 2020 1 1 32 9 1结构体 9 1 4函数间结构体数据的传递 structcomplexmultiplier structcomplexcx structcomplexcy structcomplexcz cz re cx re cy re cx im cy im cz im cx re cy im cx im cy re return cz 形参是结构体变量 调用此函数时 系统将分别为形参cx和cy各分配一个sizeof structcomplex 大小的内存空间 每个成员都要一一传递 2020 1 1 33 9 1结构体 9 1 4函数间结构体数据的

温馨提示

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

评论

0/150

提交评论