C语言程序设计教程(第8章结构体等构造数据类型).ppt

上传人:sh****n 文档编号:7456673 上传时间:2020-03-21 格式:PPT 页数:56 大小:364.50KB
返回 下载 相关 举报
C语言程序设计教程(第8章结构体等构造数据类型).ppt_第1页
第1页 / 共56页
C语言程序设计教程(第8章结构体等构造数据类型).ppt_第2页
第2页 / 共56页
C语言程序设计教程(第8章结构体等构造数据类型).ppt_第3页
第3页 / 共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
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!