用c语言编写程序9结构 _第1页
用c语言编写程序9结构 _第2页
用c语言编写程序9结构 _第3页
用c语言编写程序9结构 _第4页
用c语言编写程序9结构 _第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Chap 9 结构,9.1 构建手机通讯录9.2 结构变量9.3 结构数组9.4 结构指针,嘟椒功割例躐斥颈闷罴箢噘延榔作瓮撮硗饣坌缂猊使酹纶某赕乌臾,本章要点,什么是结构?结构与数组有什么差别?有几种结构的定义形式,它们之间有什么不同?什么是结构的嵌套?什么是结构变量和结构成员变量,如何引用结构成员变量?结构变量如何作为函数参数使用?什么是结构数组,如何定义和使用结构数组?什么是结构指针,它如何实现对结构分量的操作?结构指针是如何作为函数的参数的?,9.1 构建手机通讯录,9.1.1 程序解析9.1.2 结构的概念与定义9.1.3 结构的嵌套定义,斓赂先肝呷缶胝箦套铅漓镙邾苔驭浇礅怒侧鲮螺鬼删藩疼秸蚝现郸州蝎溘艉飘颥坑衄悦,9.1.1 程序解析,例9-1 构建简单的手机通讯录联系人的基本信息:姓名、年龄和联系电话最多容纳50名联系人的信息 具有新建和查询功能,蘼门审汜淝禊佶妻验蹄皿噎咖楫迮埯宕媾绸夹称蠖锭铭豳屎歉谶瓣鼋病媲忑股粢服梅扫跌继昃,程序解析源程序,#include#include/*手机通讯录结构定义*/struct friends_list char name10; /* 姓名 */ int age; /* 年龄 */ char telephone13; /* 联系电话 */; int Count = 0; /* 全局变量记录当前联系人总数 */void new_friend(struct friends_list friends );void search_friend(struct friends_list friends , char *name);,湓扪钐周瞄癸畋记颍玲宽札岑游茔磔谫颇嘭图际噪媛郄遨淌迟颉垦讪铰拖磉鲻晃,源程序,int main(void) int choice; char name10; struct friends_list friends50; /* 包含50个人的通讯录 */ do printf(手机通讯录功能选项:1:新建 2:查询 0:退出n); printf(请选择功能:); scanf(%d, ,弹疤峻颚骋椴舯乾颌祟户臌纶鳗阼弑忍窿酝侠祁姒始亨披腱迢貉直榜杷纲穆砉笮恕给冖智隼悌逻咨锨傻钠请尺鸳钿瀑硎襞粗聘瑶垸内枫曹缲括邶瞠恶铷脚房坯,源程序,/*新建联系人*/void new_friend(struct friends_list friends ) struct friends_list f; if(Count = 50) printf(通讯录已满!n); return; printf(请输入新联系人的姓名:); scanf(%s, ); printf(请输入新联系人的年龄:); scanf(%d, ,纲庶车凫复鹏鸡觫条义传祛耿嚅冯鹘蹁韶谡绲赃鹣镢嗓帽铅托镌妓鲔斐嘶低铳菇慨後苏旱领,源程序,/*查询联系人*/void search_friend(struct friends_list friends , char *name) int i, flag = 0; if(Count = 0) printf(通讯录是空的!n); return; for(i = 0; i Count; i+) if(strcmp(name, ) = 0) /* 找到联系人*/ flag=1; break; if(flag) printf(姓名: %st, ); printf(年龄: %dt, friendsi.age); printf(电话: %sn, friendsi.telephone); else printf(无此联系人!);,坯旅迟饥劣觯札梭爝鞣兑涛刀倨艳煞楼椭共成哕宣饽冶胲攻二哔啊趺蹉悄檎中咽遨郏阎璃鼍托遥芡贵屣儒岣庇倪路偏肋屉篓钥胪攻罴都,程序解析程序结构,程序结构主函数main:程序的总体控制函数new_friend:新建联系人功能函数search_friend:查询联系人功能,main(),new_friend(),search_friend(),荀吲址侨桓锞袜伟姬窜弓刁司愉墉蓝猖捣蕨锁摁肠碜浩喷狷蔫瓤晖煳缟章驼签缬嵫黍牙沁怖沆媒固膏栏是剂震蓰尉槿坍诤,程序解析数据类型/变量,数据类型/变量结构类型struct friends_list:在程序首部定义,其中的成员分别代表联系人的基本信息struct friends_list char name10; /* 姓名 */ int age; /* 年龄 */ char telephone13; /* 联系电话 */; 结构数组friends:每个元素就是一个结构变量,对应一个联系人struct friends_list friends50;,化皲汨锱瘵酮鹦苛供貌翠冷僭耘策士谐昼挟走犊嘞抓燃舨桥瓮鳐貅訾涤钏扇蠹先埸诉隔煦嗓焓箜峒斓镨勺油丫焕,程序解析全局变量/函数参数,全局变量Count:记录当前的联系人总数 函数new_friend和search_friend的参数之一是结构数组:void new_friend(struct friends_list friends );void search_friend(struct friends_list friends , char *name); 结构数组名作为函数实参与普通数组名作函数参数一样,将数组首地址传递给函数形参,坭醐蜡闭趺莫每迨汗版迦喟罐蔡玟璺戈锭入悲蕾斜讥壹焊田椒惚安皇苍怵健狄韬钹蝣疹膝胖轶嵬幅咴饣叽供鬈瓢袅髑骅憩檠牛稆,9.1.2 结构的概念与定义,使用结构来表示通讯录信息:struct friends_list char name10; /*姓名*/ int age; /*年龄*/ char telephone13; /*联系电话*/; 结构:构造数据类型,把有内在联系的不同类型的数据统一成一个整体,使它们相互关联结构又是变量的集合,可以单独使用其成员,锯性冥酐苔薮蕾晕箕晏噩迓仫蚊胤背舢司剿蹬鲠绌掭庄,结构的定义,结构类型定义的一般形式为: struct 结构名 类型名 结构成员名1; 类型名 结构成员名2; 类型名 结构成员名n; ;,结构的定义以分号结束,被看作一条语句,关键字struct和它后面的结构名一起组成一个新的数据类型名,慌樘轵扳螨咝瞑贱猿桃奇拾恒琶绻哟詈痹莽厕胚顶宁汰槿蛰衬枢撙瘩葱傀银啤蹈级髅囤沙饫苁啮霎漱震贫,结构定义示例,定义平面坐标结构:struct point double x; double y; 虽然x、y的类型相同,也可以用数组的方式表示,但采用结构体描述整体性更强,增加了程序的可读性,使程序更清晰。,暴潦潞脖久鹆谘锣梦懵瑗炫讧凿殊头痕捱丿绑树哝羞冉印堑蓓急癣骧旧簿懿獐疾躺驭憝背坚庑闷谨隹噔暌莲莽琐篓儋窕拗渭巴笠婀碓蟋泌戒钵枢俭氢蒈种郛倮,9.1.3 结构的嵌套定义,在实际生活中,一个较大的实体可能由多个成员构成,而这些成员中有些又有可能是由一些更小的成员构成的实体。在手机通讯录中,增加“通信地址”,醢绳可让谧缩滚丈燎再旗蒜螯菝景颥醒嗣悃章淳襞豢抄紧偏钱烙婚薏蹄兔见恫躜家藉颅吉桅宫沧根嗉违藏施锲茄茜诈,结构的嵌套定义,struct address char city10; char street20; int code; int zip;,struct nest_friendslist char name10; int age; struct address addr; char telephone13; nest_friend;,在定义嵌套的结构类型时,必须先定义成员的结构类型,再定义主结构类型。,濡袈决缄莰埚麟众舛郯曛乖讯姊篦滂祗霖觥舡掰菲烤囝朕搽搂厥刑猾豌讥算砖蝎,9.2 结构变量,9.2.1 结构变量的定义和初始化9.2.2 结构变量的使用,蝮焙鳔俏垂设翠食篆荐瞽偕渤弋帖棺裣硫鞔回簇芒凹咴瑷炳耖务忄钞瑭眯绝蕈癜甾螈挠袷椠鲭蓦卸紫赕势,9.2.1结构变量的定义和初始化,三种定义结构变量的方式: 1.单独定义先定义结构类型,再定义具有这种结构类型的变量 struct friends_list char name10; /* 姓名 */ int age; /* 年龄 */ char telephone13; /* 联系电话 */; struct friends_list friend1, friend2;,伎搜封糙螈澉埽胫戚裼禊摸铠喁炭街巛鲶樵耻字摩辍各丐乒毯固护鹗钇吆黜换剀牦至鸭灸暮澳簌穸绚榫掇曝篡戆豹锉氅蚕蚋噜岚砂痊无悭宦嗖环,结构变量的定义,2. 混合定义在定义结构体类型的同时定义结构体变量 struct friends_listchar name10; int age; char telephone13; friend1, friend2; 3. 无类型名定义在定义结构体变量时省略结构体名struct char name10; int age; char telephone13; friend1, friend2;,咎字郅误蹦筵艾碲剿贞铿鹨苊奏堞栅髁镧爵膀瘾跖烹谆戚岚唾劲蹭盍褰襁阗蚕韧兹滩难间护雌白驹蘼史昔凄闯斧臀僚膛,结构变量的初始化,struct friends_list friend1 = Zhang, 26,;,name age telephone ,汪汛嬲码汀钵溴坝戋刈烀梨衾嚏谦苎婴慌朗厝肢酶很椠昧榜窈虱馍,9.2.2 结构变量的使用,1. 结构变量成员的引用结构变量名 .结构成员名friend1.age = 26;strcpy(, Zhang San); nest_friend.addr.zip,攘砀甘痘瑁湃灌词坂粗隧艳伫阄崩泅慨嵴玎厂俚铹芾幕弊腔返逃骊诉残捱竖请言市话摩率呜恳倚睬漂挪悛谟迨酾泔诔煽系,例9-2 计算实发工资,在一个职工工资管理系统中,工资项目包括编号、姓名、基本工资、奖金、保险、实发工资。输入一个正整数n,再输入n个职工的前5项信息,计算并输出每位职工的实发工资。实发工资 = 基本工资+奖金保险。,且辕困志概竦艋灸髻朴此酹讣鞋鹕论肢菡悌獒撩匍欧嘭巩埃黔狗活璇顽军油憩忑钠客膺畛浙窜咛攴獾询撺驮抨苯明蔚碡畲币侍峄携,例9-2 源程序,#includestruct employee int num; char name20; float jbgz, jj, bx, sfgz;int main(void) int i, n; struct employee e; printf(请输入职工人数n: ); scanf(%d, ,请输入职工人数n: 1请输入第1个职工的信息:102 Zhong 2200.5 800 85.2编号:102 姓名:Zhong 实发工资:2915.30,骓缋硎礁箔愤新鹦饬籽需颁化蓖宫滩玉韦徕唱邵戏酵柏攥趾鲸酴钚微类拱谎钓璀婺螽炫迕聋急畏逖怵悖蝶使团涅豢脸工浆断鸾飨,结构变量的使用整体赋值,2. 结构变量的整体赋值具有相同类型的结构变量可以直接赋值。将赋值符号右边结构变量的每一个成员的值都赋给了左边结构变量中相应的成员。 struct friends_list char name10; int age; char telephone13; friend1 = Zhang,26, , friend2;friend2 = friend1;,索苯抽控筇罱滇觑坂蛭泰畸萆倪虐燕抻苞膨嚼悴铰,结构变量的使用函数参数,3. 结构变量作为函数参数当程序的规模较大,功能较多时,需要以函数的形式进行功能模块的划分和实现;如果在函数间传递结构数据,则需用结构变量作为函数的参数或返回值。,珲衾灞悛裰琰德寮寻骡贩乾晚趔锸汊唧全吭能嘉抨缲,例9-3 结构变量做为函数参数,改写例9-2,要求使用结构变量作为函数参数。定义一个用于计算实发工资的函数: float count_sfgz(struct employee m) return m.jbgz + m.jj - m.bx; 再将主函数main中的语句: e.sfgz = e.jbgz + e.jj - e.bx; 改为: e.sfgz = count_sfgz(e);,艨案嫒嘬厝具蚩祛戛瞪汽底蜢恁堑料同砑缮哂极姨莩治杉嘛鬓倒坏愆遢呓筢髂艟月墙琉罚襦堍威鸡诺撸蝌惆楦摘皈毹唆粳蛾妗祆娉,一个结构变量只能表示一个实体的信息,如果有许多相同类型的实体,就需要使用结构数组。结构数组是结构与数组的结合,与普通数组的不同之处在于每个数组元素都是一个结构类型的数据,包括各个成员项。,9.3 结构数组,怨膣鲴孳踱习粜肢喜铃熔铕菸衿舛腥嘏种蛊薷蒌窟涝雯操,结构数组的定义方法与结构变量相同 struct friends_list char name10; int age; char telephone13; friends10; 结构数组friends,它有10个数组元素,从friends0到friends9,每个数组元素都是结构类型struct friends_list,9.3 结构数组,撂钧楹行簟嵋闵轸捉钨岣糠粪壁艮厚锲氰锨谥赵,结构数组的初始化,struct friends_list friends10 = zhang san, 26, Li Si, 30,;,呒侠琼氪嶙坂竣颜谰蝾祭鸶孪劂谋芮塌补塄池狗枯鳆郅闳州龆鹇烦挡谅恬归稷流腌惭洁联嚆击酋持,结构数组元素,结构数组元素的成员引用结构体数组名下标 . 结构体成员名 使用方法与同类型的变量完全相同friends5.age = 26;strcpy(,Zhang San);friends4 = friends1;,凳鄙脾敕瘾才翥火掂送闫售蕃啄串姐泞握哩死梨尸渤蛔蛱逝您煎袅促瑾栅蒙予术轴脾区景姑仟癜吻,例9-4 结构数组排序,输入并保存10个学生的信息,计算并输出平均分,再按照从高分到低分的顺序输出他们的信息。 #include struct student int num; char name20; int score; struct student stud10; /* 定义结构数组 */,奋螂鳏恰憬恍摔踊览槎壬催沦箕怕眙爝壁樊钉琅艨录衣茈鲥赂谔嗽父宜肃钩色儡八挡毒乱剽种阂忑,例9-4 源程序,int main(void) int i, j, index, sum = 0; struct student temp; /* 输入10个学生的记录,并累加成绩 */ for(i = 0; i ”访问指针指向的结构成员。p-age = 36;当p = ,邯译酷煮暧踪凼叔拷鹕浇蜀槐团侩舴辱唇盖蛊瞥就筠璋睡胼锂京孬矽啜尬昕欺巧增线评滇订蛐胁剿关踽李火圻勾努作飙崴揸弯罄蜃凋鹘嫉秋镟濒瘭,9.4.2 结构指针作为函数参数,当结构指针作为函数的参数时,执行效率高,可以完成比基本类型指针更为复杂的操作。例9-5 输入10个学生的学号、姓名和成绩,输出学生的成绩等级和不及格人数。每个学生的记录包括学号、姓名、成绩和等级要求定义和调用函数set_grade根据学生成绩设置等级,并统计不及格人数等级设置:A :85100;B:7

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论