C语言结构体文档资料

上传人:痛*** 文档编号:179318913 上传时间:2022-12-31 格式:PPT 页数:33 大小:762KB
收藏 版权申诉 举报 下载
C语言结构体文档资料_第1页
第1页 / 共33页
C语言结构体文档资料_第2页
第2页 / 共33页
C语言结构体文档资料_第3页
第3页 / 共33页
资源描述:

《C语言结构体文档资料》由会员分享,可在线阅读,更多相关《C语言结构体文档资料(33页珍藏版)》请在装配图网上搜索。

1、1Chap 9 结构结构 9.1 输出平均分最高的学生信息输出平均分最高的学生信息9.2 学生成绩排序学生成绩排序9.3 修改学生成绩修改学生成绩2本章要点本章要点n什么是结构?结构与数组有什么差别?什么是结构?结构与数组有什么差别?n有几种结构的定义形式,它们之间有什么不同?有几种结构的定义形式,它们之间有什么不同?n什么是结构的嵌套?什么是结构的嵌套?n什么是结构变量和结构成员变量?如何引用结构什么是结构变量和结构成员变量?如何引用结构成员变量?成员变量?n结构变量如何作为函数参数使用?结构变量如何作为函数参数使用?n什么是结构数组?如何定义和使用结构数组?什么是结构数组?如何定义和使用结

2、构数组?n什么是结构指针?它如何实现对结构分量的操作?什么是结构指针?它如何实现对结构分量的操作?n结构指针是如何作为函数的参数的?结构指针是如何作为函数的参数的?39.1输出平均分最高的学生信息输出平均分最高的学生信息 9.1.1 程序解析程序解析9.1.2 结构的概念与定义结构的概念与定义9.1.3 结构的嵌套定义结构的嵌套定义9.1.4 结构变量的定义和初始化结构变量的定义和初始化9.1.5 结构变量的使用结构变量的使用49.1.1 程序解析程序解析例例9-1 输出平均分最高的学生信息输出平均分最高的学生信息 n假设学生的基本信息包括学号、姓名、三假设学生的基本信息包括学号、姓名、三门课

3、程成绩以及个人平均成绩。输入门课程成绩以及个人平均成绩。输入 个个学生的成绩信息,学生的成绩信息,计算并输出平均分最高计算并输出平均分最高的学生信息。的学生信息。59.1.1 程序解析程序解析#includestruct student /*学生信息结构定义学生信息结构定义*/int num;/*学号学号*/char name10;/*姓名姓名*/int computer,english,math;/*三门课程成绩三门课程成绩*/double average;/*个人平均成绩个人平均成绩*/;6int main(void)int i,n;struct student s1,max;/*定义结构

4、变量定义结构变量*/printf(Input n:);scanf(%d,&n);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.num,s1.name,&s1.math,&s1.english,&puter);s1.average=(s1.math+s1.english+puter)/3.0;if(i=1)max=s1;/*结构变量结构变量 操作操作*/if(max.average s1.average)max=s1;pr

5、intf(num:%d,name:%s,average:%.2lfn,max.num,max.name,max.average);return 0;79.1.2 结构的概念与定义结构的概念与定义n使用结构来表示学生信息:使用结构来表示学生信息:struct student int num;/*学号学号*/char name10;/*姓名姓名*/int computer,english,math;/*三门课程成绩三门课程成绩*/double average;/*个人平均成绩个人平均成绩*/;n结构是结构是C语言中一种新的语言中一种新的构造数据类型构造数据类型,它能够,它能够把有内在联系的把有内在

6、联系的不同类型的数据不同类型的数据统一成一个整体,统一成一个整体,使它们相互关联使它们相互关联n结构又是结构又是变量的集合变量的集合,可以按照对基本数据类型,可以按照对基本数据类型的操作方法单独使用其变量成员。的操作方法单独使用其变量成员。结构与数组比较:结构与数组比较:都是构造类型,是多个变都是构造类型,是多个变量的集合量的集合数组成员类型相同,结构数组成员类型相同,结构成员类型不同成员类型不同89.1.2 结构的概念与定义结构的概念与定义n结构类型定义的一般形式为:结构类型定义的一般形式为:关键字关键字struct和它后面和它后面的结构名一起组成一的结构名一起组成一个新的数据类型名个新的数

7、据类型名 99.1.2 结构的概念与定义结构的概念与定义n例如,平面坐标结构:例如,平面坐标结构:struct point float x;float y;虽然虽然x、y的类型相同,也的类型相同,也可以用数组的方式表示,可以用数组的方式表示,但采用结构进行描述,更但采用结构进行描述,更贴近事物本质,从而增加贴近事物本质,从而增加了程序的可读性,使程序了程序的可读性,使程序更易理解更易理解结构适合用于描述具有多结构适合用于描述具有多个属性的实体或对象个属性的实体或对象109.1.3 结构的嵌套定义结构的嵌套定义n在我们的实际生活中,一个较大的实体可能由多在我们的实际生活中,一个较大的实体可能由多

