您好,欢迎访问三七文档
计算机程序设计基础(C语言)教案1教案纸第一讲第十一章结构与联合(2学时)【主要讲授内容】11.1概述11.2结构类型的说明与引用11.3结构数组【重点与难点】1.重点:结构体的基本概念,结构类型的定义格式,结构类型成员的访问,结构数组;2.难点:结构类型成员的访问,结构数组。【教学要求】1.掌握结构体类型的说明、结构体变量的定义及初始化方法2.掌握结构体变量成员的引用3.了解结构数组【实施方法】课堂讲授,并通过在VisualC++6.0工作环境中的操作演示,使学生形象、直观地了解结构类型的使用方法。通过实验教学巩固、验证课堂讲授的理论知识,培养学生的上机动手能力。【学时安排】理论教学2学时、实验2学时。讲授内容1.概述结构的形式由标识符、数据类型和这个结构中单个数据域的排列组成。结构的内容由存储在标识符中的实际数据组成。例如,一个视频游戏中的人物需要存储的数据项如图11.1所示。图11.2显示了图11.1中可接受的这个结构形式的内容。计算机程序设计基础(C语言)教案22.结构类型的说明与引用一、结构类型的声明结构类型的定义方法如下:struct结构类型名{类型名1成员名表1;类型名2成员名表2;…类型名n成员名表n;}结构变量表列;关于结构类型定义的说明:⑴struct是关键字,由它引入结构声明。⑵结构类型名、成员名、结构类型的变量名都要符合标识符的命名规则。⑶结构的全体成员用大括号括起来,最后一个大括号后还有一个分号,这个分号是不可省的。⑷成员的定义方式和它所属类型的变量的定义方式相同,成员的类型可以是一切合法的类型,每个成员称为结构中的一个“域”。例如,一个学生的数据包括以下多个数据项:对于这种情况,可以将一个学生的数据定义为一个结构类型:structstudent{longnum;charname[20];floatscore;};在这个结构定义中,结构类型名为student,该结构由3个成员组成。第1个成员为num,长整型变量;第2个成员为name,字符数组;第3个成员为score,单精度浮点型变量。应注意在大括号“}”后的分号“;”是不可少的。二、定义结构类型变量的方法定义结构变量有三种方法:(1)单独定义,即先定义结构类型再定义结构变量。比如:数据项类型学号整型姓名字符数组成绩单精度浮点数名称:类型:地牢中的位置:强度系数:智力因素:装甲类型:图11.1一个视频游戏人物的典型构成名称:戈格类型:怪物地牢中的位置:G7强度系数:78智力因素:15装甲类型:锁子甲图11.2一个结构的形式和内容计算机程序设计基础(C语言)教案3structstudent{longnum;charname[20];floatscore;};structstudentstu1,stu2;在这里定义了两个结构变量stu1和stu2,每个变量都具有structstudent结构类型,均包含三个成员。每个结构变量可存放一个学生的数据,系统为每个结构变量分配28个字节的内存单元(即每个成员的存储空间的总和4+20+4=28字节)。结构变量stu1的存储状态如图11.3所示。(2)混合定义,即在定义结构类型的同时定义结构变量:structstudent{longnum;charname[20];floatscore;}stu1,stu2;该方法与第(1)种方法相同,表示定义了两个结构变量stu1和stu2。(3)无类型名定义,即直接定义结构类型变量:struct{longnum;charname[20];floatscore;}stu1,stu2;第(3)种方法与第(2)种方法的区别在于:在第(3)种方法中省去了结构名,而直接给出了结构变量。但是,这种方法因为没有定义结构类型名,所以在程序的其它地方将不能再定义该结构类型的变量。关于结构类型的说明:⑴结构类型与结构变量是两个不同的概念,不要混同。结构类型是用户自行定义的标识符,表示处理对象的数据结构。系统并不为结构类型分配存储空间,只有在程序中定义了该结构类型的变量后,才分配存储空间。⑵为每个结构变量分配的存储空间是该结构中各个成员的存储空间的总和。⑶结构成员名可与程序中其它变量同名,两者代表不同的对象,互不干扰。三、结构的初始化C语言规定,任何存储类型的结构、数组和联合都可以在变量说明时初始化,初值是由常量表达式组成的初值表。结构的初值表形式与数组类似。例如:图11.3结构变量stu1的存储状态4字节20字节4字节numnamescore计算机程序设计基础(C语言)教案4structstudent{longintnum;charname[20];floatscore;}stu1={20060401,LiLin,87.5};或structstudent{longintnum;charname[20];floatscore;}structstudentstu1={20060401,LiLin,87.5};其中,长整型变量num的初值为20060401,字符数组名name指向字符串LiLin,单精度浮点型变量score的初值为87.5。说明:⑴所有初始化的数据都用大括号括起来,各数据间用逗号隔开,每个常量表达式的类型应与对应成员的类型一致。⑵要注意的是不能给结构变量整体赋值,只能分别给每个成员赋值。下面的写法都是错误的:scanf(%d%s%f,&stu1);prinf(%d%s%f,stu1);⑶不能在结构内赋初值。例如以下的初始化工作就是错误的:structstudent{longnum=20060401;charname[20]=LiLin;floatscore=87.5;}stu1;四、结构变量的引用1.引用结构变量⑴同类型的结构变量可以相互赋值。例如:structstudentstu1,stu2;则stu1=stu2和stu2=stu1都是合法的赋值表达式。注意:初始化不同于赋值,初始化形式不能用于赋值表达式。例如:structstudentstu1={20060410,Liuwei,78};是合法的说明语句,而stu1={20060410,Liuwei,78};是非法的赋值表达式语句,因为{20060410,Liuwei,78}不是一个表达式,而是一个初值表。⑵结构变量可以取地址。例如:structstudentstu1;则&stu1是合法的地址表达式,结果是结构变量stu1的地址。对结构变量的整体操作只限于赋值操作和参数传递,而且要求结构变量的类型必须完全一致。注意:不能对结构变量进行整体输入输出。计算机程序设计基础(C语言)教案5⑶结构变量可以作函数的参数或函数的返回值,由函数返回的结构可以赋给同类型的结构变量。2.结构成员引用结构成员是通过结构变量名和成员名共同表示的。C语言规定结构变量成员的一般引用形式为:结构变量名.成员名其中,成员名是对结构成员的引用,“.”是一个小数点,称为成员选择运算符,用于连接结构变量名和成员名。例如:stu1.num表示结构变量stu1的学号;stu2.score表示结构变量stu2的成绩。关于引用操作的几点说明:⑴结构类型变量的各成员的使用方法与普通的简单类型变量完全相同。⑵在嵌套的结构中,成员本身又是一个结构,则必须逐级找到最低一级的成员才能使用。例如:stu1.birthday.month表示第一个人出生的月份。这里用若干个成员选择运算符,一级一级地找到最低一级的成员。注意:只能对最低一级的成员进行赋值、存取与运算操作。例11.2:结构成员的赋值与运算。stu1.num=102;给结构变量的成员赋值stu1.name=Zhangping;stu2.score=stu1.score;sum=stu1.score+stu2.score;结构变量成员的运算例11.3:结构成员的输入。scanf(%ld,&stu1.num);输入一个长整数scanf(%s,stu1.name);输入一个字符串scanf(%f,&stu1.score);输入一个单精度浮点数例11.4:输出结构变量stu1各成员的值。printf(%ld,stu1.num);printf(%s,stu1.name);printf(%f,stu1.score);3.嵌套的结构在结构的定义中,所有的成员都是基本数据类型或数组类型。实际上结构的成员还可以是另一个结构,从而构成嵌套的结构。例11.6:定义一个嵌套的结构。structdate{intmonth;intday;intyear;};structstudent{intnum;charname[20];charsex;计算机程序设计基础(C语言)教案6structdatebirthday;floatscore;}stu;date是一个日期结构类型,由month(月)、day(日)、year(年)三个成员组成。student结构类型的成员birthday是data结构类型的变量。所以student是一个嵌套的结构类型,stu是一个嵌套的结构类型变量。成员结构类型也可以在嵌套结构类型的定义中定义,例如,例11.6的说明也可以写成如下嵌套结构的形式:structstudent{intnum;charname[20];charsex;structdate/*定义嵌套结构类型*/{intyear;intmonth;intday;}birthday;/*定义嵌套结构变量*/floatscore;}stu1,stu2;嵌套结构中成员结构的成员的引用形式为:结构变量名.成员结构变量名.成员名下面的表达式是对嵌套结构stu1中成员构变量birthday的成员的引用:stu1.birthday.yearstu1.birthday.monthstu1.birthday.day下面的表达式是对嵌套结构stu1中成员构变量birthday的成员的赋值:stu1.birthday.month=10stu1.birthday.day=30stu1.birthday.year=20063.结构数组一、结构数组的定义定义结构数组与定义普通数组的方法相同。例如:structpayrecord{longintnum;charname[20];floatsalary;};structpayrecordemployee[4];这里定义了结构数组employee,可以存放4个员工的数据。结构数组employee中的每个元素又是一个结构变量,分别都包含成员变量num,name和salary。计算机程序设计基础(C语言)教案7二、结构数组的初始化结构数组的初始化与普通数组的初始化方法相同,可以在定义结构数组的同时指定初值。例如,定义一个有4个元素的结构数组。例11.8:定义一个有4个元素的结构数组并初始化。structpayrecord{longintnum;charname[20];floatsalary;};structpayrecordemployee[4]={{2033409,Lili,2014.15},{2033410,Wanghong,2310.56},{2033411,Zhanglei,1890.67},{2033412,Luowen,3010.08}};或structpayrecord{longintnum;charname[20];floatsalary;}employee[4]={{2033409,Lili,2014.15},{2033410,Wanghong,2310.56},{2033411,Zhanglei,1890.67},{2033412,Luowen,3010.08}};经过初始化后结构数组中employee[0]至employee[3]中的内容如图11.4所示。在初始化结构数组时,也可以不指定数组元素的个数。系统会根据初值的情况,确定结构数组元素的个数。例11.8a:structpayrecord{longintnum;charname[20];floatsalary;};structpayrecordemployee[]={{203340
本文标题:第十九讲结构与联合
链接地址:https://www.777doc.com/doc-2163156 .html