C语言电子教案第9章__结构体与共用体课件

PPT
  • 阅读 57 次
  • 下载 0 次
  • 页数 31 页
  • 大小 127.500 KB
  • 2022-11-13 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档25.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
C语言电子教案第9章__结构体与共用体课件
可在后台配置第一页与第二页中间广告代码
C语言电子教案第9章__结构体与共用体课件
可在后台配置第二页与第三页中间广告代码
C语言电子教案第9章__结构体与共用体课件
可在后台配置第三页与第四页中间广告代码
C语言电子教案第9章__结构体与共用体课件
C语言电子教案第9章__结构体与共用体课件
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 31
  • 收藏
  • 违规举报
  • © 版权认领
下载文档25.00 元 加入VIP免费下载
文本内容

【文档说明】C语言电子教案第9章__结构体与共用体课件.ppt,共(31)页,127.500 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-7147.html

以下为本文档部分文字说明:

第9章结构体与共用体1.理解数组、结构体、共用体的区别;2.掌握结构体定义和成员引用的方法;3.学会利用指针灵活地处理结构体数据;4.掌握结构体数组的处理方法;5.掌握链表的概念和处理方法。第9章结构体与共用体9.1结构体类型与结构体变量的定义9.2结构体变量的引用与初

始化9.3结构体数组9.4指向结构体类型数据的指针9.5用typedef定义已有类型的别名9.6链表处理──结构指针的应用9.7共用体和枚举类型9.1结构体类型与结构体变量的定义结构体类型,是一种复合的数据类型,相当于其它高

级语言或数据库中的”记录”类型,也可以当作是面向对象程序设计中类结构的原始模型。定义结构体是用struct关键字和一组定义各种数据段的语句块的组合体,方式如下:struct结构体类型名/*struct是结构体类型关

键字*/{数据类型数据项1;数据类型数据项2;…………数据类型数据项n;};9.1结构体类型与结构体变量的定义定义一个存储日期的结构体类型:structdate/*日期结构体类型:由年、月、日三项组成*/{intyear;intmonth;i

ntday;};在定义结构体时,一定要注意在最后加一个分号。“结构体类型名”和”数据项”的命名规则,与一般变量名相同。数据类型相同的数据项,既可逐个、逐行分别定义,也可合并成一行定义。9.1结构体类型与结构体变量的定义结构体类型中的数据项的定义十分灵活。既

可以是基本数据类型,又可以是数组,还允许是另一个已经定义的结构体类型。例如定义一个包含学生信息的结构体类型:structstudent{charno[7];charname[9];charsex[4];structdatebirthday;};变量内存地址noFFDCnam

eFFE3sexFFECbirthday.yearFFF0birthday.monthFFF2birthday.dayFFF49.1结构体类型与结构体变量的定义9.1.2结构体变量定义用户自己定义的结构体类型,与系统定义的标

准类型(int、char等)一样,可用来定义结构体变量的类型。结构体变量的定义方式有两种:(1)间接定义法:先定义结构体类型、再定义结构体变量结构体变量的类型名有两部分组成:一是关键字struct;二是程序员定义的结构体名,一般形式为:struct结构体名

结构体变量名9.1结构体类型与结构体变量的定义(2)直接定义法:在定义结构体类型的同时,定义结构体变量同时定义结构体类型及其结构体变量的一般格式如下:struct[结构体类型名]{……}结构体变量表;要是定义多个。可以用逗号表达式分开。9.2结构体变量的引用与初始化9.2.1结构体变量的

引用规则结构体类型变量的各成员不能用结构体名一起引用,必须单独引用,成员运算符”.”具有最高优先级。对于结构体变量,要通过成员运算符”.”,逐个访问其成员,且访问的格式为:结构体变量.成员/*其中的”.”是成员运算符*/要引

用结构体变量student1中的学号no,可以用student1.no来表示;student1.name表示的意思是引用结构体变量student1中的name成员,等等。9.2结构体变量的引用与初始化如果结构体成员本身又是结构体类型的,则可继续使用成员运算符取结构体成员的结构体成员,逐级向下,

引用最低一级的成员。程序只能对最低一级的成员进行运算。此时的引用格式扩展为:结构体变量.成员.子成员.….最低1级子成员例如,引用结构体变量student1中的birthday成员的格式分别为:student1.birthday.y

ear9.2结构体变量的引用与初始化9.2.2结构体变量的初始化结构体变量初始化的格式,与一维数组相似:结构体变量={初值表}初值的数据类型,应与结构体变量中相应成员所要求的一致,否则会出错。如果某成员本身又是