8、个成员构成,而这些成员中有些又有可能是由一个成员构成,而这些成员中有些又有可能是由一些更小的成员构成。些更小的成员构成。n在学生信息中可以再增加一项:在学生信息中可以再增加一项:“通信地址通信地址”,它又可以再划分为:城市、街道、门牌号、邮政它又可以再划分为:城市、街道、门牌号、邮政编码。编码。学号学号姓名姓名计算机计算机英语英语数学数学平均平均成绩成绩119.1.3 结构的嵌套定义结构的嵌套定义n由此,我们可以对其结构类型进行如下重由此,我们可以对其结构类型进行如下重新定义:新定义:struct address char city10;char street20;int code;int z

9、ip;struct nest_student int num;char name10;struct address addr;int computer,english,math;double average;在定义嵌套的结构类型时,必须先定义在定义嵌套的结构类型时,必须先定义成员的结构类型,再定义主结构类型。成员的结构类型,再定义主结构类型。129.1.4 结构变量的定义和初始结构变量的定义和初始化化n在语言中定义结构变量的方式有三种:在语言中定义结构变量的方式有三种:1.单独定义单独定义:先定义一个结构类型,再定义一个具:先定义一个结构类型,再定义一个具有这种结构类型的变量有这种结构类型的变

10、量 struct student int num;/*学号学号*/char name10;/*姓名姓名*/int computer,english,math;/*三门课程成绩三门课程成绩*/double average;/*个人平均成绩个人平均成绩*/;struct student s1,s2;139.1.4结构变量的定义和初始化结构变量的定义和初始化2.混合定义混合定义:在定义结构类型的同时定义结构变量:在定义结构类型的同时定义结构变量 struct student int num;/*学号学号*/char name10;/*姓名姓名*/int computer,english,math;/

11、*三门课程成绩三门课程成绩*/double average;/*个人平均成绩个人平均成绩*/s1,s2;3.无类型名定义无类型名定义:在定义结构变量时省略结构名:在定义结构变量时省略结构名struct int num;/*学号学号*/char name10;/*姓名姓名*/int computer,english,math;/*三门课程成绩三门课程成绩*/double average;/*个人平均成绩个人平均成绩*/s1,s2;149.1.4结构变量的定义和初始化结构变量的定义和初始化n结构变量的初始化结构变量的初始化 struct student s1=101,Zhang,78,87,85;

12、159.1.5 结构变量的使用结构变量的使用1.结构变量成员的引用结构变量成员的引用n在在C语言中,使用结构成员操作符语言中,使用结构成员操作符“.”来引用结来引用结构成员,格式为:构成员,格式为:结构变量名结构变量名结构成员名结构成员名s1.num=101;strcpy(s1.name,Zhang);nest_s1.addr.zip=310015;169.1.5 结构变量的使用结构变量的使用2.结构变量的整体赋值结构变量的整体赋值n具有相同类型的结构变量可以直接赋值具有相同类型的结构变量可以直接赋值。赋值时,将赋值符号右边结构变量的每一赋值时,将赋值符号右边结构变量的每一个成员的值都赋给了左

13、边结构变量中相应个成员的值都赋给了左边结构变量中相应的成员。的成员。struct student s1=101,Zhang,78,87,85,s2;s2=s1;179.1.5 结构变量的使用结构变量的使用3.结构变量作为函数参数结构变量作为函数参数n如果一个如果一个C C程序的规模较大,功能较多,必然需程序的规模较大,功能较多,必然需要以函数的形式进行功能模块的划分和实现要以函数的形式进行功能模块的划分和实现n如果程序中含有结构数据,则就可能需要用结如果程序中含有结构数据,则就可能需要用结构变量作为函数的参数或返回值,以在函数间构变量作为函数的参数或返回值,以在函数间传递数据。传递数据。n例:

14、例:double count_average(struct student s)main:s1.average=count_average(s1);特点特点:可以传递多个数据:可以传递多个数据且参数形式较简单且参数形式较简单 缺点缺点:对于成员较多的大:对于成员较多的大型结构,参数传递时所型结构,参数传递时所进行的结构数据复制使进行的结构数据复制使得效率较低得效率较低 189.2 学生成绩排序学生成绩排序 n9.2.1 程序解析程序解析n9.2.2 结构数组操作结构数组操作199.2.1 程序解析程序解析例例9-2 输入输入n(n50)个学生的成绩信息,按照学生的)个学生的成绩信息,按照学生的

15、个人平均成绩从高到低输出他们的信息。个人平均成绩从高到低输出他们的信息。struct student students50,temp;/*定义结构数组定义结构数组*/*输入输入*/209.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;/*输出排序后的信

16、息输出排序后的信息*/printf(numt namet averagen);for(i=0;i n;i+)printf(%dt%st%.2lfn,studentsi.num,studentsi.name,studentsi.average);21n一个结构变量只能表示一个实体的信息,一个结构变量只能表示一个实体的信息,如果有许多相同类型的实体,就需要使用如果有许多相同类型的实体,就需要使用结构数组。结构数组。n结构数组是结构与数组的结合,与普通数结构数组是结构与数组的结合,与普通数组的不同之处在于每个数组元素都是一个组的不同之处在于每个数组元素都是一个结构类型的变量。结构类型的变量。9.2.

