C程序设计与实践第5章(课件).ppt

上传人:max****ui 文档编号:6331426 上传时间:2020-02-23 格式:PPT 页数:34 大小:1.34MB
返回 下载 相关 举报
C程序设计与实践第5章(课件).ppt_第1页
第1页 / 共34页
C程序设计与实践第5章(课件).ppt_第2页
第2页 / 共34页
C程序设计与实践第5章(课件).ppt_第3页
第3页 / 共34页
点击查看更多>>
资源描述
程序设计与实践 目录第5章结构体5 1概述5 2结构体应用实例5 3结构体类型的定义5 4结构体变量和结构体数组的定义5 5结构体变量的使用方法5 6结构体应用5 7本章小结 第5章结构体5 1概述数组只能保存一批类型相同的数据 但在很多场合下 会有一组类型不同的信息 例如 关于学生的一组信息 包括学生姓名 字符串 学号 字符串 课程成绩 实数 等 无法用数组来表示 这里可以使用C语言提供的另外一种构造数据类型来实现 就是结构体类型 也称之为结构数据类型 5 2结构体应用实例例5 1图书销售清单打印 其中图书信息包括 书名 价格 册数等 includevoidmain structbooktype 说明结构类型structbooktype 包含三个成员charname 100 书名 字符串型floatprice 价格 实型intnumber 册数 整型 分别定义结构体变量book1 book2 book3 并赋初值structbooktypebook1 LearnCProgramming 40 4 20 structbooktypebook2 cprogramminglanguage 43 1 15 structbooktypebook3 HistoryofCProgrammingLanguage 37 8 28 定义中间变量用于计算部分金额和总金额floatpart1 part2 part3 total printf 书名单价数量金额 n n part1 book1 price book1 number 结构变量字段值的应用 计算第一类书book1的金额 printf 35s 6 2f 4d 7 2f n book1 name book1 price book1 number part1 part2 book2 price book2 number 计算第一类书book2的金额printf 35s 6 2f 4d 7 2f n book2 name book2 price book2 number part2 part3 book3 price book3 number 计算第一类书book3的金额printf 35s 6 2f 4d 7 2f n book3 name book3 price book3 number part3 total part1 part2 part3 计算三类书的总金额printf ntotal 53 2f n total 程序输出结果 图5 1例5 1程序运行结果程序中定义了图书的信息 包括 字符数组类型的书名name 实数类型的价格price 整数类型的册数number等三个字段 涉及三种数据类型 在这个程序中 我们看到了结构类型booktype的定义 structbooktype 部分 结构类型booktype的结构体变量book1 book2 book3的定义并赋初值 如 structbooktypebook1 LearnCProgramming 40 4 20 结构体变量字段的引用如 part1 book1 price book1 number 本程序中共有三类书的信息 制表输出每一类书的书名 单价 数量 金额 最后输出所有书的总价格 5 3结构体类型的定义结构体类型是一种新的数据类型 与基本类型不同的是 结构体类型本身需要定义 而基本类型是C语言已经定义过的 不需要程序设计人员来定义 结构体类型的定义包含如下信息 结构体类型名字 可以没有 结构体全部成员的名字及其类型 结构体的成员有时也称之为字段 它们的类型可以相同也可以不同 结构体类型定义以后 就可以使用结构体类型名字来定义该结构体类型的变量了 结构体类型定义的一般形式 struct结构体类型名 成员列表 例如结构体 图书 类型的定义如下 structbooktype charname 100 书名 字符数组类型floatprice 单价 实数类型intnumber 数量 整数类型 结构体成员的类型可以是简单类型 可以是数组类型 还可以是其他的结构体类型 也就是说 结构体类型的定义可以嵌套 例如 structdate intyear month day structbooktype charname 100 书名 字符数组类型floatprice 单价 实数类型intnumber 数量 整数类型structdatedelivery 交付时间 在结构体中 各成员都占有自己的内存空间 一个结构体变量的长度等于所有成员长度之和 例5 2检测结构体类型占用的内存空间大小 解题思路 直接使用sizeof运算符 对于结构体类型structbooktype求值 includevoidmain structbooktype charname 100 floatprice intnumber printf d sizeof structbooktype 输出结果是108 说明 某些编译程序 如 VC 6 0 为结构体类型分配空间时 可能会比其所有成员所占空间之和略长 例如 如果把 charname 100 改为 charname 97 charname 98 charname 99 程序结果都是108 占用空间值为4的倍数 并大于或等于各字段字节数之和 5 4结构体变量和结构体数组的定义结构体类型变量可以是普通变量或者是数组元素 结构体类型的数组元素是指其元素的数据类型是结构体类型的数组 简称为结构体数组 结构体变量 结构体数组定义有三种形式 struct结构体类型名变量 数组列表 struct结构体类型名 成员列表 变量 数组列表 struct 成员列表 变量 数组列表 上述三种形式中 我们推荐使用第一种形式 它的特点是类型定义和变量定义分离 也便于对变量赋初值 结构清晰 下面分别介绍三种形式的写法和实例 1 先定义结构体类型 再定义结构体变量或结构体数组 必要时还可以进行初始化例5 3对于例5 1程序的改进 注意结构体类型定义 结构体数组定义 结构体数组初始化 输出格式控制等用法 includevoidmain structbooktype 说明结构体类型charname 100 floatprice intnumber structbooktypebooks 3 定义结构体类型数组 并赋初值 LearnCProgramming 40 4 20 cprogramminglanguage 43 1 15 HistoryofCProgrammingLanguage 37 8 28 inti floatpart total 0 printf 书名单价数量金额 n n for i 0 i 3 i part books i price books i number 结构体变量字段值的应用printf 35s 6 2f 4d 7 2f n books i name books i price books i number part total part printf ntotal 53 2f n total 2 在定义结构体类型的同时定义结构体变量或结构体数组并初始化例如 structbooktype charname 100 书名 字符数组类型floatprice 单价 实数类型intnumber 数量 整数类型structdatedelivery 交付时间 abook books 1000 3 直接定义结构体变量或结构体数组并初始化例如 struct charname 100 书名 字符数组类型 floatprice 单价 实数类型intnumber 数量 整数类型structdatedelivery 交付时间 abook books 1000 5 5结构体变量的使用方法一 结构体变量的初始化1 结构体变量的初始化例如 structbooktypebook1 LearnCProgramming 40 4 20 各字段依次获得初值 按字段类型对应的常量来书写 各常量之间用 分隔 2 结构体数组的初始化structbooktypebooks 3 LearnCProgramming 40 4 20 cprogramminglanguage 43 1 15 HistoryofCProgrammingLanguage 37 8 28 按层次来写 先来看外层 数组共有三个元素 对应有三组 每组 对应一个数组元素 是一个结构体类型 根据结构体类型 structbooktype 的定义 结构体有三个字段 所以里层的每组 中 包含三个常量 二 结构体变量成员的表示方法结构体变量成员的表示方法有两种 结构体变量名 成员名结构体数组名 下标 成员名例 part1 book1 price book1 number printf 35s 6 2f 4d 7 2f n book3 name book3 price book3 number part3 part books i price books i number printf 35s 6 2f 4d 7 2f n books i name books i price books i number part 嵌套结构体类型对于结构体成员的引用实例 structdate intyear month day structbooktype charname 100 书名 字符数组类型floatprice 单价 实数类型intnumber 数量 整数类型structdatedelivery 交付时间 abook abook delivery year 2010 abook delivery month 4 abook delivery day 18 三 结构体变量的赋值对于结构体变量的赋值有两种方法 一种是对于成员变量分别引用 另一种是对于结构体变量整体赋值 1 对于结构体成员变量分别引用如果结构体成员变量是简单类型 可以直接进行各种操作 例如 数据输入 输出 赋值 计算等 如果结构体成员变量是构造类型 如数组 结构体等 就需要根据数组 结构体等类型的具体要求来操作了 2 对于结构变量整体赋值有些C编译环境 例如VC 6 0 中允许两个结构体类型变量直接赋值 相当于它们对应的各成员变量的分别赋值 这种方法不推荐使用 5 6结构体应用例5 4有一个班的学生 学生信息包括 姓名 性别和3门课程成绩 编写程序完成下列任务 1 5名学生信息的录入 2 计算并输出某门课程的最高分 最低分 平均分 3 分别计算并输出男女同学中总分最高的同学的姓名和总成绩 includestructstudent charname 20 chars M表示男 F表示女floatcourse1 floatcourse2 floatcourse3 main structstudentstu 5 floatmaxpoint minpoint avepoint sumpoint 5 maxsumpoint1 maxsum point2 inti mstu 1 录入学生数据 for i 0 i 5 i printf 请输入第 d个学生的信息 i 1 scanf s c f f f stu i name stu xi s stu i course1 stu i course2 stu i course3 计算course1的最高分 maxpoint stu 0 course1 for i 1 imaxpoint maxpoint stu i course1 printf course1的最高分是 f maxpoint 计算course1的最低分 minpoint stu 0 course1 for i 1 i 5 i if stu i course1 minpoint minpoint stu i course1 printf course1的最低分是 f minpoint 计算course1的平均分 avepoint stu 0 course1 for i 1 i 5 i avepoint avepoint stu i course1 printf course1的平均分是 f avepoint 5 for i 0 i 5 i sumpoint i stu i course1 stu i course2 stu i course3 计算男同学中总分最高的同学的姓名和总成绩 maxsumpoint1 0 for i 0 i 5 i if stu i s F continue if sumpoint i maxsumpoint1 mstu i if mstu 1 printf 名单中无男同学 elseprintf 男同学中总分最高的同学的姓名是 s总成绩是 f stu mstu name sumpoint mstu 计算女同学中总分最高的同学的姓名和总成绩的过程参照男同学的处理方法 5 7本章小结结构体与数组的明显不同是结构体的成员可以具有不同的数据类型 注意结构体类型的定义 结构体变量的定义 结构体变量的初始化 结构体变量成员的引用方法等 还要学会结构体数组的定义和使用方法 练习五1 试利用结构体类型描述年 月 日 输入一个日期 统计该日期是本年度第多少天 2 定义一个职员结构体类型 其中包括职员姓名 参加工作时间和薪水 使用定义的结构体类型 写一段程序 从键盘读入一个职员的信息 并通过显示器显示出来 推荐资料 更多图书信息请见星图书业 http www xtbook org 计算机各级在线考试试题见前程在线考试网
展开阅读全文
相关资源
相关搜索

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


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

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


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