结构体类型,则该成员的初值为一个初值表。例如:student1={“000102”,“Zhangsan”,“nan”,{1990,9,20}}。必须按结构体定义的顺序赋值。不要颠倒了。9.2结构体变量的引用与初始化例9.2利用例9.

1中定义的结构体类型头文件,定义一个结构体变量student1,用于存储和显示一个学生的基本情况。程序运行结果:No:000102Name:ZhangsanSex:nanBirthday:1990-9-209.3结

构体数组结构体数组的每一个元素,都是结构体类型数据,均包含结构体类型的所有成员。与结构体变量的定义相似,结构体数组的定义也分直接定义和间接定义两种方法,只需用下标运算符”[]”说明为数组即可。与普通数组一样,结构数组也可在定义时进行初始化。初始化的格式为:结

构体数组[n]={{初值表1},{初值表2},...,{初值表n}}9.3结构体数组例9.3利用例9.1中定义的结构体类型structstudent,定义一个结构数组student2,用于存储和显示三个

学生的基本情况。程序运行结果:No.NameSexBirthday000102Zhangsannan1990-9-20000105Lisinan1990-9-15000112Wangwunv1990-3-109.4指向结构体类型数据的指针结构体变量在内存中的起始地址

称为结构体变量的指针。与结构体变量的定义相似,指向结构体变量的指针的定义也分直接定义和间接定义两种方法,只需在指针变量前加指针运算符”*”说明为指针即可。例如:structstudent*pointer9.4指向结构体类型数据的指针通过指向结构体

变量的指针来访问结构体变量的成员,与直接使用结构体变量的效果一样。一般地说,如果指针变量pointer已指向结构体变量student1(pointer=&student1),则以下三种形式等价:(1)stu

dent1.成员(2)pointer->成员/*”->“为指向运算符*/(3)(*pointer).成员/*“*pointer”外面的括号不能省!*/9.4指向结构体类型数据的指针例9.4使用指向结构体变量的指针来访问结构体变量的各个成员。#i

nclude”struct.h”structstudentstudent1={“000102”,”Zhangsan”,”nan”,{1990,9,20}};main(){structstudent*pointer=&student1;printf(“No:%s

\n”,pointer->no);printf(“Name:%s\n”,pointer->name);printf(“Sex:%s\n”,pointer->sex);printf(“Birthday:%d-%d

-%d\n”,pointer->birthday.year,pointer->birthday.month,pointer->birthday.day);}9.4指向结构体类型数据的指针9.4.2指向结构数组的指针如果指针变

量pointer已指向某结构数组,则pointer+1指向结构数组的下一个元素,而不是当前元素的下一个成员。另外,如果指针变量pointer已经指向一个结构体变量(或结构数组),就不能再使之指向结构体变量(或结构数组元素)的某一成

员。9.4指向结构体类型数据的指针例9.5使用指向结构数组的指针来访问结构数组。#include“struct.h”/*定义并初始化一个外部结构数组student*/structstudentstudent2[3]={{“000102

”,”Zhangsan”,”nan”,{1990,5,20}},{“000105”,”Lisi”,”nan”,{1990,9,15}},{“000112”,”Wangwu”,”nv”,{1990,3,10}}};voidmain()

{structstudent*pointer=student2;/*没有使用取地址运算符”&”*/inti;/*打印表头*/printf("No.NameSexBirthday\n");/*输出结构数组内容*/for(i=0;i<3;i++,pointer++){printf(“%-7s

%-9s%-4s”,pointer->no,pointer->name,pointer->sex);printf(“%4d-%2d-%2d\n”,pointer->birthday.year,pointer->birthday.

month,pointer->birthday.day);}}9.4指向结构体类型数据的指针9.4.3指向结构数据的指针作函数参数指向结构体的指针变量与普通指针变量一样既可以作为函数的形参,也可以作函数的实参。被调用函数虽然不能改变实参指针变量的值,但可以改变实参指针变量

所指向的结构体变量的值。例9.6用函数调用方式,改写例9.5:编写一个专门的显示函数display(),通过主函数调用来实现显示。9.5用typedef定义已有类型的别名typedef与#define有相似之处,但二者是不同的:前者是由编译器在编译时处理的;后者是

