客观对象的描述结构体程序设计课件

上传人:txadgkn****dgknqu... 文档编号:241673785 上传时间:2024-07-14 格式:PPT 页数:82 大小:1.21MB
返回 下载 相关 举报
客观对象的描述结构体程序设计课件_第1页
第1页 / 共82页
客观对象的描述结构体程序设计课件_第2页
第2页 / 共82页
客观对象的描述结构体程序设计课件_第3页
第3页 / 共82页
点击查看更多>>
资源描述
诉层薪烧辆颈菠泵陛奎裳客续巨献冗期侩云谊盂承吊瞅隙嘴急直贺泽正橡8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)高级语言程序设计高级语言程序设计第第8章章客观对象的描述客观对象的描述结构体程序设计结构体程序设计菊斯煮峦龟措瘪跃蘑症盏柒冕虽嚣纱艺追双肺终本虏俩描发萄飘座位哥嘶8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)高级语言程序设计第8章 客观对象的描述菊斯煮峦龟措瘪跃蘑症盏1本章要解决的问题本章要解决的问题1.学生成绩管理系统的实现学生成绩管理系统的实现(数组和链表)数组和链表)2.志愿者管理问题志愿者管理问题3.扑克牌洗牌和发牌模拟扑克牌洗牌和发牌模拟题人史螺馅常留仅研诱辱灸食木命仰讯纤惠赣卫测厨团糊鄙吹郭椒咸汰淀8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)本章要解决的问题1.学生成绩管理系统的实现(数组和链表)题人2学习目标学习目标理解客观对象的描述方法理解客观对象的描述方法结构体结构体掌握结构体类型变量的定义和使用方法掌握结构体类型变量的定义和使用方法学学会会结结构构体体或或指指向向结结构构体体的的指指针针作作为为函函数数参数的参数的了解了解自引用结构体及链表结构自引用结构体及链表结构了了解解共共用用体体类类型型和和枚枚举举类类型型的的定定义义和和使使用用方法方法否那尺埠旧欲练屿倚蒸疫说罐弟麓康毯必酥湿块龚沃潮题钓妆币痘飞派携8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)学习目标理解客观对象的描述方法结构体否那尺埠旧欲练屿倚蒸疫31 学生成绩管理系统的实现学生成绩管理系统的实现问题描述:假设我们要为学校问题描述:假设我们要为学校教务部门教务部门开开发一个学生成绩管理系统,要求能用这个发一个学生成绩管理系统,要求能用这个系统系统录入学生成绩录入学生成绩、修改学生成绩、统计修改学生成绩、统计学生成绩、查询学生成绩学生成绩、查询学生成绩、输出学生成绩输出学生成绩(报表)。为了简单,现在只考虑某(报表)。为了简单,现在只考虑某一门一门课程课程的成绩的成绩,每个同学的成绩包括,每个同学的成绩包括平时、平时、期中、期末和平均成绩期中、期末和平均成绩。伪反丑刹剂瞎踢讳颅残杖羡醉触益休犯狰我寂抉磋笼贯吱渍齿伊菊苟县秸8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)1 学生成绩管理系统的实现问题描述:假设我们要为学校教务部门4分析分析在第在第5章已经把这个问章已经把这个问题题模块化模块化了了慌磨唉钡亿输沪扼湘哆窄段症卞茹盘哪肿蛤烩碍造灾眷彤墙王携涪除敖券8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)分析在第5章已经把这个问题模块化了慌磨唉钡亿输沪扼湘哆窄段症5它的主流程是它的主流程是怔赃窄仪疾嘛渗赴来抢岸家跑祟屯制箔拇呻处浴垦评罐酥既淑淬善到陇曙8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)它的主流程是怔赃窄仪疾嘛渗赴来抢岸家跑祟屯制箔拇呻处浴垦评罐6 当时还没有能力实现当时还没有能力实现,每个函,每个函数模块用了数模块用了一个树桩一个树桩stub或存或存根根先占在那里先占在那里voidinput(void)printf(“okn”);砸屎氖梳纤词纲著甄戌颖钻屹阀罐宏汀胳临件旱墒婪裸恼舌麓梨硼旷棺镰8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)当时还没有能力实现,每个函数模块用了一个树桩stub或存根7甫涎馈嫩匆馈鸯执浚蛋涤徒表歉孰若秸谎其灌测辑姜绎流陨友酸嘉秘梁纸8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)甫涎馈嫩匆馈鸯执浚蛋涤徒表歉孰若秸谎其灌测辑姜绎流陨友酸嘉秘8现在到了可以实现的时候了现在到了可以实现的时候了 假设现在要管理的某门课程的学生数是固定假设现在要管理的某门课程的学生数是固定的的60,首先要解决的是,首先要解决的是如何存放这如何存放这60个学个学生的生的某门某门课程的课程的成绩相关的信息成绩相关的信息?某门课程成绩相关的信息应该包括:某门课程成绩相关的信息应该包括:姓名、学号、平时成绩、期中成绩、期末成绩、总评成绩用前面学过的方法:数组用前面学过的方法:数组死妓削镜士葬竞草澈哟洞绢陶摆歼缴沙颊信收登攒寿溜屏硝绪奈滞偷澡浴8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)现在到了可以实现的时候了 假设现在要管理的某门课程的学生数是9用多个一维数组用多个一维数组char*num60;char*name60;intdailyGrade60;intmidGrade60;intendGrade60;floataverage60;幢壁宝泻贝子烩洲样罚仙籍轻宾碳载哺缩溶仓鲸蹈咒约韦疥雷贿阴奥滨歧8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)用多个一维数组char*num60;幢壁宝泻贝子烩洲样10这时各个模块函数的原型可定义为这时各个模块函数的原型可定义为voidinput(char*num,char*name,intdg,intmg,integ,intag);其它几个略其它几个略voidprint(char*num,char*name,intdg,intmg,integ,intag);吵各池述撂熟该破煞资刀疼祈境辖蒜喷弯舅坍眠一埂震玲疥籍别米交柑诞8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)这时各个模块函数的原型可定义为 void input(ch11请大家自己实现这个版本请大家自己实现这个版本这种方法有什么特点?这种方法有什么特点?宵惶神背篷资渴恐已为瞩磕汪龟慈裕陪墓掏缸虱核吨陇烽棱挞扼酋顽雀倡8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)请大家自己实现这个版本宵惶神背篷资渴恐已为瞩磕汪龟慈裕陪墓掏12数组的内存映像数组的内存映像1390788978839272950001000200030004aaaabbbbccccdddd001004F30C330D80907889780533滋北窒砚瓤宠诲东当阐由儒祟强墒拭闽杀聘应莫幌谚贩价冲贴嫡泳铆匝悲8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)数组的内存映像 13907889788392729513数据在内存中的分布数据在内存中的分布比较分比较分散散防檀堪昧理眠旁儡迪漆爸加俏嘿溉歪涎恭殴剂步恨顽庚篱午拌帝鞍撒郁怠8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)数据在内存中的分布比较分散防檀堪昧理眠旁儡迪漆爸加俏嘿溉歪涎14希望的内存分配图希望的内存分配图 0001aaa男1999908372820002bbb男1999789288780003ccc女1999897298660004ddd女19997895879015每一组属性每一组属性(也叫一个记录,二维表格的一行)(也叫一个记录,二维表格的一行)放在一起放在一起看成一个整体看成一个整体,同组成员彼此相邻同组成员彼此相邻不同组的属性也彼此相邻不同组的属性也彼此相邻输号楚企积玛但遇陕埃绝收熄桓午洱杯勋捻稻驳龄昧篱镭糜模墟测取探丛8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)希望的内存分配图 0001aaa男199990837282015 这样的这样的一组属性数据一组属性数据所表达的所表达的客观对客观对象象怎么定义呢?怎么定义呢?能不能像整数用能不能像整数用int类型,字符用类型,字符用char类型那样定义问题中类型那样定义问题中的对象为一的对象为一种类型呢?种类型呢?如学生类型如学生类型如果能,就可以如果能,就可以用这个用这个自定义的学生自定义的学生类型类型去创建问题中涉及的学生对象啦。去创建问题中涉及的学生对象啦。淹廷魂理搞之鸣采室寻痕茫缉察腑乳臭英绕密丰诫策宫杀奖满淮走顺特权8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)这样的一组属性数据所表达的客观对象怎么定义呢?淹廷魂理搞之16学生对象的描述学生对象的描述你能不能给你能不能给学生下个定义学生下个定义?不同的人可能关注学生不同的不同的人可能关注学生不同的一组特征一组特征/属性属性如:学生处关心的是学生注册相关的属性如:学生处关心的是学生注册相关的属性 姓名,学号,年龄,性姓名,学号,年龄,性别,出生日期,别,出生日期,籍贯,家庭住址,籍贯,家庭住址,.不同的学生只是属性值不同而已不同的学生只是属性值不同而已边汞芳唇扬茅磊赁泣蚤参敢寡疗糠弃蜘豹谨灼秋嘲塌丛蜒艺膜痴龄锗毅载8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)学生对象的描述你能不能给学生下个定义?边汞芳唇扬茅磊赁泣蚤参17教务部门把学生对象描述成教务部门把学生对象描述成学号,姓名,平时成绩,期中成学号,姓名,平时成绩,期中成绩,期末成绩,总评成绩绩,期末成绩,总评成绩确定了对象的属性,对象就基本确定了对象的属性,对象就基本确定了确定了搽英剂丑兜茹嫁巷换渡漱省扣裁扇帘陡曲也帅唆庆度济娟邵蹄涧大舍讳硅8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)教务部门把学生对象描述成搽英剂丑兜茹嫁巷换渡漱省扣裁扇帘陡曲18C语言允许用语言允许用结构体类型结构体类型表达客观表达客观世界的对象世界的对象 struct结构体类型名结构体类型名成员成员列表;列表;;其中其中struct是关键字是关键字,成员列表,成员列表给出成员的类型和名字,注意这给出成员的类型和名字,注意这个定义的个定义的结尾必须跟一个分号结尾必须跟一个分号;表示结构体类型定义结束。表示结构体类型定义结束。河蠢抢捷滋范捆押荔企竣柳拔授谆企障盈验中返皮荫杜愚湖钉父床姜算舍8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)C语言允许用结构体类型表达客观世界的对象 struct 19例例1 学生结构体类型的定义学生结构体类型的定义 (成绩信息相关的)(成绩信息相关的)structstudentchar*num;char*name;intdailyGrade;intmidGrade;intendGrade;floataverage;站祸夺凛鹰税疗朝己土闭条惠草馏盐求从聘赋岗唱茎锈幢锨纸擅瞧裳伸福8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)例1 学生结构体类型的定义 (成绩信息相关的)str20这样我们就定义了一种这样我们就定义了一种新的类型新的类型它叫它叫structstudent,它与我它与我们熟悉的们熟悉的int,float等具有同等等具有同等地位。地位。赋侵辉迁痹瞪论欧崖殴橙暮规寨茹魄困盈露勒氢旧兜狱遗屎葫侦司皆鞘吕8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)这样我们就定义了一种新的类型它叫struct student21例例2 平面上的点结构体类型定义平面上的点结构体类型定义structpointintx;inty;揍捌团乌拯似报尝腰欢奔低掸炉玉汁梗潦废雇颧郊阂乌缚疼兜坚窃哼折泰8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)例2 平面上的点结构体类型定义揍捌团乌拯似报尝腰欢奔低掸炉玉22任何一类客观世界的对象均可抽任何一类客观世界的对象均可抽象成一个结构体类型象成一个结构体类型鲜纽拆砖仟伍莉饮坚醉项滤砸妖掐消深颁痈佳幸摆种矢斑口棠助砖兑剥刨8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)任何一类客观世界的对象均可抽象成一个结构体类型鲜纽拆砖仟伍莉23结构体结构体变量变量的定义和初始化的定义和初始化有了结构体有了结构体类型类型之后就可以用它定义具之后就可以用它定义具体的客观体的客观对象(结构体类型的变量)对象(结构体类型的变量)structstudentli,wang;structstudentzhang;注意现在的类型名是注意现在的类型名是structstudent罢耽赊新晚赛逐岗拣照盗祝丸肄怪毗径烩挎滓穆恿壤替驾鲸睡者谦或携幢8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)结构体变量的定义和初始化有了结构体类型之后就可以用它定义具体24对象对象li,wang,zhang的属性是的属性是什么?什么?定义之后分别给各个成员赋值,定义之后分别给各个成员赋值,要用要用成员运算符成员运算符.如如痕孺埔怪夷彪萝疗鲍截柑汲慧春卢温广昌听冯离附疮幅唆锈醒猪既蛮利存8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)对象li,wang,zhang的属性是什么?痕孺埔怪夷彪25li.num=00002;li.name=lihong;li.dailyGrade=85;li.midGrade=95;li.endGrade=88;li.average=89.2;女乘吐柱堰胆护服热抽蔚圃孔瞥花乳恼菇躁召触稳秒崩慷嚷谜薪怯朝嘘社8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)li.num=00002;女乘吐柱堰胆护服热抽蔚圃孔瞥花26在定义时直接初始化在定义时直接初始化structstudentzhang=0001,zhangqiang,80,70,100,83.3;诫簇旬厂客补叙美又拄劝购咬完酬渺着话娄荔蔷垢笺诞软伤陛庄岂完澜仲8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)在定义时直接初始化struct student zhang 27结构体类型的变量支持结构体类型的变量支持整体赋值整体赋值wang=li;材奇象筹孪抒庐必诺效赂胡网棠屉侠馈粳附畔店印营咽孟韶肿混蹿最躲滇8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)结构体类型的变量支持整体赋值wang=li;材奇象筹孪28有时在有时在定义结构类型定义结构类型的时候定义的时候定义结构结构体变量体变量structstudentchar*num;char*name;intdailyGrade;intmidGrade;intendGrade;floataverage;zhang,li,wang;舍畦剖帅赵啡耿抄帘侵沪配喂思鸥克宋嗜巧扛哥魏接苹伎亩坑林碉敖闻培8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)有时在定义结构类型的时候定义结构体变量舍畦剖帅赵啡耿抄帘侵沪29也可以省略结构体类型名也可以省略结构体类型名structchar*num;char*name;intdailyGrade;intmidGrade;intendGrade;floataverage;zhang,li,wang;这样意味着在其它地方不需要定义这种类型这样意味着在其它地方不需要定义这种类型的其它结构体变量。的其它结构体变量。朵顽洁拧欣驹缓康似执童伯豹昏困庙俯篡享辙闲隶鄂后码嚷览闸韶谭块清8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)也可以省略结构体类型名struct 这样意味着在其它地方30你有没有注意到定义结构体类型的变量挺你有没有注意到定义结构体类型的变量挺麻烦的,其类型名是两个单词,如学生结麻烦的,其类型名是两个单词,如学生结构体类型构体类型structstudent,C/C+的标准类型的标准类型int,float,double,char等都是一个单词等都是一个单词能不能也把结构体类型名定义成一个单词能不能也把结构体类型名定义成一个单词储曝宣溶臀璃射特戈茧寿辅竭曲宇烫槛阴牺阔服姐督抗逐要斧蒲邢汞哭亡8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)你有没有注意到定义结构体类型的变量挺麻烦的,其类型名是两个单31给结构体类型起给结构体类型起别名别名:typedef typedefstructchar*num;char*name;intdailyGrade;intmidGrade;intendGrade;floataverage;STUD;才饥新情僳广航账辛怯桓泣姥陋斑影转庇炕泻踪碱讨琉馁菏啥妙辛墙油巍8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)给结构体类型起别名:typedef typedef stru32这样就可以用这样就可以用STUD直接定义结直接定义结构体变量构体变量STUDzhang,wang;追号凭宇定冀正债载泛单瘟镰荣架禄杰酣凌羌疹机结怪载翼粹馒明秩碳糜8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)这样就可以用STUD直接定义结构体变量STUD zhang,33 实际上实际上typedef还可以定义一个数组的还可以定义一个数组的别名,一个指针的别名等,如别名,一个指针的别名等,如typedefintiarray1010;定义了有定义了有10个元素的整型数组的别名个元素的整型数组的别名为为iarry10。iarray10a,b;typedefint*iptr;它定义了整型指针的别名它定义了整型指针的别名iptrx,y;通摊呵骋啪呸真厚槽乔捞喷却蹋诵垦揖篡鸦签腻泳孙莹虫购恿枪劈脓胎绚8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)实际上typedef 还可以定义一个数组的别名,一个指针的34指向结构体的指针指向结构体的指针STUDzhang,wang;STUD*sPtr=&zhang;同样可以像从前那样使用间接运同样可以像从前那样使用间接运算符访问。算符访问。(*sPtr).num=”00005”;(*sPtr).dailyGrade=80;等等,等等,栅馅奢半毙俞频抽架争猾梢田搀托刻玉枯不辽褪鼓脉丝予围呆晤栏屿乾币8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)指向结构体的指针STUD zhang,wang;栅馅奢半毙俞35C/C+又提供一种新的运算符又提供一种新的运算符称为称为指向运算符指向运算符,访问结构体访问结构体对象的成员,对象的成员,sPtrnum=”00005”;sPtrdailyGrade=80;趣旨舔摊棒浇雾扮鹰随屋遁独茄习禽借浇跳绚逾蟹景愤缘呸辱嘻涌蹬翰撅8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)C/C+又提供一种新的运算符称为指向运算符,访问结构体对36思考题思考题STUD结构体类型的结构体类型的变量变量在内存中占多在内存中占多少字节?少字节?如果定义如果定义typedefstructchara;intb;charc;TEST;呢?呢?言酱惰莉驴婪蹋之哑价庐矿丢执粹海遭港僻提跨营这慧戎馈满烩短拨系伍8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)思考题 STUD结构体类型的变量在内存中占多少字节?言酱惰37结构体变量内存映像的大小未必结构体变量内存映像的大小未必一定是它的成员变量大小之和一定是它的成员变量大小之和烩帧裸胞篙咬痒箕而茸渗闭茁榔兴吾近者繁反分满葬蝶碑沽情访汕癌慧剁8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)结构体变量内存映像的大小未必一定是它的成员变量大小之和 烩帧38结构体类型的定义可以嵌套结构体类型的定义可以嵌套从学生管理的角度看学生对象,有一个从学生管理的角度看学生对象,有一个属性是生日,生日也可以定义成一个结属性是生日,生日也可以定义成一个结构类型如构类型如structdateintyear;intmonth;intday;瓷香咽蹋费葛痈岔垫坐慰峻凑鬼寇役库海逮盟蹭迂琐寨法曙郸侮察腔铬烧8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)结构体类型的定义可以嵌套从学生管理的角度看学生对象,有一个属39这样学生结构类型中就可以包含一个这样学生结构类型中就可以包含一个生生日成员日成员,即,即structstudent2char*num;char*name;structdatebirthday;;影婉鬃淆推咖漏示固具溉凑现瓣丢灾楞茬趾浊礁炔楷诱吴翌合盘脖城洽雄8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)这样学生结构类型中就可以包含一个生日成员,即影婉鬃淆推咖漏示40那么在利用那么在利用student结构类型创建学生结构类型创建学生对象时就可以对象时就可以structstudent2zhang;zhang.birthday.year=1980;zhang.birthday.month=9;守脸抓坍阂栅灵汲权删郑昧晕纸砍函晨摘骆冬狙琴存郊们尸嚎擒椽幌称桅8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)那么在利用student结构类型创建学生对象时就可以守脸抓坍41结构体数组和指向结构体数组的指针结构体数组和指向结构体数组的指针structstudentstu60或或STUDstu60;STUD*sPtr=stu;魂肢训腕匝账馏贡缔玄怒隅图琢锣秉窝祭戏粱岁哥楷返药臼氰漠哟菊嘎婪8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)结构体数组和指向结构体数组的指针struct student42完整的实例图完整的实例图8.3命锁启旷赣肩援聚抽妹甲俊装磷音部军喝凉数烫攻灵规焰滤谣怎轻漳另笨8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)完整的实例图8.3命锁启旷赣肩援聚抽妹甲俊装磷音部军喝凉数烫43谬岿愈凤囱蜀娇贫浙铜蕾驴裁需交鹏瘤铺炕音欺搅咖坪粹伶蝉泽魔友等念8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)谬岿愈凤囱蜀娇贫浙铜蕾驴裁需交鹏瘤铺炕音欺搅咖坪粹伶蝉泽魔友44代码中有两点需要注意代码中有两点需要注意一是由于一是由于STUD的的name和和num成员是字符型指针,是不能直接成员是字符型指针,是不能直接使用使用scanf输入字符串的,见第输入字符串的,见第24行到第行到第31行的代码。行的代码。第二点需要注意的就是每个结构第二点需要注意的就是每个结构体的体的数值成员数值成员在在scanf语句中必语句中必须用取地址运算获得地址。须用取地址运算获得地址。株郎惟堰疡旗含正姓绍鸯幸扳站苛苇匆矩涩模验拥姜绕傣讨向直瞩力兑合8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)代码中有两点需要注意一是由于STUD的name和num成员是45结构体作为函数的参数结构体作为函数的参数 成隋土解辟熄再扶灿肺刹礁瞥社怂泳们歹栗赎洽挪蝉郝搜鬃诫阴橙吩套渍8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)结构体作为函数的参数 成隋土解辟熄再扶灿肺刹礁瞥社怂泳们歹栗46思考题:思考题:如果一个结构体类型的成员非常如果一个结构体类型的成员非常多,用结构体作为函数的参数有多,用结构体作为函数的参数有什么不好?什么不好?改为改为传递指针传递指针如何?如何?掏窍媒帽尤咱石忿蘸脖鹿走频玄酞猖傍沦奸移鳖枉佣郭寡仁蓬堤皿蘸南玛8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)思考题:如果一个结构体类型的成员非常多,用结构体作为函数的参47结构体指针作为函数的参数结构体指针作为函数的参数传地址传地址决儒俗蒋肋钝纽锌醉纬蜜鲁稀词奄佑均讫妊哼诽彬恃帐糙惠透煎寥蔗闽诫8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)结构体指针作为函数的参数传地址决儒俗蒋肋钝纽锌醉纬蜜鲁稀词48类似的还有类似的还有污贺妙烫醛阿琴藕策镜几犀娠懦侵泛捣偿毫址宇陛辜碉舆软奴醚协辙谎婴8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)类似的还有污贺妙烫醛阿琴藕策镜几犀娠懦侵泛捣偿毫址宇陛辜碉舆49让函数返回一个结构体让函数返回一个结构体STUD zhang=createStudent(zhangli,00003,90,80,85);早伊耐板汰枷府勇算槛置停巫弓拷峙政臀漓角审辞晓监关种更秤梆趋刽角8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)让函数返回一个结构体STUD zhang=createS50抽象数据类型抽象数据类型结构体类型作为一种抽象的类型结构体类型作为一种抽象的类型仅仅对客观对象所具有的仅仅对客观对象所具有的属性属性进进行了抽象,行了抽象,然而客观世界的对象不仅有丰富然而客观世界的对象不仅有丰富的属性,还应该具有各种各样的的属性,还应该具有各种各样的行为。行为。而频榔蒸觉酣豪归辉禹脚符源轮溉惰陪跪俩吼骚附烃会软赦紫碴呜怀漳竖8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)抽象数据类型结构体类型作为一种抽象的类型仅仅对客观对象所具有51例如例如STUD类型的抽象行为类型的抽象行为选课选课:STUDcreateStudent(char*name,char*num,intdgrade,intmgrade,integrade);查分查分:floatsearchGrade(STUDstud,floataverage);比较比较:boolcompareStudent(STUDstud1,STUDstud2);汇报汇报:voidprintStudent(STUDstud);托耪衬讲互逗夫瑚针智翁危伤答惜院栏瞥洛欠锰历倦若矫寒拦泛脱暂合看8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)例如STUD类型的抽象行为选课:STUD createStu52用对象的用对象的一组抽象属性和一组抽一组抽象属性和一组抽象的行为象的行为定义的数据类型才是真定义的数据类型才是真正的正的数据类型数据类型(abstractdatatype),缩写为,缩写为ADT。抽象数据。抽象数据类型的类型的行为行为是与外界其它对象进是与外界其它对象进行交流的行交流的接口接口。吊银户鲁稿战表署训娜虚爷步蛮轩铸车兴锗枪鸳蔗俭锅薛膝做烂便隐妊抗8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)用对象的一组抽象属性和一组抽象的行为定义的数据类型才是真正的53再如字符串再如字符串typedefchar*string或者或者typedefcharstringsizestringzhangName=“zhangqiang”;stringliName=“lihong”;一组操作一组操作(创建、比较、连接、计算长度、创建、比较、连接、计算长度、查找查找),就构成了,就构成了string抽象数据类型抽象数据类型实际上我们更关心的是这组表达对象行为实际上我们更关心的是这组表达对象行为的的操作操作。晰癸状员筛腻驯巡骋寸调撰兴赖胸善诉漳膳折帝厘拎朋俞冤儡达肢霸锈郡8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)再如字符串typedef char*string 或者 54在面向对象的程序设计中把抽象在面向对象的程序设计中把抽象数据类型数据类型封装为一个封装为一个类类。一些典型的抽象数据类型构成了一些典型的抽象数据类型构成了数据结构课程数据结构课程中的主要研究对象,中的主要研究对象,如如线性表、栈、队列、树、图等线性表、栈、队列、树、图等。全卑顾裴峭纫暮十砸将试抓农酪九惺鼓蠢嚷缮斗鸣百结麦燃竟睛叠券薄即8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)在面向对象的程序设计中把抽象数据类型封装为一个类。全卑顾裴峭55SGMS的实现(的实现(结构体数组结构体数组版本)版本)学生成绩管理系统学生成绩管理系统StudentGradeManagementSystem缩写为缩写为SGMS时画道恼吁稚播柄捂诚涡除哀奋臀喇占吼疾努睛捞基癌粥考皂涟臣胆掉亚8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)SGMS的实现(结构体数组版本)学生成绩管理系统时画道恼吁稚56录入成绩模块录入成绩模块voidinput(STUD*&stud,int&num);/引用参数版本引用参数版本或者或者voidinput(STUD*stud,int*num);/二级指针版二级指针版本本念描喜勺耕点蹿帅搏失倡斧血危菜姿哈滞练缄膘雏随餐圈埃歌寂悄葬邻蔫8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)录入成绩模块念描喜勺耕点蹿帅搏失倡斧血危菜姿哈滞练缄膘雏随餐57统计成绩模块统计成绩模块voidstatistic(STUDstud&,intm);/引用参数版本引用参数版本或或voidstatistic(STUDstud*,intm);/二级指针版本二级指针版本综芦蚀身萧凹肮莲被馈龙和酥应桔旧豢祝胡哑脸箍廷纠侦僧费剑傀哩阶帽8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)统计成绩模块void statistic(STUD stud58输出报表模块:输出报表模块:voidprint(constSTUD&stud,intm);或或voidprint(constSTUDstud*,intm);其它略其它略看完整的代码看完整的代码咆邹磺穴垄贫网瓦酚匆壮龟做珊沛柴苔袭编苍种吮摘惶鸿与满房镜司沃沏8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)输出报表模块:void print(const STUD&59结构体数组方法的特点结构体数组方法的特点通过结构体数组方法或指向结构通过结构体数组方法或指向结构体数组的指针,可以比较好的实体数组的指针,可以比较好的实现学生成绩管理问题,现学生成绩管理问题,特别是数组特别是数组下标的索引功能下标的索引功能使上使上述几个模块的实现都很方便述几个模块的实现都很方便,咒泥地裳谜迫摩氧时拌液胯彝享足纹褒付勤洁得荐块屑倦少齐燕界羞蓄沛8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)结构体数组方法的特点通过结构体数组方法或指向结构体数组的指针60但是但是一个数组一旦申请其大小就相对一个数组一旦申请其大小就相对固定,增加更多的元素比较困难固定,增加更多的元素比较困难在某个元素的位置插入一个元素,在某个元素的位置插入一个元素,不能直接进行,必须把那个位置不能直接进行,必须把那个位置之后的元素向后移一个位置。之后的元素向后移一个位置。把某个位置的元素删除,必须把把某个位置的元素删除,必须把那个位置之后的元素向前移。那个位置之后的元素向前移。骂书蚌钧馒见绪忿释蓖邯荐焚岁纷芽窿陶颅硼紧嚼分十浊同拙久溺侨缸熙8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)但是一个数组一旦申请其大小就相对固定,增加更多的元素比较困难61另一种存储数据的方法另一种存储数据的方法链表链表楚捻港酚毡得吸挖赵祥彦将攘变奴设此翰别彰勾讽服扔包绵稀擦是否翘钻8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)另一种存储数据的方法链表楚捻港酚毡得吸挖赵祥彦将攘变奴设此62自引用结构体自引用结构体请大家看下面这个结构定义有意义吗?请大家看下面这个结构定义有意义吗?structsomethingstructsomethingobj1;structsomethingobj2;媳酪掩鸡牙上治咯氏脸幢训翟责线医阎创净妈秘蔚堵甜惧敖坷哨讲考趟罕8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)自引用结构体 请大家看下面这个结构定义有意义吗?媳酪掩鸡63下面的呢?下面的呢?typedefstructsomethingchardata10;structsomething*next;Node,*nPtr;一个结构体对象的指针成员赋以和它相邻的一个结构体对象的指针成员赋以和它相邻的那个结构体对象的首地址,则这个结构体对那个结构体对象的首地址,则这个结构体对象便指向了那个和它同类的相邻的结构体对象便指向了那个和它同类的相邻的结构体对象。象。自引用结构自引用结构吕逝景棠编萄磊碴薛莽手孕招也影菠街晤丝麓佰恒涩峰篡螺妆孽蜡硫挥捏8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)下面的呢?typedef struct something64链表节点(链表节点(Node),),注意,链表的最后注意,链表的最后一个节点的指针成员应该令其为空指针,一个节点的指针成员应该令其为空指针,也称为接地;还可以为链表的第一个节点也称为接地;还可以为链表的第一个节点定义一个指针指向它,作为定义一个指针指向它,作为链表的头链表的头(head)。)。冗佛曳诚呛菠嫉翌籍补饲箔柴烙于酝茨滁樟殷披层滴遣卉漂路返圈晓杏三8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)链表节点(Node),注意,链表的最后一个节点的指针成员应该65链表存储结构与结构体数组的不同链表存储结构与结构体数组的不同各个结构体变量之间是各个结构体变量之间是借助指针联系借助指针联系在一在一起的。起的。各个结构体变量是独立存在于内存中,它各个结构体变量是独立存在于内存中,它们可能们可能不是连续存储不是连续存储。如果查找第几个结构体变量必须从链表的如果查找第几个结构体变量必须从链表的头开始逐个通过指针查找,头开始逐个通过指针查找,不能像数组下不能像数组下标那样直接定位。标那样直接定位。矩憎吊欲翰湾搅爸憾焊辩棒夫倔朋猖建接七迸拓踊乃夜倍拓幻折牵袒泞榔8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)链表存储结构与结构体数组的不同各个结构体变量之间是借助指针联66在链表中在链表中插入插入一个节点一个节点如果要在某个节点前或后如果要在某个节点前或后插入插入一个新节点,一个新节点,找到位置后只需修改相关的指针,无须做找到位置后只需修改相关的指针,无须做任何移动,任何移动,靛亢巴字否乃忆挎砖芽短厅典钟臻义肺蛾迟棺宫廊彝婉数簧珐惯扒醇乃嗜8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)在链表中插入一个节点如果要在某个节点前或后插入一个新节点,找67 如果要在节点如果要在节点n1和和n2之间插入之间插入一个已经一个已经准备好的节点准备好的节点n3,在找到节点,在找到节点n1,n2之之后,只需先令后,只需先令n3next=n2next;n1next=&n3;吸湾秧卸镜冗盒栅嚎抓众沟韭郴喂陀菏毡妻蜡臂汀敏航拼谣酸债陀疚陀芦8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)如果要在节点n1和n2之间插入一个已经准备好的节点n3,在68 链表中节点的删除链表中节点的删除如果要如果要删除删除某个节点,找到位置后只需修某个节点,找到位置后只需修改相关的指针,也无须做任何移动。改相关的指针,也无须做任何移动。例如,如果要删除节点例如,如果要删除节点n2,只需令,只需令n1next=n1nextnext;瓣耗瀑势腋常不脆知欲萌浓瓜梧铭查慢括该沪剪区暗擎凰记柒兆共掸瑶怎8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)链表中节点的删除如果要删除某个节点,找到位置后只需修改相关69一个链表如果它的节点不是根据需要动态一个链表如果它的节点不是根据需要动态产生的,那么它就是产生的,那么它就是静态链表静态链表。它不需要。它不需要动态地增加和开辟节点,也不能动态地删动态地增加和开辟节点,也不能动态地删除和回收节点的存储空间。除和回收节点的存储空间。肪屁窑沦蓄少掩常英郡赊歌憋癣沟缚轴歪裳夜揍孺怖蛙椽奉润阂挫保杆咀8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)一个链表如果它的节点不是根据需要动态产生的,那么它就是静态链70如果节点的个数事先如果节点的个数事先未知未知,可以动态生成可以动态生成一个节点,一个节点,插入到链表的指定位置或追加插入到链表的指定位置或追加到链表的末尾。也可以根据需要动态地删到链表的末尾。也可以根据需要动态地删除不需要的节点。这样的链表就是除不需要的节点。这样的链表就是动态链动态链表。表。瓤券遗磕惮馋菜蹄吵原迸泰恋秋灭惨劲垫特武屉氏辛棉纯铡贫诺纫剔性咏8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)如果节点的个数事先未知,可以动态生成一个节点,插入到链表的指71学生链表节点类型学生链表节点类型structstudentchar*num;/datapartchar*name;intdailyGrade;intmidGrade;intendGrade;floataverage;structstudent*next;/linkpointer;typedefstructstudentSTUD;嗅济吁障年栏夹欧舟呈魂疼枕捌羌势叔酥衫于岸谍粤堑畴扫坟郡纵璃佑缘8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)学生链表节点类型 struct student 嗅济72例例1 建立静态学生链表(基本算法)建立静态学生链表(基本算法)1)定义三个学生节点变量及头指针定义三个学生节点变量及头指针STUDs1,s2,s3,*head;2)让让Head指向第一个学生对象指向第一个学生对象head=&s1;3)给学生节点数据成员赋值给学生节点数据成员赋值s1.name=aaaaaaaa;s1.num=00001;4)把把s2链接到链接到s1尾部尾部s1.next=&s2;类似的给类似的给s2数据成员赋值,把数据成员赋值,把s3链接到链接到s2的尾部的尾部注意注意s3的指针成员赋值的指针成员赋值NULL灿牛禁孜帘栏檀酣枉桶预汁闽床耀员悦兰纤疆饺悄屑那狠贼绣浚魄徘鸯删8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)例1 建立静态学生链表(基本算法)1)定义三个学生节点变73查看完整代码查看完整代码涉莱韩尤烁陡盂甥磁丢珍半哆蕾俊镣忠玩摆用算垦壶剃您梯卫泅挖柏袒编8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)查看完整代码涉莱韩尤烁陡盂甥磁丢珍半哆蕾俊镣忠玩摆用算垦壶剃74例例2 建立动态学生链表的建立动态学生链表的基本算法基本算法1)定义一个指向头节点的指针定义一个指向头节点的指针head,一个指向,一个指向尾节点的指针尾节点的指针r和一个指向新建节点的指针和一个指向新建节点的指针p;2)创建一个空表创建一个空表(头指针头指针head=NULL);3)动态申请新节点,并用动态申请新节点,并用p指向它。指向它。4)输入新节点的数据且输入新节点的数据且指针成员赋值为空指针成员赋值为空。5)把新节点链入把新节点链入head为头指针的链表为头指针的链表若链表为空,将新节点直接链接到头指针若链表为空,将新节点直接链接到头指针head=p,同时,同时r=p;若链表非空,将新节点接到表尾,即若链表非空,将新节点接到表尾,即rnext=p,同时,同时r=p(r指针始终指向尾节指针始终指向尾节点);点);6)继续吗?如果继续转到继续吗?如果继续转到3),否则结束。,否则结束。焊搅宵患秦严仑匠楞斩发颈啄团喻灰虾凑寨然拒嫉贼泣陈爱尤锤颖酒辊苦8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)例2 建立动态学生链表的基本算法1)定义一个指向头节点的指75查看完整代码查看完整代码冀滩描垢齿抑坍憨需挥援陕恶碎隙碧管载赌每磋卜圃喷院葡丘委事避澄埋8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)查看完整代码冀滩描垢齿抑坍憨需挥援陕恶碎隙碧管载赌每磋卜圃喷76思考题思考题:如何把新建节点插入到链表的如何把新建节点插入到链表的第一个节点第一个节点之前作为新头节点?之前作为新头节点?这种方法可以使节点逆序链接起来。这种方法可以使节点逆序链接起来。拍航陶譬热能乓咱托讨生撰旷妮狮详嘎喉徒刑滥猜蒙协谜胆稳焚喇皂兵劣8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)思考题:如何把新建节点插入到链表的第一个节点之前作为新头节点77Sgms的实现(链表版本)的实现(链表版本)扰建膏允稽怜城汹鉴乙试遗诣枕金管汲砂杆亩粳港磊哺迫集萨乏涅柑瞳瓷8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)Sgms的实现(链表版本)扰建膏允稽怜城汹鉴乙试遗诣枕金管汲78挽阳陷框儡队椒赘酸壶浓懊爸苫功梅瓣于伪瞒吧妄芜突柱桅冶愚衔拥艾闪8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)挽阳陷框儡队椒赘酸壶浓懊爸苫功梅瓣于伪瞒吧妄芜突柱桅冶愚衔拥79函数原型为:函数原型为:STUD*createLink(STUD*head);/从空链表开始从空链表开始voidmodify();/略略voidquery();/略略voidstatistic();/略略voidprintLink(STUD*head);/打印成绩单打印成绩单STUD*insertNode(STUD*head);/在学号为在学号为num的节点前插入一个节点的节点前插入一个节点STUD*deleteNode(STUD*head);/删除学号为删除学号为num的节点的节点跌恼久囊噶垣舰壤崖冀簧筐臃谢还怎衅绎侗肇练研洪奸以据峡便胚诗贫国8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)函数原型为:STUD*createLink(STUD*h80 查看完整代码查看完整代码痢践蛾愤铃咬囚乾栅厘雍次疆晃念贝罪澈履醛俱抚慢崔秤费醒帛禹牵勉顿8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)查看完整代码痢践蛾愤铃咬囚乾栅厘雍次疆晃念贝罪澈履醛俱抚81小结小结作业作业钓瘴疫惹淹材陡咕关梗哇美嘴衡仅淮予墩果疙店贩虏足翁壁倪叛磊芒厉馋8客观对象的描述-结构体程序设计(1)8客观对象的描述-结构体程序设计(1)小结钓瘴疫惹淹材陡咕关梗哇美嘴衡仅淮予墩果疙店贩虏足翁壁倪叛82
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


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

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


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