版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言程序设计教案第8章结构体和共用体授课内容第8章结构体和共用体任课教师授课形式理实一体任课班级教学方法本节采用以教师为主导,在教学过程中同时采用提问法、讨论法和互动式教学方法。教学重点(1)结构体和共用体的概念。(2)结构体变量的引用和初始化的方法。(3)了解枚举类型的概念。教学难点(1)结构体数组的基本应用。(2)枚举类型的基本应用。教学目标教学目标(1)熟练掌握结构体的定义和应用。(2)熟练掌握共用体的定义和应用。技能目标(1)具备使用结构体处理信息的能力。(2)具备使用共用体处理信息的能力。素质目标(1)通过结构体的学习,让同学们明白每一个集体都需要每个成员遵守相应的规则。(2)通过结构体的学习,培养同学们细致钻研的学风、求真务实的品德。(3)通过共用体的学习,增强同学们之间互帮互助,常怀感恩之心。思政目标教学步骤及内容教学步骤及内容教学步骤及内容教学步骤及内容教学步骤及内容教学步骤及内容教学步骤及内容教学步骤及内容教学步骤及内容:教学过程:复习旧课导出新课讲授新课8.1结构体8.1.1结构体类型变量的定义与引用1.结构体概述前面的课程学习了一些简单数据类型(整型、实型、字符型)的定义和应用,还学习了数组(一维、二维)的定义和应用,这些数据类型的特点是:要定义某一特定数据类型,就限定该类型变量的存储特性和取值范围。对简单数据类型来说,既可以定义单个变量,也可以定义数组。而数组的全部元素都具有相同的数据类型,或者说是相同数据类型的一个集合。在日常生活中,我们会遇到一些需要填写的登记表,例如,住宿表、成绩表、通信地址等。在这些表中,填写的数据是不能用同一种数据类型来描述,在住宿表中通常会登记上姓名、性别、身份证号码等;在通信地址表中会填写姓名、邮箱地址、电话号码等项目。这些表中集合了各种数据,无法用前面学过的任何一种数据类型完全描述,因此C语言引入一种能集中表示不同数据类型于一体的数据类型——结构体类型。由一系列具有相同类型或不同类型的数据构成的数据集合,被称为结构体。结构体是这些元素的集合,这些元素称为结构体的成员。结构体类型的变量可以拥有不同数据类型成员,是不同数据类型成员的集合。“结构体”是用同一个名字引用的相关变量的集合。结构体中可包含多种不同类型数据的变量,这些不同类型数据的变量称为结构体的“成员”,每一个成员可以是一个基本数据类型或者又是一个构造类型。2.结构体类型的定义每个结构体有一个名字,称为结构体名,所有成员都组织在该名字之下。一个结构体由若干成员组成,它是组成结构体的要素,每个成员的数据类型可以不同,也可以相同。每个成员有自己的名字,称为结构体成员名。结构体类型的定义的一般格式如下:struct结构体名称{数据类型成员1的名字;数据类型成员2的名字;数据类型成员3的名字;……};结构体名是由用户指定的,又称“结构体标记”,符合标识符命名规范。大括号内是该结构体所包含的子项,即结构体成员。3.结构体变量的定义结构体类型定义好后,只定义了一个变量的类型,系统并没有给变量分配存储空间,还需要给结构体定义变量,结构体变量的定义方法有以下3种方式:(1)间接定义。此方法中,需要先定义结构体类型,再定义结构体变量。例如,要定义日期结构体变量,需要先定义好一个名为date的结构体类型,再定义两个名为date1,date2的结构体变量。(2)直接定义。此方法中,定义结构体类型的同时定义结构体类型变量。4.结构体类型变量的引用定义了结构体变量后,可以引用该变量。要对结构体变量进行赋值、存取或运算,实质上是对结构体成员的操作。访问结构体变量的成员,需要使用“成员运算符”(也称为“圆点运算符”),其一般形式如下:结构体类型变量名.成员名例如,已定义了date为struct类型的结构体变量,则date.year表示date变量中year成员,在程序中可以用date.year=2022;对变量的成员赋值。5.结构体类型变量的初始化在定义结构体变量的同时,可以对其进行赋值,即对其初始化。结构体类型变量的初始化一般格式如下:struct结构体名结构体变量名={初始数据};其中,数据与数据之间用逗号隔开;数据的个数要与被赋值的结构体成员的个数相等;数据类型要与相应结构体成员的数据类型一致。由于结构体类型变量汇集了各类不同数据类型的成员,所以结构体类型变量的初始化就略显复杂。(1)一次性给结构体变量的成员赋初值。由于每一个结构体变量都有一组成员,这就如同数组有若干个元素一样,所以这种赋值方式有点像数组的赋值,将成员值用“{”和“}”括起来。(2)分散性地给结构体变量的成员赋值。可以用运算符操纵结构体成员对其赋值。8.1.2结构体数组一个结构体变量中可存放一组数据。若一个班级有30个学生,则这30个学生的信息都可以用结构体变量来表示,它们具有相同的数据类型,因此,可以用数组来表示,这就是结构体数组。结构体数组中每个数组元素都是一个结构体类型的变量,它们都分别包括各个成员项。1.结构体数组的定义结构体数组必须先定义,后引用。其定义形式与定义结构体变量的方法类似,只需说明其为数组即可。structstu{ intnum; charname[30]; charsex; intage; floatscore;}s[30]; 定义了一个结构体数组s,共有30个元素,s[0]~s[29],每个元素都具有structstu的结构形式。2.结构体数组的初始化结构体数组也可在定义的同时进行赋值,即对其进行初始化。例如,structstus[30]={{202101,"Wangyan",'M',18,89},{202102,"Lishan",'M',18,95},{202101,"Zhanghai",'F',18,78}};表示对结构体数组s[30]的前3个元素进行初始化,其他未被指定初始化的数值型数组元素成员被系统初始化为0,字符型数组元素成员被系统初始化为'\0'。3.结构体数组应用8.1.3结构体指针结构体指针是指向结构体变量的指针,该指针变量的值就是结构体变量的起始地址,其目标变量是一个结构体变量。1.指向结构体变量的指针指向结构体变量的指针变量的基类型必须与结构体变量的类型相同。例如,structstu*p;,定义指针变量p,指向structstu类型的变量。p并没有指向一个确定的存储单元,其值是一个随机值。为使p指向一个确定的存储单元,需要对指针变量进行初始化。例如,structstu*p=&s1;,定义指针p,指向结构体变量s1。C语言规定了两种用于访问结构体成员的运算符,一种是成员运算符,也称圆点运算符;另一种是指向运算符,也称箭头运算符,其一般格式如下:指向结构体的指针变量名->成员名例如,p->202207;使用指针p访问结构体成员。2.指向结构体数组的指针指向结构体对象的指针变量既可指向结构体变量,也可指向结构体数组中的元素。例如,定义一个结构体数组s[3],语句structstus[3],*p;p=s;可使结构体指针p指向该结构体数组的首地址。3.结构体指针的应用8.2共用体、枚举和typedef类型定义8.2.1共用体1.共用体类型的定义共用体也称为联合体,是一种将不同类型的数据组织在一起共同占用同一段内存的构造数据类型。同样都是将不同类型的数据组织在一起,但它与结构体不同的是,共用体是从同一起始地址开始存放成员的值,即让所有成员共享同一段内存单元。共用体与结构体的类型声明方法类似,只是使用关键数union。一般格式如下:union共用体名{ 数据类型 成员1的名字; 数据类型 成员2的名字; 数据类型 成员3的名字;……};2.共用体变量的定义共用体变量的定义与结构体变量的定义方式类似,也有3种方法。(1)先定义共用体类型后定义共用体变量。(2)在定义共用体类型的同时定义结构变量。这种定义方法是在定义出共用体类型的同时直接定义所需变量,好处是可以简化语句。(3)直接定义共用体变量。可以省略结构体类型名来定义一个结构体类型。3.共用体成员的引用及初始化对共用体变量的使用是通过对其成员的引用实现的,引用共用体变量成员一般格式如下:共用体变量名.成员名例如,x.b=10;给共用体变量x的成员b赋值为10。在使用共用体类型数据时应注意以下4个特点。(1)共用体变量与结构体变量不同的是,不能在定义的同时初始化,但可对第一个成员赋初值。例如,uniondatax={'A'};只为第一个成员赋初值,是合法的。uniondatax={'A',10,23.5};为全部成员赋值是错误的,因为各成员共用同一空间。(2)对于一个共用体变量来说,每次只能给一个成员赋值,不能同时给多个成员赋值。共用体变量的所有成员的首地址都相同,并且等于共用体变量的地址。(3)对共用体任何一个成员赋值都会导致共享区域数据发生变化,所以共用体只能保证有一个成员的值是有效的。(4)在共用体中,同一个内存段可用来存放几种不同类型的成员,但每一次只能存放其中一种,而不是同时存放所有的类型。也就是说,共用体变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原有的成员就会失去作用。8.2.2枚举类型若一个变量只有几种可能的取值,则可以将其定义为枚举类型。所谓“枚举”是指将变量可能的值一一列举出来,枚举变量的取值只限于枚举常量范围之内。1.枚举类型的定义枚举类型定义的一般格式如下:enum枚举类型名{枚举元素列表};其中,enum为关键字,表示定义一个枚举类型。枚举类型名必须为C语言合法的标识符。花括号内的标识符称为枚举元素或枚举常量,各枚举常量之间用逗号隔开,注意右大括号后的分号不能省略。例如,enumweek{SUN,MON,TUE,WED,THU,FRI,SAT};定义一个枚举类型week,SUN、MON、TUE、WED、THU、FRI、SAT称为枚举元素或枚举常量。2.枚举类型变量的定义(1)先定义枚举类型后定义枚举变量。与结构体或共用体类型变量定义的基本方法相似,这种方法先定义枚举类型,然后使用“enum枚举类型名”来定义这种类型的变量。例如,enumweek{SUN,MON,TUE,WED,THU,FRI,SAT}; /*定义week类型*/enumweekday; /*定义week类型的枚举变量day*/(2)在定义枚举类型的同时定义枚举变量。这种方法是在定义枚举类型的后面直接定义出该类型的变量,可以简化程序。enumweek{SUN,MON,TUE,WED,THU,FRI,SAT}day; /*定义week类型同时定义变量day*/(3)直接定义枚举类型的变量。这种定义方法可以省略枚举类型名,直接定义出枚举变量。但不能在其他位置再定义这种枚举类型的变量。enum{SUN,MON,TUE,WED,THU,FRI,SAT}day; /*定义枚举类型时直接定义变量day*/3.枚举变量的应用枚举变量只能取相应枚举类型列表中的各值。例如,enumweek{SUN,MON,TUE,WED,THU,FRI,SAT}day;day=WED;8.2.3typedef声明新类型名关键字typedef用于为系统固有的或自定义数据类型定义一个别名。数据类型的别名通常使用首字母大写的方式表示,以便与系统提供的标准类型标识符相区别。声明一个新类型名的一般格式为:typedef原类型名新类型名;其中,typedef为关键字,表示重定义。原类型名是C语言提供的任一种数据类型,可以是简单数据类型,也可以是构造数据类型;新类型名是代表原类型名的一个别名。C程序中不仅包括简单的类型,还包括了许多看起来比较复杂的类型。有些类型形式复杂,难以理解,容易写错,因此,C语言允许程序设计者用一个简单的名字代替复杂的类型形式。(1)命名一个新的类型名代表结构体类型。(2)命名一个新的类型名代表数组类型。(3)命名一个新的类型名代表指针类型。(4)命名一个新的类型名代表指向函数的指针类型。8.3常见错误分析8.3.1结构体类型声明时漏掉分号结构体类型声明是一条完整的语句,因此,大括号后面的分号不能少,初学者很容易忘记这一点。8.3.2混淆结构体数据类型和结构体变量要注意区别结构体数据类型和结构体变量,不能对结构体类型进行赋值。8.3.3结构体类型使用不当定义结构体类型变量时需要使用struct关键字,许多初学者容易遗漏这个关键字。8.4结构体与共用体应用实战8.4.1实战背景“一带一路”(TheBeltandRoad,B&R)是“丝绸之路经济带”和“21世纪海上丝绸之路”的简称,一带一路高举和平发展的旗帜,积极发展与沿线国家的经济合作伙伴关系,共同打造政治互信、经济融合、文化包容的利益共同体、命运共同体和责任共同体。截至2022年5月27日,中国已与150个国家、32个国际组织签署200多份共建“一带一路”合作文件。8.4.2实战目的(1)掌握结构体数组的定义和使用。(2)掌握结构体指针的定义和使用。8.4.3实战内容编程实现输入“一带一路”中线城市编号、城市名称、城市面积和城市简介,并在屏幕上显示该信息。8.4.4实战过程#include<stdio.h>#include<malloc.h>structintroduction{ intnum; floatarea; charname[10],city[200]; structintroduction*next;};structintroduction*creat(intn){ structintroduction*head,*pf,*pb; inti; for(i=0;i<n;i++) { pb=(structintroduction*)malloc(sizeof(structintroduction)); printf("请输入中线城市编号、城市名称、城市面积(平方千米)、城市简介\n"); scanf("%d%s%f%s",&pb->num,&pb->name,&pb->area,&pb->city); if(i==0) pf=head=pb; else pf->next=pb; pb->next=NULL; pf=pb; } return(head);}voidprint(structintroduction*head){ printf("城市编号\t城市名称\
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 旅行的策划与感悟
- 2025年度电子产品全球配送与售后维护服务合同4篇
- 2025年度智能环保型厂房出售买卖协议书4篇
- 2025年度文化产业厂房购置及运营合作协议4篇
- 个人借贷抵押协议标准打印版2024年适用版B版
- 2025年度高科技厂房租赁合同(含知识产权保护)标准样本4篇
- 个人专项资金贷款合同范本:2024年版B版
- 2024科技创新项目引荐服务合作合同一
- 2025年度供应链金融合同履行的信用增级担保服务3篇
- 2024版特定担保书增补协议上诉文件版B版
- 神经内科国家临床重点专科建设项目评分标准(试行)
- 业主委员会成员推荐表
- 城市设计与城市更新培训
- 2023年贵州省铜仁市中考数学真题试题含解析
- 世界卫生组织生存质量测量表(WHOQOL-BREF)
- 《叶圣陶先生二三事》第1第2课时示范公开课教学PPT课件【统编人教版七年级语文下册】
- 某送电线路安全健康环境与文明施工监理细则
- GB/T 28885-2012燃气服务导则
- PEP-3心理教育量表-评估报告
- 控制性详细规划编制项目竞争性磋商招标文件评标办法、采购需求和技术参数
- 《增值税及附加税费申报表(小规模纳税人适用)》 及其附列资料-江苏税务
评论
0/150
提交评论