61 结构体Word文档下载推荐.docx
《61 结构体Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《61 结构体Word文档下载推荐.docx(18页珍藏版)》请在冰豆网上搜索。
✧结构体的定义
✧结构体变量的引用
✧结构体数组的使用
⏹通过教学使学生掌握结构体类型的使用。
本节重点
⏹结构体的定义
⏹结构体变量的引用
⏹结构体数组的使用
本节难点
授课课时
⏹4课时
教法建议
目标概述[5分钟]
本章主要讲述结构体及其应用。
本节主要讲述结构体及其应用。
提出本节的任务。
回顾[5分钟]
回顾上一章的相关内容。
课程知识点讲解
用户自定义类型[3分钟]
引入:
主题:
将基本数据类型组合起来,形成一种新的数据类型。
这种利用基本数据类型组合形成新数据类型的方法,称为用户自定义类型,也可称为复合类型。
在C++中用户自定义类型包括结构体(structure)类型、共用体(union)类型、枚举(enumeration)类型和类(class)类型等。
结构体的定义[5分钟]
在C++中提供了一种称为结构体(structure)的类型可以帮助将若干个不同类型的数据组合成一个整体,从而形成一种新的数据类型。
声明一个结构体类型的一般形式
struct结构体类型名{
<
成员列表>
;
};
●struct:
是一个系统保留字,在声明新的结构体类型时,必须以此关键字开始,它向编译系统声明,其后是一种新的结构体类型;
●结构体类型名:
作为新声明的结构体类型的名字,其命名应符合C++的变量命名规则,如上例中的Student;
●一对大括号:
作为定界符,用以确定新结构体类型所包括的成员,在大括号范围内的就是组成新数据类型的全部成员列表;
●成员列表:
在大括号内申明的变量,不再作为一个单独的变量,而是作为新类型的一部分,称为成员,也可称为域(Field),因此成员列表也可称为域表(FieldList)。
每个成员都必须进行类似下面的类型声明:
<
类型名>
<
成员名>
这里的类型可以是基本类型,如char、int等,也可以是用户定义类型如结构体类型,枚举类型等。
●分号:
结构体类型声明是一条声明语句,必须以分号作为结束标记
结构体的声明语句一般放在源文件的开头,以便于在其后的函数和语句中可以使用它来定义变量,当然也可以在某个函数内部进行声明,不过这时其作用域范围将限定在函数内部。
结构体变量的定义[10分钟]
前面我们学会了如何定义一个新的结构体类型,但声明的只是一种新的类型,还没有用来定义变量,系统也没有进行内存分配,这时无法进行数据操作。
就相当于已创建一个新的模板,还没有进行生产,我们无法拿到具体的产品来使用。
为了能够在程序中使用结构体类型的数据,应当像使用基本类型一样定义结构体类型变量,并在其中存放数据。
结构体类型变量的定义与其它类型的变量的定义是一样的,但由于结构体类型需要针对问题事先自行定义,所以结构体类型变量的定义形式就增加了灵活性,共计有如下三种方式:
1)先定义结构体类型,再定义结构体类型变量
如在已定义结构体类型Student的情况下,就可以像使用基本类型一样定义结构体变量
在C++中为保持与C语言的兼容,也允许在定义结构体变量时,在结构体类型前加上关键字struct。
当用结构体类型定义变量后,系统将为变量分配相应的内存空间,这时结构体变量所占用的内存空间等于结构体类型中全部成员所占用内存空间之和。
这可以使用sizeof运算符加以验证。
这里要指明的是相同类型的结构体变量所占用的内存空间大小一样的,而不同类型的结构体变量所占用的内存空间大小不一样。
2)定义结构体类型同时定义结构体类型变量
与方法1将结构体类型与结构体变量分别定义略有不同,方法2在定义结构体类型的同时定义结构体变量,示例如下。
这两种方法只是为方便使用而加以区分,没有本质区别。
这种定义方法的一般形式如下:
} <
变量名列表>
3)直接定义结构体类型变量
不定义结构体类型,直接定义结构变量,其一般形式如下
struct{
} 变量名列表;
该定义方法由于无法记录该结构体类型,所以除直接定义外,不能再定义该结构体类型变量,因此这种方法虽然合法,但较少使用。
[结合实例详细讲述结构体变量的定义]
结构体变量的初始化[10分钟]
由于结构体类型变量汇集了各类不同数据类型的成员,所以结构体类型变量的初始化就略显复杂。
具体来说,其初始化方式大致可分为三种
1)定义时直接初始化
和其他类型的变量一样,可以在定义结构体变量时就指定其初始值。
这里要注意给每个成员赋值时,要保证其类型及长度的合法性。
如果采取的是类型声明与变量定义分离的情况,即在已定义好结构体类型的情况下(例如现已定义好结构体类型Student),则可以对结构体变量Stu3进行如下的初始化:
Studentstu3={"
IIIT2043"
"
0503003"
李四"
92,86};
注意:
这里要指出的是,这种直接赋值方法如果不是在定义时使用,则是错误的,将无法通过编译,如已定义结构体变量stu1,则下列代码是错误的
stu1={"
0503001"
张三"
89,78};
//注意前面没有类型Student
2)结构体变量赋值
在定义结构体变量时,可以使用一个已经存在的同类型结构体变量进行赋值。
3)使用成员引用的方式赋值
可以采用为结构体变量中每个成员单独赋值的方式来进行初始化。
引用结构体变量中成员的一般方式为
结构体变量名>
.<
“.”运算符表示从属关系,称为成员运算符,例如要表示学生1的姓名则可以用stu1.name来表示。
通过成员运算符对每个成员逐一赋值也可实现对结构体变量的初始化。
[通过实例详细讲述结构体变量的初始化]
结构体变量的引用[15分钟]
学习了定义结构体类型和结构体类型变量后,怎样正确地引用该结构体类型变量的成员呢?
主要是使用成员运算符来实现,现将有关结构体变量的知识列举如下:
1)整体引用
可以将一个结构体变量的值作为一个整体进行使用,要注意的是这种整体引用方式仅适用于同类型结构体变量的赋值,不能使用标准输入输出语句对结构体变量进行整体输入或输出,例如:
stu3=stu1;
//正确代码
cin>
>
stu1;
//错误的代码
cout<
因为结构体类型是自定义用户类型,在系统的基本输入输出语句中无法事先针对自定义类型进行编程实现整体输入输出,当然用户可以自己编写特定代码来实现整体输入输出。
2)分别引用
除了进行整体引用外,我们还可以使用成员运算符“.”对结构体变量中的成员进行引用和赋值,这里列举几个在使用成员运算符时应注意的要点:
●成员运算符的优先级
成员运算符的优先级在所有运算符中是最高的,因此可以将stu1.name作为一个整体来看待。
●成员运算符的嵌套使用
●如果成员本身也是一个结构体变量,则可以使用成员运算符逐级引用,直到找到最低一级的成员。
●引用结构体变量中成员的地址
结构体变量中的成员同一般变量一样可以进行各种运算,包括使用取地址运算符“&
”获取成员的地址参与指针运算。
[通过示例详细讲述结构体变量的引用]
练习:
练习6.1.1编写代码
1.定义结构体类型Book表示下表6.1.1所示表格
书号
书名
作者
出版社
价格
外借
TP050001
C++程序设计
谭浩强
清华大学出版社
36.00
是
其中关于各字段的数据类型和长度定义如下:
序号
字段名
字段类型
长度
描述
备注
1
id
char
9
最大8位字符
2
name
31
最多15个汉字
3
author
11
最多5个汉字
4
publisher
5
price
float
6
flag
int
1表示外借
0表示在库
2.定义结构变量book1从键盘接收如表6.1.1中数据,并输出。
分析与解答:
具体见solution-code/E6-1-1.cpp
结构体数组[15分钟]
单个的结构体类型变量在解决实际问题时作用不大,一般是以结构体类型数组的形式出现,与前面介绍的数组略有不同的是结构体类型数组中每个数组元素都是一个结构体类型的数据。
1)定义结构体数组
与定义结构体变量相似,定义结构体数组时只需声明为数组即可.
2)数组的初始化
与一般结构体变量的初始化一样,结构体数组也可以在定义时,就进行初始化,也可以在定义后,根据需要进行初始化。
定义数组时,如果有初始化赋值代码也可以不指明具体的元素个数,编译系统会自动根据初值中结构体常量的个数来确定数组的元素。
3)数组元素的引用
和普通数组一样,结构体数组元素的引用也是通过数组下标来实现的,下标从0开始,最大到元素个数减一为止。
而数组元素中的成员的引用则是使用成员运算符来实现的。
示例讲解:
示例6.1.1 求表6.1.3中计算机应用一门课的总分,要求对学生成绩表采用结构体数组进行。
具体见P279
[通过示例详细讲述结构体数组的使用]
任务解决[20分钟]
任务:
由于现有HNS软件学院的图书管理系统在编码时大量使用二维数组来存储图书数据,难以有效反映数据间的内在联系,降低了程序的可读性和可维护性。
因此系统分析部研究决定对该系统进行升级改造,要求使用更加直观、方便的形式来存放图书数据,现指派您使用结构体技术完成如下任务:
1.使用结构体数组存储图书数据,完成借书功能;
2.使用结构体数组存储图书数据,完成还书功能。
分析与解决:
具体见P280-286
精练[课后完成]
请您根据本节中所学的知识,并参考图中流程图,编写相应的程序实现returnBook函数,解决任务2。
解决:
具体见P6-1.cpp
小结[2分钟]
通过本节的学习,您了解了什么是用户自定义类型,掌握了结构体类型的定义与作用,熟悉了结构体变量的定义与引用,并能将结构体与数组结合起来解决实际问题,下面将本节的主要内容归纳如下:
1.用户自定义类型
当基本数据类型无法满足开发者的使用要求时,我们需要根据实际情况的要求,利用基本类型来声明一些新的类型,这些由用户自己声明的新的数据类型我们称为用户自定义类型。
包括结构体类型,枚举类型和共用体类型等。
2.结构体类型的定义
定义结构体类型的一般形式如下:
struct结构体类型名{
成员列表;
};
3.结构体变量的定义
结构体变量的