由编译预处理器在编译预处理时处理的,而且只能作简单的字符串替换。定义已有类型别名的方法如下:(1)按定义变量的方法,写出定义体;(2)将变量名换成别名;(3)在定义体最前面加上typedef。9.5用typedef定义已有类型的别名例9.7给实型f

loat定义1个别名REAL。typedeffloatREAL;voidmain(){floatf=12.3;REALr=23.4;printf(“floatf=%f\n”,f);printf(“REALr=%f\n”,r);

}9.5用typedef定义已有类型的别名例9.8对结构体数组以姓名作为关键字按字母表顺序排序程序运行结果:Beforesort:No.NameSexBirthday000102Zhangsannan1990-5-20000105Lisinan1990-9-15

000112Wangwunv1990-3-10Aftersort:No.NameSexBirthday000105Lisinan1990-9-15000112Wangwunv1990-3-10000102Zhangsa

nnan1990-5-209.6链表处理──结构指针的应用9.6.1链表结构一个单链表有若干个相同的节点组成,每个结点由2个部分组成:数据域:存储结点本身的信息。指针域:指向后继结点的指针。第一个叫表头结点,表头节点一般不存放数据;最后一个叫尾节点,尾结点的指针域置

为”NULL(空)”,作为链表结束的标志。9.6链表处理──结构指针的应用9.6.2创建一个新链表9.6.3对链表的插入操作9.6.4对链表的删除操作9.7共用体和枚举类型9.7.1共用体使几个不同的变量占用同一段内

存空间的结构称为共用体或联合体。定义──与结构体类型的定义类似union共用类型名{成员列表;};9.7共用体和枚举类型3.共用变量的定义──与结构体变量的定义类似(1)间接定义──先定义类型、再定义

变量例如,定义data共用类型变量un1,un2,un3的语句如下:uniondataun1,un2,un3;(2)直接定义──定义类型的同时定义变量例如,uniondata{inti;charch;floatf;}un1,un2,un3;9.7共用体和枚举类型共用变量占用的

内存空间,等于最长成员的长度,而不是各成员长度之和。例如,共用变量un1、un2和un3,在16位操作系统中,占用的内存空间均为4字节(不是2+1+4=7字节)。共用变量的引用──与结构体变量一样,也只能逐个引用共用变量的成员。例如,访问共用变量un1各成员的

格式为:un1.i、un1.ch、un1.f。9.7共用体和枚举类型特点(1)系统采用覆盖技术,实现共用变量各成员的内存共享,所以在某一时刻,存放的和起作用的是最后一次存入的成员值。例如,执行un1.i=1,un

1.ch='c',un1.f=3.14后,un1.f才是有效的成员。(2)由于所有成员共享同一内存空间,故共用变量与其各成员的地址相同。例如,&un1=&un1.i=&un1.ch=&un1.f。(3

)不能对共用变量进行初始化(注意:结构体变量可以);也不能将共用变量作为函数参数,以及使函数返回一个共用数据,但可以使用指向共用变量的指针。(4)共用类型可以出现在结构体类型定义中,反之亦然。9.7共用体和枚举类型9.7.2枚举类型如果一个变量的值只有几种可能,我们就可以用枚举类型来表示。就是

将变量的值限制在枚举出来的几个值范围内,如果给它赋予了一个其它的值,就会出现错误提示,便于检查。1.枚举类型的定义enum枚举类型名{取值表};例如,enumweekdays{Sun,Mon,Tue,Wed,Thu,Fri,Sat};9.7共用体和枚举类型

2.枚举变量的定义──与结构体变量类似(1)间接定义例如,enumweekdaysworkday;(2)直接定义例如,enum[weekdays]{Sun,Mon,Tue,Wed,Thu,Fri,Sat}workday;9.7共用体和枚举类型3.说明(1)枚举类型仅适应于取值有限的数据。例如,根

据现行的历法规定,1周7天,1年12个月。(2)取值表中的值称为枚举元素,其含义由程序解释。例如,不是因为写成”Sun”就自动代表”星期天”。事实上,枚举元素用什么表示都可以。(3)枚举元素作为常量是有值的──定义时的顺

序号(从0开始),所以枚举元素可以进行比较,比较规则是:序号大者为大!例如,上例中的Sun=0、Mon=1、……、Sat=6,所以Mon>Sun、Sat最大。(4)枚举元素的值也是可以人为改变的:在定义时由程序指定。例如,如果enumweekdays{Sun=7,Mon=1,Tue

,Wed,Thu,Fri,Sat};则Sun=7,Mon=1,从Tue=2开始,依次增1。

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?