虚实结合任务先行一一学生成绩管理系统的实现教案序存储的据在内存中存储的逻辑地址示意图;述数据查找过程,帮助学2、对比数据存储示例图,口述查找目标数逻辑地址生巩固顺序存储的特点,据的步骤;示意图;巩固理论知识;3、知识迁移,根据查找步骤,画出程序流2、回顾查2、知识迁移,程序的实程图;找过程,现帮助学生在逻辑结构和思考如何4、根据程序流程图,进行相应程序的编程功能实现之间建立连接,并实现;删除目标将理论知识转移为实践能数据;力;5、知识拓展,尝试解决在26个有序英文3、知识拓展,根据现有字母中,查找字母m的过程及程序实现。3、根据查找步骤绘实践经验进行知识拓展,制程序流解决这一类的问题,深化程图;知识理解,提升实践技能。4、结合程序流程教学资源:图,理解PPT 讲解,程序段的示例图演示,上机编程并含义;运行。5、课堂练习,实现英文字母的查找。课堂小结线性表顺序存储的优缺点教学设计思路:1、特点:在逻辑上相邻的元素在物理上1、便于构成了一个完整的也相邻,即顺序存储是用物理位置上的邻知识体系。使学生在自己接关系来表示元素间的逻辑关系。的头脑中形成知识网2、优点:结构简单,存取方便、迅速。回顾本节络.从而达到提纲挚领的课知识,3、缺点:目的;2min13(1)作插入、删除运算需移动构建知识2、使学生带着问题进入大量数据;架构。教室,带着更多的问题离(2)表难以扩充(因需一片连开教室,培养学生探究精续空间)。神。思政学习:顺序结构的“优劣”,向学生传达唯物辩证法基本观点。项目分析根据企业教学设计思路:导师点评企业导师根据行业标准进进行自我行项目分析,帮助学生抒课堂连线企业导师,对本节课利用顺序表反思,及清解决问题的思路和注意4min14表实现系统功能进行项自分析,说明评价时进行自事项,强化对知识的理标准,强调注意事项。我学习调解,提升学生的职业素整,分析养。本节课项12
12 虚实结合 任务先行——学生成绩管理系统的实现 教案 据在内存中存储的逻辑地址示意图; 2、对比数据存储示例图,口述查找目标数 据的步骤 ; 3、知识迁移,根据查找步骤,画出程序流 程图; 4、根据程序流程图,进行相应程序的编程 并实现; 5、知识拓展,尝试解决在 26 个有序英文 字母中,查找字母 m 的过程及程序实现。 序存储的 逻辑地址 示意图; 2、回顾查 找过程, 思考如何 删除目标 数据; 3、根据查 找步骤绘 制程序流 程图; 4、结合程 序流程 图,理解 程序段的 含义; 5、课堂练 习,实现 英文字母 的查找。 述数据查找过程,帮助学 生巩固顺序存储的特点, 巩固理论知识; 2、知识迁移,程序的实 现帮助学生在逻辑结构和 功能实现之间建立连接, 将理论知识转移为实践能 力; 3、知识拓展,根据现有 实践经验进行知识拓展, 解决这一类的问题,深化 知识理解,提升实践技 能。 教学资源: PPT 讲解, 示例图演示,上机编程并 运行。 课堂小结 13 线性表顺序存储的优缺点 1、特点:在逻辑上相邻的元素在物理上 也相邻,即顺序存储是用物理位置上的邻 接关系来表示元素间的逻辑关系。 2、优点:结构简单,存取方便、迅速。 3、缺点: (1)作插入、删除运算需移动 大量数据; (2)表难以扩充(因需一片连 续空间)。 思政学习:顺序结构的“优劣”,向学生 传达唯物辩证法基本观点。 回顾本节 课知识, 构建知识 架构。 2min 教学设计思路: 1、便于构成了一个完整的 知识体系。使学生在自己 的头脑中形成知识网 络.从而达到提纲挈领的 目的; 2、使学生带着问题进入 教室,带着更多的问题离 开教室,培养学生探究精 神。 项目分析 14 课堂连线企业导师,对本节课利用顺序表 表实现系统功能进行项目分析,说明评价 标准,强调注意事项。 根据企业 导师点评 进行自我 反思,及 时进行自 我学习调 整,分析 本节课项 4min 教学设计思路: 企业导师根据行业标准进 行项目分析,帮助学生捋 清解决问题的思路和注意 事项,强化对知识的理 解,提升学生的职业素 养
虚实结合任务先行一一学生成绩管理系统的实现教案目实现的设计要点,进行算法设计。八、知识拓展1、拓展训练学生成绩统计表学号姓名数学物理外语总分李华88899026712王芳989087275张丽7884903252田爽8969784236用程序实现以下功能:(1)插入新的一条记录“孟想,79,76,95,250”;(2)删除第3条记录;(3)查询王芳在第几条记录;(4)依次输出表中所有记录。2、考证(考研)训练(2013年考研真题)已知两个长度分别为m和n的升序顺序表,若将它们合并为一个长度为m+n的降序顺序表,则最坏情况下的时间复杂度是()。A o (n)C. o(min(m,n))D.0 (max(m,n))B. 0 (mn)(软件水平考试)在一个长度为n的顺序储存的线性表中,删除地i个元素(1≤i≤n)时,需要从前向后依次移()个元素。A. IB. n-i+1C. n-i-1D. n-i3、竞赛训练蓝桥杯线性表部分https://dasai.lanqiao.cn/notices/1096/九、教学评价与反馈本节课是数据结构第一种类型一线性结构的第一节课,涉及到线性结构的特征、在内存中的存储形式、以及在进行数据操作过程中内存地址的变化过程。理论知识较为抽象,需要学生加入个人的空间想象辅助理解。此外,在建立了空间逻辑结构的基础上还需要将其以程序的形式进行实现,因此,课程的实操性也很强。在整个教学过程中,通过前期的课堂预习,学生在课前已经对线性结构有了初步的了解,大部分学生能够给依据对知识的理解找到对应的生活实例,在理论与现实生活间建立了联系,认识到所学内容所具备的实际意义。在课堂教学中,对于理论性较强的部分,通过导学案充分铺垫、诱导、启发、示范、练习,以及教学支架性材料,讲解时以例释理,辅以示例图和关键步骤的动画演示,以自主总结归纳替代直接灌输结论,发挥学生的主观能动性进行知识点的学习、深化,构建属于自己的知识体系架构,极大的提升了学生上课的注意力,对知识的理解也较为透彻。而对于实践技能训练部分,通过小组讨论总结知识点、课堂回答问题、课堂练习等多种形式相结合的形式,每个学生都充分、全程并且深度参与课堂互动中,在体验、经验的基础上领悟、归纳、总结知识13
13 虚实结合 任务先行——学生成绩管理系统的实现 教案 目实现的 设计要 点,进行 算法设 计。 八、知识拓展 1、拓展训练 学生成绩统计表 用程序实现以下功能: (1)插入新的一条记录“孟想,79,76,95,250”; (2)删除第 3 条记录; (3)查询王芳在第几条记录; (4)依次输出表中所有记录。 2、考证(考研)训练 (2013 年考研真题)已知两个长度分别为 m 和 n 的升序顺序表,若将它们合并为一个长度为 m+n 的降序顺序表,则最坏情况下的时间复杂度是()。 A O(n) B. O(mn) C. O(min(m, n)) D. O(max(m, n)) (软件水平考试)在一个长度为 n 的顺序储存的线性表中,删除地 i 个元素(1≤i≤n)时,需 要从前向后依次移( )个元素。 A. I B. n-i+1 C. n-i-1 D. n-i 3、竞赛训练 蓝桥杯线性表部分 https://dasai.lanqiao.cn/notices/1096/ 学号 姓名 数学 物理 外语 总分 1 李华 88 89 90 267 2 王芳 98 90 87 275 3 张丽 78 84 90 252 4 田爽 89 69 78 236 九、教学评价与反馈 本节课是数据结构第一种类型—线性结构的第一节课,涉及到线性结构的特征、在内存中 的存储形式、以及在进行数据操作过程中内存地址的变化过程。理论知识较为抽象,需要学生 加入个人的空间想象辅助理解。此外,在建立了空间逻辑结构的基础上还需要将其以程序的形 式进行实现,因此,课程的实操性也很强。 在整个教学过程中,通过前期的课堂预习,学生在课前已经对线性结构有了初步的了解, 大部分学生能够给依据对知识的理解找到对应的生活实例,在理论与现实生活间建立了联系, 认识到所学内容所具备的实际意义。 在课堂教学中,对于理论性较强的部分,通过导学案充分铺垫、诱导、启发、示范、练 习,以及教学支架性材料,讲解时以例释理,辅以示例图和关键步骤的动画演示,以自主总结 归纳替代直接灌输结论,发挥学生的主观能动性进行知识点的学习、深化,构建属于自己的知 识体系架构,极大的提升了学生上课的注意力,对知识的理解也较为透彻。而对于实践技能训 练部分,通过小组讨论总结知识点、课堂回答问题、课堂练习等多种形式相结合的形式,每个 学生都充分、全程并且深度参与课堂互动中,在体验、经验的基础上领悟、归纳、总结知识
虚实结合任务先行一一学生成绩管理系统的实现教案点,通过理解程序一一仿写程序一一知识迁移的形式逐步将抽象的数据结构形式转化为个人对程序的理解,并实现了其功能。达到了预想的教学效果。在课后知识拓展部分,对线性结构的顺序存储应用进行了拓展,将单一数据的增删查拓展为复合数据的增删查。需要用到前导课程“C语言程序设计”中结构体部分的知识内容。虽然在课堂上对于复合数据的逻辑存储形式进行了讲解和练习,大部分学生也能明确的阐述这样的数据结构在增删查操作中与单一数据操作的区别和联系,但是在进行实际程序实现过程中,仍出现无法通过程序将复合数据转换为线性结构进行顺序存储。出现这样的情况主要涉及到两方面问题:1、前导课程“C语言程序设计”中结构体部分的知识内容没有完全掌握,无法做到将结构体应用到数组的存储应用中;2、对于线性表顺序存储结构的增、删、查的逻辑变化没有完全理解,尤其在数据操作过程中其地址的变化过程和指针的行为没有完全理解。在后续的学习中,应该对前导课程“C语言程序设计”指针和结构体两部分知识进行强化练习,提升基本程序的操作技能,此外,通过学习复合数据存储的范例程序,尝试解决类似的其他复合数据的相关功能,完成知识的拓展,深化理论知识理解。十、教学总结本节课采用项目教学法展开教学,通过学生自己在学习和生活经历中寻找到的线性表结构实例对线性存储结构有了初步的认知,课堂上通过一个简单的有序数据的增、删、查的基本操作,了解到在内存中数据的地址变换方式,将抽象的空间想象以具体的程序进行了实现,建立逻辑结构与功能实践之间的联系,深化理论知识理解,提升实践技能。在本节课中,理论知识涉及到内存地址的变化,较为抽象,在讲解过程中采用“示例图讲解+动画演示+学生自主总结”的方式进行理论知识讲解,有效的将课堂知识内化到学生自身构建的知识体系中。实践操作部分,涉及到用程序实现内存地址的变化过程,对学生的编程能力要求较高,因此,在讲解过程中,采用“构建动态变化的直观印象+流程图总结步骤+程序仿写+知识拓展”的形式,帮助学生建立抽象逻辑结构与程序算法之间的联系,在仿写程序过程中一方面进一步熟悉程序的算法思想,另一方面深化理论知识理解,为后续的知识迁移和拓展做准备。在整个课堂实施过程中,通过课堂回答问题、课堂练习以及小组讨论的形式,使学生全程参与课堂教学始终,保持了良好的、积极的课堂氛围。十一、项目实现代码#include<stdio.h)#include<string.h)struct data+int number;char name[10] :char sex[5] :char classes[5];int tel;1;intinsert(struct datast[5],intn);/*申明插入函数*/voidscanning(structdatast5],intn):/*申明浏览函数*)intdel(structdatast[5],intn):/*申明删除函数*/14
14 虚实结合 任务先行——学生成绩管理系统的实现 教案 点,通过理解程序——仿写程序——知识迁移的形式逐步将抽象的数据结构形式转化为个人对 程序的理解,并实现了其功能。达到了预想的教学效果。 在课后知识拓展部分,对线性结构的顺序存储应用进行了拓展,将单一数据的增删查拓展 为复合数据的增删查。需要用到前导课程“C 语言程序设计”中结构体部分的知识内容。虽然 在课堂上对于复合数据的逻辑存储形式进行了讲解和练习,大部分学生也能明确的阐述这样的 数据结构在增删查操作中与单一数据操作的区别和联系,但是在进行实际程序实现过程中,仍 出现无法通过程序将复合数据转换为线性结构进行顺序存储。出现这样的情况主要涉及到两方 面问题: 1、前导课程“C 语言程序设计”中结构体部分的知识内容没有完全掌握,无法做到将结构 体应用到数组的存储应用中; 2、对于线性表顺序存储结构的增、删、查的逻辑变化没有完全理解,尤其在数据操作过程 中其地址的变化过程和指针的行为没有完全理解。 在后续的学习中,应该对前导课程“C 语言程序设计”指针和结构体两部分知识进行强化 练习,提升基本程序的操作技能,此外,通过学习复合数据存储的范例程序,尝试解决类似的 其他复合数据的相关功能,完成知识的拓展,深化理论知识理解。 十、教学总结 本节课采用项目教学法展开教学,通过学生自己在学习和生活经历中寻找到的线性表结构 实例对线性存储结构有了初步的认知,课堂上通过一个简单的有序数据的增、删、查的基本操 作,了解到在内存中数据的地址变换方式,将抽象的空间想象以具体的程序进行了实现,建立 逻辑结构与功能实践之间的联系,深化理论知识理解,提升实践技能。 在本节课中,理论知识涉及到内存地址的变化,较为抽象,在讲解过程中采用“示例图讲 解+动画演示+学生自主总结”的方式进行理论知识讲解,有效的将课堂知识内化到学生自身构 建的知识体系中。实践操作部分,涉及到用程序实现内存地址的变化过程,对学生的编程能力 要求较高,因此,在讲解过程中,采用“构建动态变化的直观印象+流程图总结步骤+程序仿写+ 知识拓展”的形式,帮助学生建立抽象逻辑结构与程序算法之间的联系,在仿写程序过程中一 方面进一步熟悉程序的算法思想,另一方面深化理论知识理解,为后续的知识迁移和拓展做准 备。 在整个课堂实施过程中,通过课堂回答问题、课堂练习以及小组讨论的形式,使学生全程 参与课堂教学始终,保持了良好的、积极的课堂氛围。 十一、项目实现代码 #include <stdio.h> #include <string.h> struct data { int number; char name[10]; char sex[5]; char classes[5]; int tel; }; int insert(struct data st[5],int n); /*申明插入函数*/ void scanning(struct data st[5],int n); /*申明浏览函数*/ int del(struct data st[5],int n); /*申明删除函数*/
虚实结合任务先行一一学生成绩管理系统的实现教案voidfix(structdatast[5],intn);/*申明修改函数*/int mainOtstruct data st[5]:int chioce,flag=l:int n;n=0;while(flag)2—插入信息\nprintf("请选择功能:In1一信息浏览\n3—删除信息\n4-修改信息/n0—退出程序\n"):scanf("%d",&chioce):switch(chioce)1case l:scanning(st,n):break:case 2:n=insert(st,n);break;case 3:n=del (st,n) ;break;case 4:fix(st,n);break;case 0:flag=0;break;11printf("In"):printf(谢谢使用!In):return 0;1void scanning(struct data st[5],int n)/*定义浏览函数*/tint i;if(n==0)/*无元素*/printf("请选择功能键,先插入名单!In):printf("\n):printf("In"):1else15
15 虚实结合 任务先行——学生成绩管理系统的实现 教案 void fix(struct data st[5],int n); /*申明修改函数*/ int main() { struct data st[5]; int chioce,flag=1; int n; n=0; while(flag) { printf("请选择功能:\n 1—信息浏览\n 2—插入信息\n 3—删除信息\n 4-修改信息\n 0—退出程序\n"); scanf("%d",&chioce); switch(chioce) { case 1: scanning(st,n); break; case 2: n=insert(st,n); break; case 3: n=del(st,n); break; case 4: fix(st,n); break; case 0: flag=0; break; } } printf("\n"); printf("谢谢使用!\n"); return 0; } void scanning(struct data st[5],int n) /*定义浏览函数*/ { int i; if(n==0) /*无元素*/ { printf("请选择功能键,先插入名单!\n"); printf("\n"); printf("\n"); } else {
教案虚实结合任务先行一一学生成绩管理系统的实现.for(i=l;i(=n;i++)(printf(学号:%d/n",st[i].number):printf("姓名:%s\n,st[i].name):printf("性别:%s|n",st[i].sex];printf("班级:%s|n",st[i].classes):printf(联系方式:%d)n',st[i].tel):printf("\n"):11+insert(structdatast[5],intn)/*定义插入函数*/intfint i,p;struct data t;if (n>=5)fprintf("内存已满!\n"):printf("In"):1elseprintf("请输入学号:In):scanf("%d",&t.number):printf(请输入姓名:In):scanf("%s",t. name);printf("请输入性别:In"):scanf("%s",t.sex);printf(请输入班级:In);scanf(%s",t.classes):printf(请输入号码:In):scanf("%d",&t.tel):for(i=n;i>0;i--)/*所有元素后移*/(st[i+]]. number=st[n].number;strcpy(st[i+l].classes, st[i].classes);strcpy(st[i+1]. name, st[i]. name) :strcpy (st[i+]].sex, st[i].sex) ;st[i+1].tel=st[i]. tel;st[i]. number=t. number;strcpy(st[1].classes,t.classes) ;strcpy(st[1].name,t. name);strcpy(st[1].sex,t.sex):st[i]. tel=t, tel:p=n+1;16
16 虚实结合 任务先行——学生成绩管理系统的实现 教案 for(i=1;i<=n;i++) { printf(" 学号:%d\n ",st[i].number); printf(" 姓名:%s\n",st[i].name); printf(" 性别:%s\n",st[i].sex); printf(" 班级:%s\n",st[i].classes); printf("联系方式:%d\n",st[i].tel); printf("\n"); } } } int insert(struct data st[5],int n) /*定义插入函数*/ { int i,p; struct data t; if(n>=5) { printf("内存已满!\n"); printf("\n"); } else { printf("请输入学号:\n"); scanf("%d",&t.number); printf("请输入姓名:\n"); scanf("%s",t.name); printf("请输入性别:\n"); scanf("%s",t.sex); printf("请输入班级:\n"); scanf("%s",t.classes); printf("请输入号码:\n"); scanf("%d",&t.tel); } for(i=n;i>0;i-) /*所有元素后移*/ { st[i+1].number=st[n].number; strcpy(st[i+1].classes,st[i].classes); strcpy(st[i+1].name,st[i].name); strcpy(st[i+1].sex,st[i].sex); st[i+1].tel=st[i].tel; } st[1].number=t.number; strcpy(st[1].classes,t.classes); strcpy(st[1].name,t.name); strcpy(st[1].sex,t.sex); st[1].tel=t.tel; p=n+1;