8客观对象的描述-结构体程序设计(1)--精品课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《8客观对象的描述-结构体程序设计(1)--精品课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 客观 对象 描述 结构 程序设计 精品 课件
- 资源描述:
-
1、高级语言程序设计高级语言程序设计第第8章章 客观对象的描述客观对象的描述 结构体程序设计结构体程序设计本章要解决的问题本章要解决的问题1.学生成绩管理系统的实现学生成绩管理系统的实现(数组和链表)数组和链表)2.志愿者管理问题志愿者管理问题3.扑克牌洗牌和发牌模拟扑克牌洗牌和发牌模拟 学习目标学习目标理解客观对象的描述方法理解客观对象的描述方法结构体结构体掌握结构体类型变量的定义和使用方法掌握结构体类型变量的定义和使用方法学会结构体或指向结构体的指针作为函数学会结构体或指向结构体的指针作为函数参数的参数的了解了解自引用结构体及链表结构自引用结构体及链表结构了解了解共用体类型和枚举类型共用体类型
2、和枚举类型的定义和使用的定义和使用方法方法 1 学生成绩管理系统的实现学生成绩管理系统的实现问题描述:假设我们要为学校问题描述:假设我们要为学校教务部门教务部门开开发一个学生成绩管理系统,要求能用这个发一个学生成绩管理系统,要求能用这个系统系统录入学生成绩录入学生成绩、修改学生成绩、统计修改学生成绩、统计学生成绩、查询学生成绩学生成绩、查询学生成绩、输出学生成绩输出学生成绩(报表)。为了简单,现在只考虑某(报表)。为了简单,现在只考虑某一门一门课程课程的成绩的成绩,每个同学的成绩包括,每个同学的成绩包括平时、平时、期中、期末和平均成绩期中、期末和平均成绩。分析分析在第在第5章已经把这个问章已经
3、把这个问题题模块化模块化了了它的主流程是它的主流程是 当时还没有能力实现当时还没有能力实现,每个函,每个函数模块用了数模块用了一个树桩一个树桩stub或存或存根根先占在那里先占在那里 void input(void) printf(“okn”); 现在到了可以实现的时候了现在到了可以实现的时候了 假设现在要管理的某门课程的学生数是固定假设现在要管理的某门课程的学生数是固定的的60,首先要解决的是,首先要解决的是如何存放这如何存放这60个学个学生的生的某门某门课程的课程的成绩相关的信息成绩相关的信息?某门课程成绩相关的信息应该包括:某门课程成绩相关的信息应该包括:姓名、学号、平时成绩、期中成绩、
4、期末成绩、总评成绩用前面学过的方法:数组用前面学过的方法:数组用多个一维数组用多个一维数组char *num60;char *name60;int dailyGrade60;int midGrade60;int endGrade60;float average60;这时各个模块函数的原型可定义为这时各个模块函数的原型可定义为 void input (char *num, char *name, int dg, int mg, int eg, int ag); 其它几个略其它几个略 void print (char *num, char *name, int dg, int mg, int eg
5、, int ag); 请大家自己实现这个版本请大家自己实现这个版本这种方法有什么特点?这种方法有什么特点?数组的内存映像数组的内存映像 1390788978839272950001000200030004aaaabbbbccccdddd001004F30C330D80907889780533数据在内存中的分布数据在内存中的分布比较分比较分散散希望的内存分配图希望的内存分配图 0001aaa男1999908372820002bbb男1999789288780003ccc女1999897298660004ddd女19997895879015每一组属性每一组属性(也叫一个记录,二维表格的一行)(也叫
6、一个记录,二维表格的一行)放在一起放在一起看成一个整体看成一个整体,同组成员彼此相邻同组成员彼此相邻不同组的属性也彼此相邻不同组的属性也彼此相邻 这样的这样的一组属性数据一组属性数据所表达的所表达的客观对客观对象象怎么定义呢?怎么定义呢?能不能像整数用能不能像整数用int类型,字符用类型,字符用char类型那样定义问题中类型那样定义问题中的对象为一的对象为一种类型呢?种类型呢?如学生类型如学生类型如果能,就可以如果能,就可以用这个用这个自定义的学生自定义的学生类型类型去创建问题中涉及的学生对象啦。去创建问题中涉及的学生对象啦。学生对象的描述学生对象的描述你能不能给你能不能给学生下个定义学生下个
7、定义?不同的人可能关注学生不同的不同的人可能关注学生不同的一组特征一组特征/属性属性如:学生处关心的是学生注册相关的属性如:学生处关心的是学生注册相关的属性 姓名,学号,年龄,性姓名,学号,年龄,性 别,出生日期,别,出生日期,籍贯,家庭住址,籍贯,家庭住址,.不同的学生只是属性值不同而已不同的学生只是属性值不同而已教务部门把学生对象描述成教务部门把学生对象描述成学号,姓名,平时成绩,期中成学号,姓名,平时成绩,期中成绩,期末成绩,总评成绩绩,期末成绩,总评成绩确定了对象的属性,对象就基本确定了对象的属性,对象就基本确定了确定了C语言允许用语言允许用结构体类型结构体类型表达客观表达客观世界的对
8、象世界的对象 struct 结构体类型名结构体类型名 成员成员列表;列表; ;其中其中struct 是关键字是关键字,成员列表,成员列表给出成员的类型和名字,注意这给出成员的类型和名字,注意这个定义的个定义的结尾必须跟一个分号结尾必须跟一个分号;表示结构体类型定义结束。表示结构体类型定义结束。例例1 学生结构体类型的定义学生结构体类型的定义 (成绩信息相关的)(成绩信息相关的)struct student char *num; char *name; int dailyGrade; int midGrade; int endGrade; float average; 这样我们就定义了一种这样我
9、们就定义了一种新的类型新的类型它叫它叫struct student,它与我它与我们熟悉的们熟悉的int,float等具有同等等具有同等地位。地位。 例例2 平面上的点结构体类型定义平面上的点结构体类型定义 struct point int x; int y; ;任何一类客观世界的对象均可抽任何一类客观世界的对象均可抽象成一个结构体类型象成一个结构体类型结构体结构体变量变量的定义和初始化的定义和初始化有了结构体有了结构体类型类型之后就可以用它定义具之后就可以用它定义具体的客观体的客观对象(结构体类型的变量)对象(结构体类型的变量)struct student li, wang; struct s
10、tudent zhang;注意现在的类型名是注意现在的类型名是 struct student 对象对象li, wang, zhang的属性是的属性是什么?什么?定义之后分别给各个成员赋值,定义之后分别给各个成员赋值,要用要用成员运算符成员运算符 . 如如li.num=00002;li.name=lihong;li.dailyGrade=85;li.midGrade=95;li.endGrade=88;li.average=89.2;在定义时直接初始化在定义时直接初始化struct student zhang = 0001, zhangqiang , 80, 70, 100, 83.3;结构体类
11、型的变量支持结构体类型的变量支持整体赋值整体赋值wang = li; 有时在有时在定义结构类型定义结构类型的时候定义的时候定义结构结构体变量体变量struct student char *num; char *name; int dailyGrade; int midGrade; int endGrade; float average;zhang, li, wang; 也可以省略结构体类型名也可以省略结构体类型名struct char *num; char *name; int dailyGrade; int midGrade; int endGrade; float average;zhan
12、g, li, wang;这样意味着在其它地方不需要定义这种类型这样意味着在其它地方不需要定义这种类型的其它结构体变量。的其它结构体变量。你有没有注意到定义结构体类型的变量挺你有没有注意到定义结构体类型的变量挺麻烦的,其类型名是两个单词,如学生结麻烦的,其类型名是两个单词,如学生结构体类型构体类型 struct student,C/C+的标准类型的标准类型 int,float,double,char等都是一个单词等都是一个单词能不能也把结构体类型名定义成一个单词能不能也把结构体类型名定义成一个单词给结构体类型起给结构体类型起别名别名:typedef typedef struct char *nu
13、m; char *name; int dailyGrade; int midGrade; int endGrade; float average; STUD;这样就可以用这样就可以用STUD直接定义结直接定义结构体变量构体变量STUD zhang, wang; 实际上实际上typedef 还可以定义一个数组的还可以定义一个数组的别名,一个指针的别名等,如别名,一个指针的别名等,如typedef int iarray1010; l定义了有定义了有10个元素的整型数组的别名个元素的整型数组的别名为为iarry10。liarray10 a,b;typedef int* iptr; l它定义了整型指针
14、的别名它定义了整型指针的别名 liptr x,y;指向结构体的指针指向结构体的指针STUD zhang,wang;STUD *sPtr=&zhang;同样可以像从前那样使用间接运同样可以像从前那样使用间接运算符访问。算符访问。 (*sPtr).num=”00005” ; (*sPtr).dailyGrade = 80;等等,等等,C/C+又提供一种新的运算符又提供一种新的运算符称为称为指向运算符指向运算符,访问结构体访问结构体对象的成员,对象的成员, sPtrnum=”00005”; sPtr dailyGrade = 80;思考题思考题 STUD结构体类型的结构体类型的变量变量在内存中占多在
15、内存中占多少字节?少字节?如果定义如果定义typedef structlchar a;lint b;lchar c;TEST;呢?呢?结构体变量内存映像的大小未必结构体变量内存映像的大小未必一定是它的成员变量大小之和一定是它的成员变量大小之和 结构体类型的定义可以嵌套结构体类型的定义可以嵌套从学生管理的角度看学生对象,有一个从学生管理的角度看学生对象,有一个属性是生日,生日也可以定义成一个结属性是生日,生日也可以定义成一个结构类型如构类型如struct date int year; int month; int day;这样学生结构类型中就可以包含一个这样学生结构类型中就可以包含一个生生日成员
展开阅读全文