17、2 结构数组操作结构数组操作22n结构数组的定义方法与结构变量类似结构数组的定义方法与结构变量类似 struct student students50;结构数组结构数组students,它有,它有50个数组元素,从个数组元素,从students0到到students49,每个数组元素,每个数组元素都是一个结构类型都是一个结构类型struct student的变量的变量9.2.2 结构数组操作结构数组操作239.2.2 结构数组操作结构数组操作n结构数组的初始化结构数组的初始化 struct student students50=101,zhang,76,85,78,102,wang,83,92

18、,86;students0101Zhang768578students1102Wang839286students4924n结构数组元素的成员引用结构数组元素的成员引用,其格式为:,其格式为:结构数组名结构数组名下标下标.结构成员名结构成员名 n使用方法与同类型的变量完全相同:使用方法与同类型的变量完全相同:studentsi.num=101;strcpy(studentsi.name,zhang);studentsi=studentsk 9.2.2 结构数组操作结构数组操作259.3 修改学生成绩修改学生成绩 9.3.1 程序解析程序解析 9.3.2 结构指针的概念结构指针的概念9.3.3

19、结构指针作为函数参数结构指针作为函数参数269.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 students50students50;/;/*定义结构数组定义结构数组 *

20、/*输入输入n n个学生信息个学生信息 */*输入待修改学生信息输入待修改学生信息 */*调用函数,修改学生成绩调用函数,修改学生成绩*/pos=update_score(pos=update_score(studentsstudents,n,num,course,score);,n,num,course,score);/*输出修改后的学生信息输出修改后的学生信息*/./.279.3.1程序解析程序解析/*自定义函数,修改学生成绩自定义函数,修改学生成绩*/int update_score(struct student*p,int n,int num,int course,int score)

21、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 /*无此学号无此学号*/pos=-1;return pos;289.3.2结构指针的概念结构指针的概念n指针可以指向任何一种变量,而结构变量指针可以指向任何一种变量,而结构变量也是也是C语言中的一种合法变量,因此,指语言中的一种合法变量,因此,指针也可以指向结构变量,这就是结构指针。针也可以

22、指向结构变量,这就是结构指针。n结构指针就是指向结构类型变量的指针结构指针就是指向结构类型变量的指针299.3.2结构指针的概念结构指针的概念struct student s1=101,zhang,78,87,85,*p;p=&s1;101 zhang 788785P309.3.2结构指针的概念结构指针的概念n结构指针的使用结构指针的使用n(1)用用*p访问结构成员。如访问结构成员。如:(*p).num=101;n(2)用指向运算符用指向运算符“-”访问指针指向的结构成访问指针指向的结构成员。如:员。如:p-num=101;当当p指向结构变量指向结构变量s1时,下面时,下面三条语句的效果是一样

23、的:三条语句的效果是一样的:s1.num=101;(*p).num=101;p-num=101;319.3.3结构指针作为函数参数结构指针作为函数参数n结构指针的操作是非常灵活的,如果将结构结构指针的操作是非常灵活的,如果将结构指针作为函数的参数,可以完成比基本类型指针作为函数的参数,可以完成比基本类型指针更为复杂的操作。指针更为复杂的操作。n例例9-3main:pos=update_score(students,n,num,course,score);自定义函数:自定义函数:int update_score(struct student*p,int n,int num,int course,

24、int score)函数函数update_score运行完运行完毕返回主函数后,主函数毕返回主函数后,主函数中的结构数组中的结构数组students中中的值已被修改的值已被修改 329.3.3结构指针作为函数参数结构指针作为函数参数n与结构变量作为函数参数相比,用结构指针作为与结构变量作为函数参数相比,用结构指针作为函数参数的函数参数的效率更高效率更高。n就例就例-3-3 而言,而言,在函数在函数update_score()update_score()中需要中需要修改主函数中结构数组修改主函数中结构数组studentsstudents的数据,根据的数据,根据第第 8 8章介绍的知识,在此处也只

25、能使用指针作为函数章介绍的知识,在此处也只能使用指针作为函数参数的方式才能通过间接访问操作来实现程序功参数的方式才能通过间接访问操作来实现程序功能。能。33本章总结本章总结n结构的概念与定义(含嵌套结构)结构的概念与定义(含嵌套结构)n结构变量结构变量定义定义初始化初始化使用(成员引用、相互赋值、作为函数参数)使用(成员引用、相互赋值、作为函数参数)n结构数组结构数组定义、初始化、结构数组成员引用定义、初始化、结构数组成员引用n结构指针结构指针概念概念结构指针操作结构指针操作结构指针作为函数参数结构指针作为函数参数能够根据实际情况合理定能够根据实际情况合理定义结构义结构能够使用结构变量与结构能够使用结构变量与结构数组进行熟练编程数组进行熟练编程 掌握结构指针的操作,并掌握结构指针的操作,并应用于函数参数传递应用于函数参数传递

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

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

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


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