《中职《C语言程序设计》教案第17课统计某公司员工信息.docx》由会员分享,可在线阅读,更多相关《中职《C语言程序设计》教案第17课统计某公司员工信息.docx(6页珍藏版)》请在优知文库上搜索。
1、课题统计某公司员工信息课时2课时(90min)教学目标知识目标:(1)掌握定义、初始化和引用结构体变量、结构体数组的方法(2)掌握指向结构体变量、数组的指针的使用方法能力目标:能够灵活使用结构体变量编写程序素质目标:通过结构体类型的学习,提高选择合适方法解决不同问题的能力教学重难点教学重点:结构体变量,结构体数组,结构体指针教学难点:结构体指针教学方法问答法、讨论法、讲授法、实践法教学用具电脑、投影仪、多媒体课件、教材教学过程主要教学内容及步骤课前任务【教师】布置课前任务,和学生负责人取得联系,让其提醒同学通过APP或其他学习软件,完成课前任务请同学们上网查找,除了数组中可以存放多个数据,还有
2、没有其他方式来存放多个数据。【学生】完成课前任务考勤【教师】使用APP进行签到【学生】班干部报请假人员及原因问题导入【教师】请同学们扫码观看“结构体类型数据的使用“视频(详见教材),讨论并回答以下问题:什么是结构体类型?结构体类型数据的使用过程是怎样的?【学生】思考、举手回答传授新知【教师】讲解结构体变量,结构体数组,结构体指针一、结构体变量【教师】多媒体观看“结构体类型(1)”视频(详见教材),让学生熟悉结构体类型的声明,结构体变量的定义,结构体变量的初始化,结构体变量的引用1.结构体类型的声明结构体是构造数据类型,它与数组的区别在于其成员可以是不同的幡类型e几乎每个结构体都有一个名字,称为
3、结构体名,所有成员都组织在该名字之下。结构体成员是组成结构体的要素,它们的数据类型可以相同,也可以不同,每个成员都有自己的名字,称为结构体成员名。声明一个结构体类型的一般形式如下。struct结构体名(数据类型成员1的名字;数据类型成员2的名字;数据类型成员3的名字;);结构体名是由用户指定的,又称结构体标记,大括号内是该结构体所包括的子项,即结构体成员。其中,Stu为结构体名,它包含了五个成员,即num、name20sex、age和score结构体成员的定义方式与变量的定义方式相同,只是不能初始化。这里的structSiu是根据实际需要定义的一种新的孀类型,它相当于T模型,但其中并无具体的数
4、据,系统会为它分配实际内存单元.它的功能相当于皿、float等,可以用StrUClSlU这种结构体数据类型来定义相应的结构体变量。【课堂讨论】【教师】请学生分组讨论以下问题请同学们以小组为单位,讨论数组与结构体的区别。*【学生】讨论、总结、回答【教师】总结学生的回答中提示(1)结构体成员的类型可以是整型、浮点型、字符型、数组、指针、结构体或共用体等。因此,结构体可以嵌套使用,即一个结构体变量也可以成为另一个结构体变量的成员。(2)结构体成员名可以与程序中其他变量同名,系统会自动识别它们,两者不会混淆。(3)结构体声明既可以在函数内部进行,也可以在函数外部进行。在函数内部声明的结构体,只对函数内
5、部可见;在函数外部声明的结构体,对声明点到源文件结束之间的所有函数都是可见的。一般在源文件的首部对结构体进行声明。(4)在编写较大规模的程序时,常常将结构体类型声明放在一个头文件中,若想在其他源文件中使用该结构体类型,可用include命令将该头文件包含到源文件中。2.结构体变量的定义结构体变量的定义形式主要有以下两种。(1)先声明结构体类型再定义变量。例如,对已声明的结构体类型structStu,可以用该数据类型来定义变量:structStuS1,S2;/*定义结构体变量Sl和S2*/其中,structStu是结构体数据类型,即说明变量的叫类型;Sl和S2是结构体变量名。这样Sl和S2就具有
6、了structStu类型的结构,如图8-1所示(详见教材)。在定义了结构体变量后,系统会为之分配内存单元。结构体变量所占字节数为所有成员所占字节数的总和。例如,在VisualC+2010中,变量Sl占33个字节(4+20+1+4+4=33)这种方式是将结构体声明与结构体变量定义分开,在声明类型后可以随时定义变量,相对比较灵活。中提示通常,结构体变量实际所占内存的大小会大于或等于所有成员所占内存字节数的总和,可用sizeof()函数来获取,其使用方法为SiZeof(结构体名)。(2)在声明结构体类型的同时定义变量,其TS形式如下:struct结构体名数据类型成员1的名字;数据类型成员2的名字;数
7、据类型成员3的名字;结构体变量名列表;.(举例详见教材)声明结构体类型和定义变量放在一起,能够直接看到结构体的结构,比较直观,适合在编写小型程序时使用。中高手点拨在定义结构体变量时,也可以不指定结构体名而直接定义结构体类型变量。例如:struct)S1,S2;由于此种方式指定了一个无名的结构体类型,显然不能再以此结构体类型去定义其他变量,故较少使用.3 .结构体变量的初始化在定义结构体变量的同时,可以对其赋值,即初始化结构体变量,其一般形式如下.struct结构体名结构体变量名=初始数据;例如,声明了学生信息的结构体后,可执行以下语句初始化结构体变量SiestructStuS1=201701,
8、Wangwu,M,18,85);/*定义结构体变量Sl并对其初始化*/或在定义结构体变量时进行初始化。例如:structStuS1=201701,Wangwu,M,18,85);/*定义结构体变量Sl并初始化*/在初始化结构体变量时,数据之间要用逗号隔开,数据的个数要与被赋值的结构体成员的个数相等,且数据类型要与相应结构体成员的数据类型一致。4 .结构体变量的引用在定义了结构体变量后,就可以引用该变量了。对结构体变量的赋值、存取或运算,实质上是对结构体成员的操作。访问结构体变量的成员,须使用成员运算符(也称圆点运算符),其一般形式如下:结构体变量名.成员名例如,Sl为structStu类型的结
9、构体变量,则SLnum表示Sl变量中的num成员,在程序中可以用以下方式对变量的成员进行赋值。Sl.num=201701;计提示结构体变量不能作为整体进行输入和输出,但允许对具有相同结构体类型的变量进行整体赋值。例如:Printf(%d%s%c%d%d,Sl);产错误,结构体变量不能作为整体进行输入和输出*/S2=S1;/*正确,假设Sl和S2是同类型的结构体变量*/如果成员本身又是一个结构体类型,则要用若干个成员运算符,一级一级地找到最低一级的成员,只能对最(氐级的成员进行赋值、存取或运算。例如:student.grade.final=87:/*为结构体变量student中成员grade(结
10、构体变量)中的成员final赋值列【课堂练习】【教师】出示【例8-1】,组织学生编写代码比较两个学生的赚,输出成徽高的学生的学号、姓名、性Slk年龄和感责.【学生】编写程序、运行、对比结果【教师】解析例题首先声明结构体类型,成员包括学生的学号、姓名、性别、年龄和成绩;然后初始化两个学生信息Sl和S2;最后比较两个学生的成绩,如果SI的成绩高于S2的成绩,则输出Sl的全部信息,如果S2的三高于Sl的成绩,则输出S2的全部信息,如果两者相等,则输出“得分相同!。(参考程序详见教材)【运行结果】程序运行结果如图8-2所示(详见教材)【课堂讨论】【教师】请学生分组讨论以下问题请同学们以小组为单位,讨论
11、结构体变量与普通变量在声明、定义、初始化、引用时有什么相同之处和不同之处。【学生】讨论、总结、回答【教师】总结学生的回答二、结构体数组【教师】多媒体观看“结构体数组”视频(详见教材),让学生熟悉结构体数组的定义,结构体数组的初始化,结构体数组的弓I用如同多个数据类型一致的普通变量可用数组存储一样,多个数据类型一致的结构体变量也可以用数组存储,这就是结构体数组。结构体数组中每个数组元素都是一个结构体类型的变量。1 .结构体数组的定义结构体数组必须先定义后使用,其定义方法与定义结构体变量的方法类似。例如,例8-1中的两个学生信息用结构体数组可定义如下:structStus2;/*定义结构体数组*/
12、也可直接定义一个结构体数组。2 .结构体数组的初始化结构体数组也可以在定义的同时进行赋值,即对结构体数组初始化。例如:stclStus2=201701,”李X文VM,18,85,201702;刘X毅TMU9,91;初始化后的数组如图8-3所示(详见教材).3 .结构体数组的引用结构体数组的引用方法与结构体变量的引用方法类似,其一般形式如下:结构体数组名下标.成员名【课堂练习】【教师】出示【例82】,组织学生编写代码用结构(檄组计算如图8-3所示(详见教材)的两个学生的平均成绩。【学生】编写程序、运行、对比结果【教师】解腌U题可以定义T包含两个元素能熟檄,每个元素即为令生的信息。.(参考程序详见
13、教材)【运行结果】程序运行结果如图8-4所示(详见教材)三、结构体指针【教师】介绍指向结构体变量的指针,指向结构体数组的指针,结构体作为函数参数结构体指针是指向结构体变量的指针,该指针变量的值是结构体变量的起始地址,其目标变量是一struct Stu SI;struct Stu *p=&S 1;以下三条语句的作用完全相同。Sl.num=201701;(*p).num=201701;p-num=201701;struct Stu s3,*p; p=s;个结构体变量。1 .指向结构体变量的指针指向结构体变量的指针,其变量类型必须与结构体变量的类型相同。例如,定义一个指向结构体类型structStu
14、的指针变量方法如下。struct Slu *p;/*定义指针变量p,指向SlrUCIStU类型的变量*/此处只是定义了一个指向structSiu结构体类型的指针变量p,但此时的p并没有指向一个确定的存储单元.为使P指向一个确定的存储单元,需要对指针变量进行初始化。例如:/*定义结构体变量Sl*/*定义指针变量P,指向结构体变量Sl*/除成员运算符外,C程序还规定了另一种用于访问结构体成员的运算符,即指向运算符”,也称箭头运算符,其访问形式如下:指向结构体的指针变量名-成员名浮使用成员运算符访问结构体成员*/*p是指向结构体变量Sl的指针*/*使用指向运算符访问结构体成员*/中提示由于成员运算符
15、比指针运算符优先级高,因此,*P必须使用括号括起来。2 .指向结构体数组的指针指向结构体对象的指针变量既可指向结构体变量,也可指向结构体数组中的元素.例如,以下语句定义了一个结构体数组N3和一个结构体指针p,并使P指向结构体数组的首地址。/*定义结构体数组s3和指针变量p*/*指针变量p指向结构体数组的首地址*/其中,P国旨向结构体数组s的指针变量,即斗物组s的第I个元素的起始地址赋给p.若执行p,则P的值等于s+1,也就是指向s(I指针P与结构体数组的关系如图8-5所示(详见教材)3 .结构体作为函数参数【课堂问答】*【教师】随机邀请学生回答以下问题请同学们结合之前函数参数传递时的“值传递和地址传递两种方式,思考结构体作为函数参数时属于哪种方式?【学生】聆听、思考、回答【教师】总结学生的回答与其他