清华大学C语言课件-数据的组织结构二 结构体.ppt_第1页
清华大学C语言课件-数据的组织结构二 结构体.ppt_第2页
清华大学C语言课件-数据的组织结构二 结构体.ppt_第3页
清华大学C语言课件-数据的组织结构二 结构体.ppt_第4页
清华大学C语言课件-数据的组织结构二 结构体.ppt_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

Lesson15数据的组织结构 1 39 学习目标 1 学会使用结构体表达数据 2 39 为什么要定义结构体类型 在程序里表示一个人 姓名 年龄 性别 怎么表示 想表示多个人呢 如何用计算机程序实现下述表格的管理 3 39 数组的解决方法 4 39 数组的解决方法 5 39 数据的内存管理方式 数组的解决方法 分配内存不集中 寻址效率不高对数组赋初值时 易发生错位结构显得零散 不易管理 6 39 希望的内存分配图 7 39 结构体类型的概念结构体是一种可以将若干个不同数据类型的变量组合在一起的复合型数据类型 人们常常借助于它将表达同一对象的不同属性封装在一起 使之达到逻辑概念与程序变量一一对应的目的 提高程序的清晰度 降低程序的复杂度 改善程序的可维护性 8 39 C数据类型 基本类型 构造类型 指针类型 空类型void 定义类型typedef 字符类型char 枚举类型enum 整型 实型 数组 结构体struct 共用体union 数据类型决定 1 数据占内存字节数2 数据取值范围3 其上可进行的操作 C的数据类型总表 9 39 成员类型可以是基本型或构造型 定义结构体类型 一般方法 struct结构体名 类型成员1 类型成员2 注意分号 注意 只是告诉计算机 程序中定义了一种新的类型 模板 这种类型的变量具有这样的结构 组成 struct是关键字 不能省略 10 39 结构体类型的声明 声明了一个结构体类型 构成结构体的变量称为结构体的成员 StructureMember 结构体的名字称为结构体标签 StructureTag 11 39 结构体类型的声明 结构体模板 StructureTemplate Don tforgetthesemicolon 形成一个类型声明的样板用于生成结构体变量但并未声明结构体变量因而编译器不为其分配内存 注意 1 每个成员都有名称2 每个成员都有类型3 成员排名不分先后4 成员的数量不受限制 根据需要定义 12 39 1 先定义结构体类型 再定义变量名 2 在定义类型的同时定义变量 3 直接定义结构体变量 不指定结构体标签 结构体变量的定义 13 39 在C语言中 允许用户为已经存在的数据类型起一个别名 其说明格式为 typedef原数据类型新数据类型名 14 39 注意 类型名 必须是系统提供的数据类型或用户已定义的数据类型 定义替代类型名的作用是 给已有的类型起个别名标识符 例如 typedefintINTEGER int和INTEGER完全等价 INTEGERa 15 39 用typedef定义数据类型 structstudentstu1 stu2 Itworks studentstu1 stu2 Canthiswork structstu1 stu2 Canthiswork STUDENTstu1 stu2 Itworks 关键字typedef为一种已存在的类型定义一个别名 并未定义新类型 STUDENT与structstudent类型是同义词 16 39 定义结构体 Example StructPoint floatx y structId charLastName 10 charFisrtName 10 intAge Structpointp1 StructIdId1 StructPoint floatx y p1 structId charLastName 10 charFisrtName 10 intAge Id1 P1 Id1是结构体变量 17 39 typedefstructPoint floatx y POINT 新类型POINTtypedefstructId charLastName 10 charFisrtName 10 intAge ID 新类型IDPOINTp1 定义变量p1 Id1IDId1 typedefStructcircle floatx y floatradium CIRCLE Typedefstructsquare floatlength floatx yl SQUARE typedefStructcomplex floatre im COMPLEX COMPLEXc1 c2 c1 c2结构体变量 18 39 例structstudent intnum charname 20 charsex intage floatscore charaddr 30 结构体类型定义描述结构的组织形式 不分配内存 结构体类型定义的作用域 19 39 includestructstu charname 10 charno 20 charclass 1 10 intage intscore stu1 stu2 voidmain printf stu d stu1 d n sizeof stu sizeof stu stu 48 stu1 48 例 结构体及结构体变量的内存宽度 20 39 说明结构体类型与结构体变量概念不同类型 不分配内存 变量 分配内存类型 不能赋值 存取 运算 变量 可以结构体可嵌套结构体成员名与程序中变量名可相同 不会混淆结构体类型及变量的作用域与生存期 21 39 定义一个日期结构体类型 其组成结构为 年 月 日 structdate intmonth intday intyear birthday 22 39 struct结构体名 类型标识符成员名 类型标识符成员名 struct结构体名结构体变量 初始数据 例structstudent intnum charname 20 charsex intage charaddr 30 structstudentstu1 112 WangLin M 19 200BeijingRoad 形式一 23 39 形式二 struct结构体名 类型标识符成员名 类型标识符成员名 结构体变量 初始数据 例structstudent intnum charname 20 charsex intage charaddr 30 stu1 112 WangLin M 19 200BeijingRoad 24 39 形式三 struct 类型标识符成员名 类型标识符成员名 结构体变量 初始数据 例struct intnum charname 20 charsex intage charaddr 30 stu1 112 WangLin M 19 200BeijingRoad 25 39 结构体变量的使用 使用结构体变量 是使用结构体的组成成员 使用方法 变量名 成员名 26 39 结构体型变量的基本操作结构体型变量的输入scanf d d structdate intmonth intday intyear d 27 39 结构体型变量的基本操作3 结构体型变量的赋值d year 2005 d month 5 d day 20 如果一个结构体型变量已经被赋值 并且希望将它的值赋给另外一个类型完全相同的结构体型变量 则可以采用整体赋值的方式 d2 d 28 39 例1 编写程序 实现复数的加法 分析 定义一个类型 可以保存复数信息 这个类型具有什么样的结构 2 3i4 8i 实部 虚部 29 39 structcomplex intreal intimge c1 c2 c3 intmain printf 请输入第一个复数 scanf d d 分别运算 在定义类型时定义变量 30 39 使用结构体的方法计算两个坐标点的距离坐标点使用结构体表示 31 39 include includestructpoint type intx x坐标 inty y坐标 p1 p2 intmain doubledistance printf 请输入第1个点的坐标x y n scanf d d 32 39 结构体数组的定义三种形式 形式一 structstudent intnum charname 20 charsex intage structstudentstu 2 形式二 structstudent intnum charname 20 charsex intage stu 2 形式三 struct intnum charname 20 charsex intage stu 2 33 39 结构体数组初始化 例struct intnum charname 20 charsex intage stu 顺序初始化 structstudent intnum charname 20 charsex intage structstudentstu 100 WangLin M 20 101 LiGang M 19 110 LiuYan F 19 例structstudent intnum charname 20 charsex intage stu 结构体数组引用 引用方式 结构体数组名 下标 成员名 34 39 应用举例统计后选人选票 structperson charname 20 intcount leader 3 Li 0 Zhang 0 Wang 0 main 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 for i 0 i 3 i printf 5s d n leader i name leader i count 35 39 例2 输入如下的5个学生的信息并输出 36 39

温馨提示

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

评论

0/150

提交评论