C语言程序设计教程(第8章结构体等构造数据类型).ppt
《C语言程序设计教程(第8章结构体等构造数据类型).ppt》由会员分享,可在线阅读,更多相关《C语言程序设计教程(第8章结构体等构造数据类型).ppt(56页珍藏版)》请在装配图网上搜索。
第8章结构体等构造数据类型 本章需要掌握的知识点结构体的类型说明结构体变量的定义结构体成员的引用使用指针操作结构体数据 内容安排 8 1结构体8 2结构体数组8 3结构体与指针8 4结构体与函数 8 5联合体 8 6枚举8 7类型定义 8 1结构体 C语言提供结构体的目的结构体类型说明结构体变量的定义和初始化结构体成员的引用 1 C语言提供结构体的目的 举例 编写一个学生成绩打印程序 要求 请求用户输入学生的基本情况 其中包括每位学生的学号 姓名和成绩 将每位同学的成绩添加5分 然后按照以下格式输出学生的成绩列表 格式描述如下 学号姓名成绩1张三992王五60 实例的数据分析 数据特点 描述学生基本信息的数据不是一个单独的数值 或者字符或者字符串 而是由学号 姓名和成绩等多个数据项一起构成的 基于旧知识的数据对象描述 将学号 姓名和成绩分别定义为互相独立的简单变量 缺点 难以反映它们之间的内在联系 从而导致数据难于理解和处理 结构体的引入 在C语言中 专门提供结构体机制来描述和处理这些由多个数据项组成的数据 2 结构体类型的声明 结构体通常是由多个数据项所组成的集合体 构成结构体的数据项称之为结构体成员 每一个成员具有各自的名字 可以分别属于不同的数据类型 struct 结构体名 类型标识符成员名 类型标识符成员名 成员类型可以是基本型或结构体型 struct是关键字 不能省略 合法标识符可省 无名结构体 例structstudent intcode 学号charname 20 floatscore 可换成charcode 13 3结构体变量的定义和初始化 1 结构体变量的定义2 结构体变量的初始化 1 结构体变量的定义 定义方法共3种先声明结构体类型 再定义结构体变量声明结构体类型的同时定义结构体变量使用无名结构体类型直接定义各种方法的适用情况 a 先声明结构体类型再定义变量 例structstudent intcode charname 20 floatscore structstudentstu1 stu2 struct结构体名 类型标识符成员名 类型标识符成员名 struct结构体名变量名列表 b 声明类型的同时定义变量 例structstudent intcode charname 20 floatscore stu1 stu2 struct结构体名 类型标识符成员名 类型标识符成员名 变量名列表 c 使用无名结构体类型直接定义 例struct intcode charname 20 floatscore stu1 stu2 struct 类型标识符成员名 类型标识符成员名 变量名列表 各种方法的适用情况 结构体类型只需使用一次 可以使用c方法 类型和变量的定义无法放置在一起的情况 必须使用a方法 如果变量的定义和类型的声明能够放置在一起 a b方法都合适 结构体变量的初始化 例structstudent intcode charname 20 floatscore structstudentstu1 2 WangWu 99 struct结构体名 类型标识符成员名 类型标识符成员名 struct结构体名结构体变量 初始数据列表 注意事项 类型和变量是不同的概念 不要混同 变量是一个具体的数据对象 可以参与运算 而类型不是 成员的类型也可以是一个结构体类型 例structdate intmonth intday intyear structstudent intcode charname 20 structdatebirthday stu 4结构体变量及其成员的引用 结构体变量的引用结构体变量成员的直接引用结构体变量成员的逐级引用 1 结构体变量的引用 可以将一个结构体变量作为一个整体赋值给另一个同类型的结构体变量 structstudents1 1 wangli 90 s2 s2 s1 不能将一个结构体变量作为一个整体进行输入和输出 只能对结构体变量中的各个成员分别进行输入和输出 2 结构体变量成员的引用 成员 分量 运算符 引用方式 结构体变量名 成员名 例structstudent intcode charname 20 floatscore s1 s2 s1 code 10 s2 score 85 5 s1 score s2 score 10 printf code d score d s1 code s1 score 3 结构体变量成员的逐级引用 结构体嵌套时需逐级引用 例structdate intmonth intday intyear structstudent intcode structdatebirthday stu stu birthday month 12 8 2结构体数组 结构体数组的定义结构体数组的初始化结构体数组元素成员的引用 1 结构体数组的定义 类型说明符数组名 常量表达式 inta 100 structstudentstus 20 2 结构体数组的初始化 首先考虑数组的初始化 然后考虑数组中每一个元素的初始化 也就是对每一个元素进行结构体的初始化 structstudent charnumber 13 charname 20 floatClanguage structstudents 3 01 WangXiao2 78 02 Zhang3 99 03 Li4 91 3 结构体数组元素成员的引用 先数组元素再结构体成员假如有定义structstudentstus 20 那么stus 0 code就是引用stus数组中第1个元素中的code成员 补充 结构体基本应用举例 需求描述数据结构描述程序输入部分程序处理部分程序输出部分程序的整体组合 1 需求描述 要求 请求用户输入学生的基本情况 其中包括每位学生的学号 姓名和C语言课程的成绩 将每位同学的成绩添加5分 然后按照以下格式输出学生的成绩列表 格式描述如下 学号姓名成绩1张三992王五60 2 数据结构描述 defineNUM20structstudent intcode charname 20 intscore structstudentstus NUM 3 程序输入部分 inti 0 printf Pleaseinputcode name scoreofstudent d n i 1 scanf d for i 0 i NUM i 4 程序处理部分 stus i score stus i score 5 for i 0 i NUM i 5 程序输出部分 printf n 15s 20s 5s n 学号 姓名 C语言成绩 printf 15d stus i code printf 20s stus i name printf 5d stus i score printf n for i 0 i NUM i 代表左对齐 15代表显示数据用的域宽 6 程序的整体组合 includevoidmain 数据结构描述部分 程序输入部分 程序处理部分 程序输出部分 StuStructInput c 8 3结构体与指针 结构体指针指向结构体数组的指针 1 结构体指针 定义 struct结构体名 结构体指针名 如何通过指针访问结构体成员的值 方法一 使用指针运算符 引用结构体成员形式 例intn int p n 10 structstudentstu1 structstudent p p num 101 不能省略 如何通过指针访问结构体成员的值 方法二 使用指向运算符 引用结构体成员 structstudent longintnum charname 20 charsex floatscore stu 1 p p 访问p指向的结构体变量的sex成员 2 指向结构体数组的指针 structstudent intnum charname 20 charsex intage stu 3 10101 LiLin M 18 10102 ZhangFun M 19 10104 WangMin F 20 voidmain structstudent p for p stu pnum p name p sex p age 8 4结构体与函数 用结构体变量作参数用指向结构体变量的指针作参数 1 用结构体变量作函数参数 用结构体变量作为函数参数 可以从调用函数向被调用函数完整地传递结构体变量中的所有成员 StruVarPara c 1 用结构体变量作函数参数 for i 0 i NUM i ListStudents stus i 实参是结构体变量的名字 voidListStudents structstudentstu printf 15d stu code printf 20s stu name printf 5d stu score printf n StruVarPara c 关键问题 结构体数据对象跟数组对象作为参数传递时有何不同 2 用指向结构体变量的指针作函数参数 被调用函数获取调用函数数据对象的地址 从而可以通过指针访问调用函数中的结构体对象 StruPtVarPara c 2 用指向结构体变量的指针作函数参数 StruPtVarPara c for i 0 i NUM i ListStudents 实参是结构体变量的地址 voidListStudents structstudent pStu printf 15d pStu code printf 20s pStu name printf 5d pStu score printf n 关键问题 传递地址相比较于传递整个数据对象有何优点 开销小 速度快 类型定义的格式如下 例2 typedefstructstudentSTUDENT STUDENTz3 8 7类型定义 typedef原类型名新类型名 例1 typedefintCOUNTER COUNTERi 使用类型定义可以提高程序的可读性 使用类型定义还可以简化变量的定义 structstudent intcode charname 20 intscore structstudentzhangsan typedefstructstudent intcode charname 20 intscore STUDENT STUDENTzhangsan structstudent typedefstructstudentSTUDENT STUDENTzhangsan 小结 如何声明一个新的结构体类型 定义结构体变量有哪些方法 分别适用什么情况 如何初始化结构体变量 如何引用结构体变量中的成员变量 如何定义和使用结构体数组 小结 续 如何定义结构体类型指针 如何通过结构体指针访问结构体成员 结构体实参采用什么方式向形参传递数据 课堂作业 请求用户输入学生的基本情况 其中包括每位学生的学号 姓名和两门课的成绩 然后用下面的格式输出学生的成绩列表 格式描述如下 学号姓名C语言数学平均成绩1张三607065 要求 编写3个函数 main函数 input函数 output函数 不能在main函数中处理用户的输入和输出 input函数用来输入一个学生的信息 output函数用来输出一个学生的信息 上机实验八 上机指导 实验八结构体等构造数据类型实验内容 课堂作业 实验步骤 1 先自学并完成上机指导实验8结构体P137 139内容 掌握结构体相关的调试技巧 2 完成并提交课堂作业的程序 程序源文件的名称为 班级 学号后两位 姓名 实验八 cpp- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 教程 结构 构造 数据类型
装配图网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文