版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Chap 9 结构结构 9.1 输出平均分最高的学生信息输出平均分最高的学生信息 9.2 学生成绩排序学生成绩排序 9.3 修改学生成绩修改学生成绩 本章要点本章要点 n什么是结构?结构与数组有什么差别?什么是结构?结构与数组有什么差别? n有几种结构的定义形式,它们之间有什么不同?有几种结构的定义形式,它们之间有什么不同? n什么是结构的嵌套?什么是结构的嵌套? n什么是结构变量和结构成员变量?如何引用结构什么是结构变量和结构成员变量?如何引用结构 成员变量?成员变量? n结构变量如何作为函数参数使用?结构变量如何作为函数参数使用? n什么是结构数组?如何定义和使用结构数组?什么是结构数组?
2、如何定义和使用结构数组? n什么是结构指针?它如何实现对结构分量的操作?什么是结构指针?它如何实现对结构分量的操作? n结构指针是如何作为函数的参数的?结构指针是如何作为函数的参数的? 9.1输出平均分最高的学生信息输出平均分最高的学生信息 9.1.1 程序解析程序解析 9.1.2 结构的概念与定义结构的概念与定义 9.1.3 结构的嵌套定义结构的嵌套定义 9.1.4 结构变量的定义和初始化结构变量的定义和初始化 9.1.5 结构变量的使用结构变量的使用 9.1.1 程序解析程序解析 例例9-1 输出平均分最高的学生信息输出平均分最高的学生信息 n假设学生的基本信息包括学号、姓名、三假设学生的
3、基本信息包括学号、姓名、三 门课程成绩以及个人平均成绩。输入门课程成绩以及个人平均成绩。输入 个个 学生的成绩信息,学生的成绩信息, 计算并输出平均分最高计算并输出平均分最高 的学生信息。的学生信息。 9.1.1 程序解析程序解析 #include struct student /* 学生信息结构定义学生信息结构定义 */ int num; /* 学号学号 */ char name10; /* 姓名姓名 */ int computer, english, math; /* 三门课程成绩三门课程成绩 */ double average; /* 个人平均成绩个人平均成绩 */ ; int main
4、(void) int i, n; struct student s1,max; /* 定义结构变量定义结构变量 */ printf(Input n: ); scanf(%d, printf(Input the students number, name and course scoresn); for(i = 1; i = n; i+) printf(No.%d: , i); scanf(%d%s%d%d%d, s1.average=(s1.math + s1.english + puter) / 3.0; if(i = 1) max = s1; /* 结构变量结构变量 操作操作 */ if(
5、max.average s1.average) max = s1; printf(num:%d, name:%s, average:%.2lfn, max.num, , max.average); return 0; 9.1.2 结构的概念与定义结构的概念与定义 n使用结构来表示学生信息:使用结构来表示学生信息: struct student int num; /* 学号学号 */ char name10; /* 姓名姓名 */ int computer, english, math; /* 三门课程成绩三门课程成绩 */ double average; /* 个人平均成绩个人
6、平均成绩 */ ; n结构是结构是C语言中一种新的语言中一种新的构造数据类型构造数据类型,它能够,它能够 把有内在联系的把有内在联系的不同类型的数据不同类型的数据统一成一个整体,统一成一个整体, 使它们相互关联使它们相互关联 n结构又是结构又是变量的集合变量的集合,可以按照对基本数据类型,可以按照对基本数据类型 的操作方法单独使用其变量成员。的操作方法单独使用其变量成员。 结构与数组比较:结构与数组比较: 都是构造类型,是多个变都是构造类型,是多个变 量的集合量的集合 数组成员类型相同,结构数组成员类型相同,结构 成员类型不同成员类型不同 9.1.2 结构的概念与定义结构的概念与定义 n结构类
7、型定义的一般形式为:结构类型定义的一般形式为: 关键字关键字struct和它后面和它后面 的结构名一起组成一的结构名一起组成一 个新的数据类型名个新的数据类型名 9.1.2 结构的概念与定义结构的概念与定义 n例如,平面坐标结构:例如,平面坐标结构: struct point float x; float y; ; 虽然虽然x、y的类型相同,也的类型相同,也 可以用数组的方式表示,可以用数组的方式表示, 但采用结构进行描述,更但采用结构进行描述,更 贴近事物本质,从而增加贴近事物本质,从而增加 了程序的可读性,使程序了程序的可读性,使程序 更易理解更易理解 结构适合用于描述具有多结构适合用于描
8、述具有多 个属性的实体或对象个属性的实体或对象 9.1.3 结构的嵌套定义结构的嵌套定义 n在我们的实际生活中,一个较大的实体可能由多在我们的实际生活中,一个较大的实体可能由多 个成员构成,而这些成员中有些又有可能是由一个成员构成,而这些成员中有些又有可能是由一 些更小的成员构成。些更小的成员构成。 n在学生信息中可以再增加一项:在学生信息中可以再增加一项:“通信地址通信地址”, 它又可以再划分为:城市、街道、门牌号、邮政它又可以再划分为:城市、街道、门牌号、邮政 编码。编码。 学号学号姓名姓名计算机计算机英语英语数学数学 平均平均 成绩成绩 9.1.3 结构的嵌套定义结构的嵌套定义 n由此,
9、我们可以对其结构类型进行如下重由此,我们可以对其结构类型进行如下重 新定义:新定义: struct address char city10; char street20; int code; int zip; ; struct nest_student int num; char name10; struct address addr; int computer, english, math; double average; ; 在定义嵌套的结构类型时,必须先定义在定义嵌套的结构类型时,必须先定义 成员的结构类型,再定义主结构类型。成员的结构类型,再定义主结构类型。 9.1.4 结构变量的定义
10、和初始结构变量的定义和初始 化化 n在语言中定义结构变量的方式有三种:在语言中定义结构变量的方式有三种: 1.单独定义单独定义:先定义一个结构类型,再定义一个具:先定义一个结构类型,再定义一个具 有这种结构类型的变量有这种结构类型的变量 struct student int num; /* 学号学号 */ char name10; /* 姓名姓名 */ int computer, english, math; /* 三门课程成绩三门课程成绩 */ double average; /* 个人平均成绩个人平均成绩 */ ; struct student s1,s2; 9.1.4结构变量的定义和初始
11、化结构变量的定义和初始化 2. 混合定义混合定义:在定义结构类型的同时定义结构变量:在定义结构类型的同时定义结构变量 struct student int num; /* 学号学号 */ char name10; /* 姓名姓名 */ int computer, english, math; /* 三门课程成绩三门课程成绩 */ double average; /* 个人平均成绩个人平均成绩 */ s1, s2; 3. 无类型名定义无类型名定义:在定义结构变量时省略结构名:在定义结构变量时省略结构名 struct int num; /* 学号学号 */ char name10; /* 姓名姓名
12、 */ int computer, english, math; /* 三门课程成绩三门课程成绩 */ double average; /* 个人平均成绩个人平均成绩 */ s1, s2; 9.1.4结构变量的定义和初始化结构变量的定义和初始化 n结构变量的初始化结构变量的初始化 struct student s1 = 101, Zhang, 78, 87, 85; 9.1.5 结构变量的使用结构变量的使用 1. 结构变量成员的引用结构变量成员的引用 n在在C语言中,使用结构成员操作符语言中,使用结构成员操作符“.”来引用结来引用结 构成员,格式为:构成员,格式为: 结构变量名结构变量名结构成
13、员名结构成员名 s1.num = 101; strcpy(, Zhang); nest_s1.addr.zip = 310015; 9.1.5 结构变量的使用结构变量的使用 2. 结构变量的整体赋值结构变量的整体赋值 n具有相同类型的结构变量可以直接赋值具有相同类型的结构变量可以直接赋值。 赋值时,将赋值符号右边结构变量的每一赋值时,将赋值符号右边结构变量的每一 个成员的值都赋给了左边结构变量中相应个成员的值都赋给了左边结构变量中相应 的成员。的成员。 struct student s1 = 101, Zhang, 78, 87, 85, s2; s2 = s1; 9.1.5 结
14、构变量的使用结构变量的使用 3. 结构变量作为函数参数结构变量作为函数参数 n如果一个如果一个C C程序的规模较大,功能较多,必然需程序的规模较大,功能较多,必然需 要以函数的形式进行功能模块的划分和实现要以函数的形式进行功能模块的划分和实现 n如果程序中含有结构数据,则就可能需要用结如果程序中含有结构数据,则就可能需要用结 构变量作为函数的参数或返回值,以在函数间构变量作为函数的参数或返回值,以在函数间 传递数据。传递数据。 n例:例: double count_average( struct student s ) main:s1.average = count_average ( s1
15、); 特点特点:可以传递多个数据:可以传递多个数据 且参数形式较简单且参数形式较简单 缺点缺点:对于成员较多的大:对于成员较多的大 型结构,参数传递时所型结构,参数传递时所 进行的结构数据复制使进行的结构数据复制使 得效率较低得效率较低 9.2 学生成绩排序学生成绩排序 n9.2.1 程序解析程序解析 n9.2.2 结构数组操作结构数组操作 9.2.1 程序解析程序解析 例例9-2 输入输入n(n50)个学生的成绩信息,按照学生的)个学生的成绩信息,按照学生的 个人平均成绩从高到低输出他们的信息。个人平均成绩从高到低输出他们的信息。 struct student students50, tem
16、p; /* 定义结构数组定义结构数组 */ /* 输入输入 */ 9.2.1 程序解析程序解析 /* 结构数组排序,选择排序法结构数组排序,选择排序法 */ for( i = 0; i n-1; i+ ) index = i; for (j = i+1; j studentsindex.average) /* 比较平均成绩比较平均成绩*/ index = j; temp = studentsindex;/* 交换数组元素交换数组元素 */ studentsindex = studentsi; studentsi = temp; /* 输出排序后的信息输出排序后的信息 */ printf(num
17、t namet averagen); for (i = 0; i n; i+ ) printf(%dt%st %.2lfn, studentsi.num, , studentsi.average); n一个结构变量只能表示一个实体的信息,一个结构变量只能表示一个实体的信息, 如果有许多相同类型的实体,就需要使用如果有许多相同类型的实体,就需要使用 结构数组。结构数组。 n结构数组是结构与数组的结合,与普通数结构数组是结构与数组的结合,与普通数 组的不同之处在于每个数组元素都是一个组的不同之处在于每个数组元素都是一个 结构类型的变量。结构类型的变量。 9.2.2 结构
18、数组操作结构数组操作 n结构数组的定义方法与结构变量类似结构数组的定义方法与结构变量类似 struct student students50; 结构数组结构数组students,它有,它有50个数组元素,从个数组元素,从 students0到到students49,每个数组元素,每个数组元素 都是一个结构类型都是一个结构类型struct student的变量的变量 9.2.2 结构数组操作结构数组操作 9.2.2 结构数组操作结构数组操作 n结构数组的初始化结构数组的初始化 struct student students50 = 101,zhang, 76, 85, 78 , 102, wan
19、g, 83, 92, 86 ; students0101Zhang768578 students1102Wang839286 students49 n结构数组元素的成员引用结构数组元素的成员引用 ,其格式为:,其格式为: 结构数组名结构数组名下标下标 . 结构成员名结构成员名 n使用方法与同类型的变量完全相同:使用方法与同类型的变量完全相同: studentsi.num = 101; strcpy(, zhang); studentsi = studentsk 9.2.2 结构数组操作结构数组操作 9.3 修改学生成绩修改学生成绩 9.3.1 程序解析程序解析 9.
20、3.2 结构指针的概念结构指针的概念 9.3.3 结构指针作为函数参数结构指针作为函数参数 9.3.1程序解析程序解析 例例9-3 输入输入n(n50)个学生的成绩信息,再输个学生的成绩信息,再输 入一个学生的学号、课程以及成绩,在自定入一个学生的学号、课程以及成绩,在自定 义函数中修改该学生指定课程的成绩。义函数中修改该学生指定课程的成绩。 int main(void)int main(void) int course, i, n, num, pos, score;int course, i, n, num, pos, score; struct student struct student
21、 students50students50; /; /* * 定义结构数组定义结构数组 * */ / / /* * 输入输入n n个学生信息个学生信息 * */ / / /* * 输入待修改学生信息输入待修改学生信息 * */ / / /* *调用函数,修改学生成绩调用函数,修改学生成绩* */ / pos = update_score(pos = update_score(studentsstudents, n, num, course, score);, n, num, course, score); / /* *输出修改后的学生信息输出修改后的学生信息* */ ./ . 9.3.1程序解
22、析程序解析 /* 自定义函数,修改学生成绩自定义函数,修改学生成绩 */ int update_score(struct student *p, int n, int num, int course, int score) int i,pos; for(i = 0; i num = num) break; if(i math = score; break; case 2: p-english = score; break; case 3: p-computer = score; break; pos = i; /* 被修改学生在数组中的下标被修改学生在数组中的下标 */ else /* 无此学
23、号无此学号 */ pos = -1; return pos; 9.3.2结构指针的概念结构指针的概念 n指针可以指向任何一种变量,而结构变量指针可以指向任何一种变量,而结构变量 也是也是C语言中的一种合法变量,因此,指语言中的一种合法变量,因此,指 针也可以指向结构变量,这就是结构指针。针也可以指向结构变量,这就是结构指针。 n结构指针就是指向结构类型变量的指针结构指针就是指向结构类型变量的指针 9.3.2结构指针的概念结构指针的概念 struct student s1 = 101, zhang, 78, 87, 85, *p; p = 101 zhang 788785 P 9.3.2结构指针
24、的概念结构指针的概念 n结构指针的使用结构指针的使用 n(1) 用用*p访问结构成员。如访问结构成员。如: (*p).num = 101; n(2) 用指向运算符用指向运算符“-”访问指针指向的结构成访问指针指向的结构成 员。如:员。如: p-num = 101; 当当p指向结构变量指向结构变量s1时,下面时,下面 三条语句的效果是一样的:三条语句的效果是一样的: s1.num = 101; (*p).num = 101; p-num = 101; 9.3.3结构指针作为函数参数结构指针作为函数参数 n结构指针的操作是非常灵活的,如果将结构结构指针的操作是非常灵活的,如果将结构 指针作为函数的参数,可以完成比基本类型指针作为函数的参数,可以完成比基本类型 指针更为复杂的操作。指针更为复杂的操作。 n例例9-3 main: pos = update_s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- PowerPoint教学设计 第六节 在幻灯片中插入艺术字
- 2026学年上海市三年级数学期末模考难点突破题(详细参考解析)详细答案和解析
- 广东省佛山市S6高质量发展联盟2025-2026学年高二上学期期中联考物理试题(解析版)
- 2026年全国施工员之装饰施工专业管理实务考试黑金提分题详细参考解析
- 钻探司机与钻工岗位危险源辨识及安全防护培训
- 登高证的试题分析及答案
- 机电区通风机司机安全风险分级管控与危险源辨识培训
- 健康提升与关爱承诺函(5篇)
- 筑就心理健康的堡垒小学全学段心理健康专题班会课件
- 中职语文应用文写作教学中职业素养的培养路径课题报告教学研究课题报告
- 2025春季学期国开电大专科《行政组织学》一平台在线形考(形考任务1至5)试题及答案
- 读后续写“五感”景色描写课件-高三下学期英语二轮复习专项
- 【教师共享】《铃儿响叮当》参考课件-朱媛媛
- 宗白华生命美学思想研究
- 高中化学选择性必修3 教材习题答案
- 《运营管理 第7版》课件全套 马风才 第01-15章 运营管理概论- 互联网运营
- DB11-T 751-2010 住宅物业服务标准
- 运动和脂肪代谢
- 中建盘扣式悬挑脚手架施工方案
- 电站压力式除氧器安全技术规定
- GB/T 30819-2024机器人用谐波齿轮减速器
评论
0/150
提交评论