习题课三结构PPT课件

上传人:痛*** 文档编号:88722355 上传时间:2022-05-11 格式:PPT 页数:38 大小:211.50KB
返回 下载 相关 举报
习题课三结构PPT课件_第1页
第1页 / 共38页
习题课三结构PPT课件_第2页
第2页 / 共38页
习题课三结构PPT课件_第3页
第3页 / 共38页
点击查看更多>>
资源描述
1习题课(三)习题课(三) Chap 9 结构结构 9.1 构建手机通讯录构建手机通讯录9.2 结构变量结构变量9.3 结构数组结构数组9.4 结构指针结构指针2本章要点本章要点n什么是结构?结构与数组有什么差别?什么是结构?结构与数组有什么差别?n有几种结构的定义形式,它们之间有什么不同?有几种结构的定义形式,它们之间有什么不同?n什么是结构的嵌套?什么是结构的嵌套?n什么是结构变量和结构成员变量,如何引用结构什么是结构变量和结构成员变量,如何引用结构成员变量?成员变量?n结构变量如何作为函数参数使用?结构变量如何作为函数参数使用?n什么是结构数组,如何定义和使用结构数组?什么是结构数组,如何定义和使用结构数组?n什么是结构指针,它如何实现对结构分量的操作?什么是结构指针,它如何实现对结构分量的操作?n结构指针是如何作为函数的参数的?结构指针是如何作为函数的参数的? 39.1 构建手机通讯录构建手机通讯录 9.1.1 程序解析程序解析9.1.2 结构的概念与定义结构的概念与定义9.1.3 结构的嵌套定义结构的嵌套定义49.1.2 结构的概念与定义结构的概念与定义n使用结构来表示通讯录信息:使用结构来表示通讯录信息:struct friends_list char name10; /*姓名姓名*/ int age; /*年龄年龄*/ char telephone13; /*联系电话联系电话*/; n结构:构造数据类型,把有内在联系的不同类型的数据统结构:构造数据类型,把有内在联系的不同类型的数据统一成一个整体,使它们相互关联一成一个整体,使它们相互关联,结构是一种类型结构是一种类型n结构变量又是成员变量的集合,可以单独使用其成员结构变量又是成员变量的集合,可以单独使用其成员结构变量结构变量friend:对应一个联系人:对应一个联系人struct friends_list friend;结构数组结构数组friends:每个元素就是一个结构变量,对应一个联系人:每个元素就是一个结构变量,对应一个联系人struct friends_list friends50;5结构的定义结构的定义n结构类型定义的一般形式为:结构类型定义的一般形式为: struct 结构名结构名 类型名类型名 结构成员名结构成员名1; 类型名类型名 结构成员名结构成员名2; 类型名类型名 结构成员名结构成员名n; ;结构的定义以分号结结构的定义以分号结束,被看作一条语句束,被看作一条语句 关键字关键字struct和它后面和它后面的结构名一起组成一的结构名一起组成一个新的数据类型名个新的数据类型名 6结构定义示例结构定义示例定义平面坐标结构:定义平面坐标结构:struct point double x; double y; 虽然虽然x、y的类型相同,也可以用数组的方式的类型相同,也可以用数组的方式表示,但采用结构体描述整体性更强,增加表示,但采用结构体描述整体性更强,增加了程序的可读性,使程序更清晰。了程序的可读性,使程序更清晰。79.1.3 结构的嵌套定义结构的嵌套定义n在实际生活中,一个较大的实体可能由多个成员在实际生活中,一个较大的实体可能由多个成员构成,而这些成员中有些又有可能是由一些更小构成,而这些成员中有些又有可能是由一些更小的成员构成的实体。的成员构成的实体。n在手机通讯录中,增加在手机通讯录中,增加“通信地址通信地址”姓名姓名性别性别年龄年龄 通信地址通信地址联系联系电话电话电子电子邮箱邮箱城市城市街道街道门牌号门牌号邮编邮编8结构的嵌套定义结构的嵌套定义struct address char city10; char street20; int code; int zip;struct nest_friendslist char name10; int age; struct address addr; char telephone13; ;在定义嵌套的结构类型时,必须先定义在定义嵌套的结构类型时,必须先定义成员的结构类型,再定义主结构类型。成员的结构类型,再定义主结构类型。 姓名姓名性别性别年龄年龄 通信地址通信地址联系联系电话电话电子电子邮箱邮箱城市城市街道街道门牌号门牌号邮编邮编99.2 结构变量结构变量 9.2.1 结构变量的定义和初始化结构变量的定义和初始化9.2.2 结构变量的使用结构变量的使用109.2.1结构变量的定义和初始化结构变量的定义和初始化三种定义结构变量的方式:三种定义结构变量的方式: 1.单独定义单独定义先定义先定义结构类型结构类型,再定义具有这种,再定义具有这种结构类型的变结构类型的变量量 struct friends_list char name10; /* 姓名姓名 */ int age; /* 年龄年龄 */ char telephone13; /* 联系电话联系电话 */; struct friends_list friend1, friend2;11结构变量的定义结构变量的定义2. 混合定义混合定义在定义结构体类型的同时定义结构体变量在定义结构体类型的同时定义结构体变量 struct friends_listchar name10; int age; char telephone13; friend1, friend2; 3. 无类型名定义无类型名定义在定义结构体变量时省略结构体名在定义结构体变量时省略结构体名struct char name10; int age; char telephone13; friend1, friend2; 12结构变量的初始化结构变量的初始化 struct friends_list friend1 = Zhang, 26, 0571-85171880 ;name age telephone Zhang260571-85271880139.2.2 结构变量的访问结构变量的访问1. 结构变量成员的访问结构变量成员的访问结构变量名结构变量名 .结构成员名结构成员名friend1.age = 26;strcpy(friend1.name, Zhang San); nest_friend.addr.zip14例例9-2 计算实发工资计算实发工资在一个职工工资管理系统中,工资项目包括编号、姓在一个职工工资管理系统中,工资项目包括编号、姓名、基本工资、奖金、保险、实发工资。名、基本工资、奖金、保险、实发工资。输入一个正整数输入一个正整数n,再输入,再输入n个职工的前个职工的前5项信息,计项信息,计算并输出每位职工的实发工资。算并输出每位职工的实发工资。实发工资实发工资 = 基本工资基本工资+奖金奖金保险。保险。15例例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); for(i = 1; i = n; i+) printf(请输入第请输入第%d个职工的信息个职工的信息: , i); scanf(%d%s, &e.num, e.name); scanf(%f%f%f, &e.jbgz, &e.jj, &e.bx); e.sfgz = e.jbgz + e.jj - e.bx; printf(编号编号:%d 姓名姓名:%s实发工资实发工资:%.2fn, e.num, e.name, e.sfgz); return 0;请输入职工人数请输入职工人数n: 1请输入第请输入第1个职工的信息:个职工的信息:102 Zhong 2200.5 800 85.2编号编号:102 姓名姓名:Zhong 实发工资实发工资:2915.30 16结构变量的使用整体赋值结构变量的使用整体赋值2. 结构变量的整体赋值结构变量的整体赋值具有相同类型的结构变量可以直接赋值。具有相同类型的结构变量可以直接赋值。将赋值符号右边结构变量的每一个成员的值都赋给了左边将赋值符号右边结构变量的每一个成员的值都赋给了左边结构变量中相应的成员。结构变量中相应的成员。 struct friends_list char name10; int age; char telephone13; friend1 = Zhang,26, “0571-85271880”, friend2;friend2 = friend1;17结构变量的使用函数参数结构变量的使用函数参数3. 结构变量作为函数参数结构变量作为函数参数当程序的规模较大,功能较多时,需要以函数的当程序的规模较大,功能较多时,需要以函数的形式进行功能模块的划分和实现;形式进行功能模块的划分和实现;如果在函数间传递结构数据,则需用结构变量作如果在函数间传递结构数据,则需用结构变量作为函数的参数或返回值。为函数的参数或返回值。18例例9-3 结构变量做为函数参数结构变量做为函数参数改写例改写例9-2,要求使用,要求使用结构变量结构变量作为函数参数。作为函数参数。n定义一个用于计算实发工资的函数:定义一个用于计算实发工资的函数: float count_sfgz(struct employee m) return m.jbgz + m.jj - m.bx; n再将主函数再将主函数main中的语句:中的语句: e.sfgz = e.jbgz + e.jj - e.bx; 改为:改为: e.sfgz = count_sfgz(e);19n一个结构变量只能表示一个实体的信息,一个结构变量只能表示一个实体的信息,如果有许多相同类型的实体,就需要使用如果有许多相同类型的实体,就需要使用结构数组。结构数组。n结构数组是结构与数组的结合,与普通数结构数组是结构与数组的结合,与普通数组的不同之处在于每个数组元素都是一个组的不同之处在于每个数组元素都是一个结构类型的数据,包括各个成员项。结构类型的数据,包括各个成员项。 9.3 结构数组结构数组 20n结构数组的定义方法与结构变量相同结构数组的定义方法与结构变量相同 struct friends_list char name10; int age; char telephone13; friends10; 结构数组结构数组friends,它有,它有10个数组元素,从个数组元素,从friends0到到friends9,每个数组元素都是结,每个数组元素都是结构类型构类型struct friends_list9.3 结构数组结构数组 21结构数组的初始化结构数组的初始化 struct friends_list friends10 = zhang san, 26, 0571-85271880, Li Si, 30, 13605732436 ; friends91360573243630Li Sifriends10571-8527188026Zhang Sanfriends022结构数组元素结构数组元素 n结构数组元素的成员引用结构数组元素的成员引用结构体数组名结构体数组名下标下标 . 结构体成员名结构体成员名 n使用方法与同类型的变量完全相同使用方法与同类型的变量完全相同friends5.age = 26;strcpy(friends5.name,Zhang San);friends4 = friends1;friends91360573243630Li Sifriends10571-8527188026Zhang Sanfriends023例例9-4 结构数组排序结构数组排序 输入并保存输入并保存10个学生的信息,计算并输出平个学生的信息,计算并输出平均分,再按照从高分到低分的顺序输出他均分,再按照从高分到低分的顺序输出他们的信息。们的信息。 #include struct student int num; char name20; int score; struct student stud10; /* 定义结构数组定义结构数组 */24例例9-4 源程序源程序int main(void) int i, j, index, sum = 0; struct student temp; /* 输入输入10个学生的记录,并累加成绩个学生的记录,并累加成绩 */ for(i = 0; i 10; i+) printf(No %d: , i+1); scanf(%d%s%d, &studi.num, studi.name, &studi.score); sum = sum + studi.score; /* 按照分数从低到高排序,使用选择排序法按照分数从低到高排序,使用选择排序法 */ for( i = 0; i 9; +i ) index =i; for (j = i+1; j 10; j+ ) if (studj.score ”访问指针指向的结构成员。访问指针指向的结构成员。p-age = 36;当当p = &friend1时,以下三条语句相同:时,以下三条语句相同: friend1.age = 36; (*p).age = 36; p-age = 36;289.4.2 结构指针作为函数参数结构指针作为函数参数当结构指针作为函数的参数时,执行效率高,当结构指针作为函数的参数时,执行效率高,可以完成比基本类型指针更为复杂的操作。可以完成比基本类型指针更为复杂的操作。例例9-5 输入输入10个学生的学号、姓名和成绩,输个学生的学号、姓名和成绩,输出学生的成绩等级和不及格人数。出学生的成绩等级和不及格人数。每个学生的记录包括学号、姓名、成绩和等级每个学生的记录包括学号、姓名、成绩和等级要求定义和调用函数要求定义和调用函数set_grade根据学生成绩设置等级,根据学生成绩设置等级,并统计不及格人数并统计不及格人数等级设置:等级设置:A :85100;B:7084;C:6069;D:05929例例9-5 源程序源程序#define N 10struct student int num; char name20; int score; char grade;int main(void) struct student stuN, *ptr; ptr = stu; /* 输入输入 略略 */ count = set_grade( ptr ); int set_grade(struct student * p) int i, n = 0; for(i = 0; i score = 85) p-grade = A; else if(p-score = 70) p-grade = B; else if(p-score = 60) p-grade = C; else p-grade = D; n+; return n;调用调用set_grade返回主函数后,主函数中结返回主函数后,主函数中结构数组构数组stu的元素的的元素的grade成员已经被赋值成员已经被赋值 30例例9-1 说明说明n例例9-1中,结构数组名中,结构数组名friends作为函数参数时,其作为函数参数时,其实质就是结构指针作为函数参数,因为数组名代表实质就是结构指针作为函数参数,因为数组名代表数组的首地址。因此,结构数组名与结构指针变量数组的首地址。因此,结构数组名与结构指针变量都可以做为函数的参数。都可以做为函数的参数。 n与结构变量作为函数参数相比,用结构指针作为函与结构变量作为函数参数相比,用结构指针作为函数参数的效率更高,因而是更佳的选择。数参数的效率更高,因而是更佳的选择。 319.1.1 程序解析程序解析例例9-1 构建简单的手机通讯录构建简单的手机通讯录联系人的基本信息:姓名、年龄和联系电话联系人的基本信息:姓名、年龄和联系电话最多容纳最多容纳50名联系人的信息名联系人的信息 具有新建和查询功能具有新建和查询功能32程序解析源程序程序解析源程序#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);33源程序源程序int main(void) int choice; char name10; struct friends_list friends50; /* 包含包含50个人的通讯录个人的通讯录 */ do printf(手机通讯录功能选项:手机通讯录功能选项:1:新建新建 2:查询查询 0:退出退出n); printf(请选择功能:请选择功能:); scanf(%d, &choice); switch(choice) case 1: new_friend(friends); break; case 2: printf(请输入要查找的联系人名请输入要查找的联系人名:); scanf(%s, name); search_friend(friends, name); break; case 0: break; while(choice != 0); printf(谢谢使用通讯录功能谢谢使用通讯录功能!n); return 0;34源程序源程序/*新建联系人新建联系人*/void new_friend(struct friends_list friends ) struct friends_list f; if(Count = 50) printf(通讯录已满通讯录已满!n); return; printf(请输入新联系人的姓名请输入新联系人的姓名:); scanf(%s, f.name); printf(请输入新联系人的年龄请输入新联系人的年龄:); scanf(%d, &f.age); printf(请输入新联系人的联系电话请输入新联系人的联系电话:); scanf(%s, f.telephone); friendsCount = f; Count+;35源程序源程序/*查询联系人查询联系人*/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, friendsi.name) = 0) /* 找到联系人找到联系人*/ flag=1; break; if(flag) printf(姓名姓名: %st, friendsi.name); printf(年龄年龄: %dt, friendsi.age); printf(电话电话: %sn, friendsi.telephone); else printf(无此联系人无此联系人!);36程序解析程序结构程序解析程序结构n程序结构程序结构主函数主函数main:程序的总体控制:程序的总体控制函数函数new_friend:新建联系人功能:新建联系人功能函数函数search_friend:查询联系人功能:查询联系人功能 main()new_friend()search_friend()37程序解析数据类型程序解析数据类型/变量变量n数据类型数据类型/变量变量结构类型结构类型struct friends_list:在程序首部定义,其中:在程序首部定义,其中的成员分别代表联系人的基本信息的成员分别代表联系人的基本信息struct friends_list char name10; /* 姓名姓名 */ int age; /* 年龄年龄 */ char telephone13; /* 联系电话联系电话 */; 结构变量结构变量friend:对应一个联系人:对应一个联系人struct friends_list friend;结构数组结构数组friends:每个元素就是一个结构变量,对应:每个元素就是一个结构变量,对应一个联系人一个联系人struct friends_list friends50; 38程序解析全局变量程序解析全局变量/函数参数函数参数全局变量全局变量Count:记录当前的联系人总数:记录当前的联系人总数 函数函数new_friend和和search_friend的参数之一是结的参数之一是结构数组:构数组:void new_friend(struct friends_list friends );void search_friend(struct friends_list friends , char *name); 结构数组名作为函数实参与普通数组名作函数参数一样,结构数组名作为函数实参与普通数组名作函数参数一样,将数组首地址传递给函数形参将数组首地址传递给函数形参
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 成人自考


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

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


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