虚实结合任务先行——学生成绩管理系统的实现教案链表的查找运算1、观察图例教学设计思路:1、虚拟仿真演示查找原理;演示和动画演1、仿真演示。帮助学2、课堂讨论总结查找步骤:示,了解数据生建立抽象的空间想(1)令计数器j为0;元素查找过象,直观感受到地址(2)令p指向头结点:程;的动态变换过程;(3)当下一个结点不空时,并且j<i2、根据对查2、分组讨论。由于查时,j加1,P指向下一个结点;找过程的理解询思想在之前删除和(4)如果j等于i,则p所指结点为要小组讨论插入插入的程序算法中已找的第i结点,否则,链表中无第i结步骤;有所涉及,因此,分点。3、根据图组讨论可以提升学生3、图例演示,回顾插入过程,辅以实现例,利用前导的总结能力以及对之的程序代码:课程“C语言前的知识关键信息提Cead-3-18--30--75--421-560程序设计”中取能力;的“指针”知3、图例演示。引导学i5p1012min识点,用程序生用程序语句进行描4、项目实现,在有序数列(3,7,9,段描述地址变述,在逻辑抽象和实16,32,54,78查询数据16的位置化过程;际实践之间建立连回顾前两个功能实现步骤,引导学生总结4、根据现有接;查询步骤,并细化不同查询情况的具体操4、根据对插入和删除知识积累,总作,包括定位查询和定值查询。结查询的步过程步骤的理解,提根据项目功能选择确认查询类型,绘骤,细化查询取出查询的程序流程制流程图并进行程序实现。的种类;图,并自行完成项目5、课堂练习:5、回顾之前实现,内化理论知对项目进行讨论,绘制另一种查询的所学,对单链识,提升实践技能。流程图并进行程序实现。表进行总结,教学资源:6、阶段总结:分析各操作之PPT讲解,虚拟仿引导学生回顾课堂知识,讨论总结单真,示例图演示,案间的区别和联链表的操作类型,以及各操作类型直接的系。例分析。区别和练习。1、观察图例教学设计思路:知识迁移及拓展演示和动画演1、仿真演示。通过对链表的其他形式示,了解循环结点动态变化过程的1、循环链表链表和双向链演示,帮助学生建立(1)虚拟仿真演示循环链表的结构形表的结构特抽象的空间想象,直式;征,以及插观感受到地址的动态变换过程;入、删除等操新的作的内存变化2、分组讨论,帮助学白过程;15min11:生在讨论总结的过程正路份2、讨论三种中内化知识点,建立(2)与单链表对比,分析单链表和单循不同链表插自己的知识架构;环链表之间的异同;入、删除和查3、思维拓展。如果将单链表最后一个结点的指针指找的步骤的不通过对不同链表存储向头结点,使链表形成一个环形,此链表同;结构的特点,在生活就称为循环链表(CircularLink3、根据图中寻找应用实例,培List)。例,利用前导养学生在解决问题时(3)分组讨论,在实际应用中,单链表课程“C语言进行多方面思考的能27
27 虚实结合 任务先行——学生成绩管理系统的实现 教案 10 链表的查找运算 1、虚拟仿真演示查找原理; 2、课堂讨论总结查找步骤: (1)令计数器 j 为 0; (2)令 p 指向头结点; (3)当下一个结点不空时,并且 j<i 时, j 加 1,p 指向下一个结点; (4)如果 j 等于 i,则 p 所指结点为要 找的第 i 结点,否则,链表中无第 i 结 点。 3、图例演示,回顾插入过程,辅以实现 的程序代码: 4、项目实现,在有序数列{3,7,9, 16,32,54,78}查询数据 16 的位置 回顾前两个功能实现步骤,引导学生总结 查询步骤,并细化不同查询情况的具体操 作,包括定位查询和定值查询。 根据项目功能选择确认查询类型,绘 制流程图并进行程序实现。 5、课堂练习: 对项目进行讨论,绘制另一种查询的 流程图并进行程序实现。 6、阶段总结: 引导学生回顾课堂知识,讨论总结单 链表的操作类型,以及各操作类型直接的 区别和练习。 1、观察图例 演示和动画演 示,了解数据 元素查找过 程; 2、根据对查 找过程的理解 小组讨论插入 步骤; 3、根据图 例,利用前导 课程“C 语言 程序设计”中 的“指针”知 识点,用程序 段描述地址变 化过程; 4、根据现有 知识积累,总 结查询的步 骤,细化查询 的种类; 5、回顾之前 所学,对单链 表进行总结, 分析各操作之 间的区别和联 系。 12min 教学设计思路: 1、仿真演示。帮助学 生建立抽象的空间想 象,直观感受到地址 的动态变换过程; 2、分组讨论。由于查 询思想在之前删除和 插入的程序算法中已 有所涉及,因此,分 组讨论可以提升学生 的总结能力以及对之 前的知识关键信息提 取能力; 3、图例演示。引导学 生用程序语句进行描 述,在逻辑抽象和实 际实践之间建立连 接; 4、根据对插入和删除 过程步骤的理解,提 取出查询的程序流程 图,并自行完成项目 实现,内化理论知 识,提升实践技能。 教学资源: PPT 讲解,虚拟仿 真,示例图演示,案 例分析。 11 知识迁移及拓展 链表的其他形式 1、循环链表 (1)虚拟仿真演示循环链表的结构形 式; (2)与单链表对比,分析单链表和单循 环链表之间的异同; 如果将单链表最后一个结点的指针指 向头结点,使链表形成一个环形,此链表 就称为循环链表(Circular Link List)。 (3)分组讨论,在实际应用中,单链表 1、观察图例 演示和动画演 示,了解循环 链表和双向链 表的结构特 征,以及插 入、删除等操 作的内存变化 过程; 2、讨论三种 不同链表插 入、删除和查 找的步骤的不 同; 3、根据图 例,利用前导 课程“C 语言 15min 教学设计思路: 1、仿真演示。通过对 结点动态变化过程的 演示,帮助学生建立 抽象的空间想象,直 观感受到地址的动态 变换过程; 2、分组讨论,帮助学 生在讨论总结的过程 中内化知识点,建立 自己的知识架构; 3、思维拓展。 通过对不同链表存储 结构的特点,在生活 中寻找应用实例,培 养学生在解决问题时 进行多方面思考的能
虚实结合任务先行一—学生成绩管理系统的实现教案和单循环链表的使用环境程序设计”中力和习惯。面对具体的“指针”知2、双向链表问题能够灵活分析灵活处理。(1)虚拟仿真演示双向链表的结构形识点,用程序式:段描述地址变教学资源:化过程;PPT讲解,虚拟仿1等表关结点的改库博技4、根据三种真,示例图演示。不同链表的特head点,讨论他们等大实范点期及风界道(2)虚拟仿真演示双链表的插入运算:的应用环境。T 国TStAmBAq->prior=p;g->next=p->next(p->next)->prior=q;p->next=q;(3)虚拟仿真演示双链表的删除运算(p->prior)->next=p->next;(p->next)->prior=p->prior;free(p);(5)总结循环链表的结构特点;(6)对比单链表和单循环链表,分析三者之间的异同。包括不同操作需求下,三种链表的实际内存变化的区别;(7)分组讨论,在实际应用中,这三种链表的实际应用环境。课堂小结1、线性表是一种具有一对一的线性关系教学设计思路:的特殊数据结构。线性表有两种存储方1、便于构成了一个完法:用顺序存储方法来表示这种线性关整的知识体系。使学生系,得到顺序存储结构(即顺序表);用在自己的头脑中形成知识网络.从而达到提链式存储方式来表示这种线性关系,得到纲挚领的目的:线性表的链式存储结构(即链表);回顾本节课知2、使学生带着问题进2、线性表的链式存储结构,是通过结点识,构建知识2min12之间的链接而得到的,链式存储结构有单入教室,带着更多的架构。链表、双向链表和循环链表等;问题离开教室,培养3、单链表结点至少有两个域:一个数据域学生探究精神。和一个指针域。双向链表结点至少含有三个域:一个数据域和两个指针域;4.循环链表不存在空指针,最后一个结点的指针指向表头,形成一个首尾相接的28
28 虚实结合 任务先行——学生成绩管理系统的实现 教案 和单循环链表的使用环境 2、双向链表 (1)虚拟仿真演示双向链表的结构形 式: (2)虚拟仿真演示双链表的插入运算: q->prior=p; q->next=p->next; (p->next)->prior=q; p->next=q; (3)虚拟仿真演示双链表的删除运算 (p->prior)->next=p->next; (p->next)->prior=p->prior; free (p); (5)总结循环链表的结构特点; (6)对比单链表和单循环链表,分析三 者之间的异同。包括不同操作需求下,三 种链表的实际内存变化的区别; (7)分组讨论,在实际应用中,这三种 链表的实际应用环境。 程序设计”中 的“指针”知 识点,用程序 段描述地址变 化过程; 4、根据三种 不同链表的特 点,讨论他们 的应用环境。 力和习惯。面对具体 问题能够灵活分析灵 活处理。 教学资源: PPT 讲解,虚拟仿 真,示例图演示。 课堂小结 12 1、线性表是一种具有一对一的线性关系 的特殊数据结构。 线性表有两种存储方 法:用顺序存储方法来表示这种线性关 系,得到顺序存储结构(即顺序表);用 链式存储方式来表示这种线性关系,得到 线性表的链式存储结构(即链表); 2、线性表的链式存储结构,是通过结点 之间的链接而得到的,链式存储结构有单 链表、双向链表和循环链表等; 3、单链表结点至少有两个域:一个数据域 和一个指针域。双向链表结点至少含有三 个域:一个数据域和两个指针域; 4. 循环链表不存在空指针,最后一个结 点的指针指向表头,形成一个首尾相接的 回顾本节课知 识,构建知识 架构。 2min 教学设计思路: 1、便于构成了一个完 整的知识体系。使学生 在自己的头脑中形成 知识网络.从而达到提 纲挈领的目的; 2、使学生带着问题进 入教室,带着更多的 问题离开教室,培养 学生探究精神
虚实结合任务先行一一学生成绩管理系统的实现教案环;5.为了处理问题方便,在链表中增加一个头结点;6.顺序存储可以提高存储单元的利用率,不便于插入和删除运算。链式存储会占用较多的存储空间,可以使用不连续的存储单元,插入、删除运算较方便。项目分析教学设计思路:根据企业导师点评进行自我企业导师根据行业标1、课堂连线企业导师,对上节课利用顺反思,及时进准进行项目分析及点序表实现系统功能的项目实践进行点评;行自我学习调评,帮助学生及时发132、对本节课利用链表实现系统功能进行8min整,分析本节现问题、解决问题,项目分析,说明评价标准,强调注意事课项目实现的强化对知识的理解,项。设计要点,进提升学生的职业素养。行算法设计。八、知识拓展1、拓展训练学生成绩统计表学号姓名数学物理外语总分1李华8889902672王芳9890872753张丽7884902524田爽896978236用程序实现以下功能:(1)插入新的一条记录“孟想,79,76,95,250”(2)删除第3条记录;(3)查询王芳在第几条记录;(4)依次输出表中所有记录。2、考证(考研)训练:(2012年考研真题)关于线性表的顺序存储结构和链式存储结构,描述正确的是()。(1)线性表的顺序存储结构优于其链式存储结构。(2)链式存储结构比顺序存储结构能更方便地表示各种逻辑结构。(3)如频繁进行插入、删除结点操作,顺序存储结构更优于链式存储结构。(4)顺序存储结构和链式存储结构都可以进行顺序存取。A.(1)、(2)(3)B.(2)、(4)C.(2)、(3)D.(3)、(4)(软件水平考试)在单链表中,若p结点不是末尾结点,在其后插人s结点的操作是()。A.s->next=p:p->next=s:B.s->next=p->next;p->next=s;C.s->next=p->next;p=s;D.p->next=s;s-> next=p;3、竞赛训练29
29 虚实结合 任务先行——学生成绩管理系统的实现 教案 环; 5. 为了处理问题方便,在链表中增加一 个头结点; 6. 顺序存储可以提高存储单元的利用 率,不便于插入和删除运算。链式存储会 占用较多的存储空间,可以使用不连续的 存储单元,插入、删除运算较方便。 项目分析 13 1、课堂连线企业导师,对上节课利用顺 序表实现系统功能的项目实践进行点评; 2、对本节课利用链表实现系统功能进行 项目分析,说明评价标准,强调注意事 项。 根据企业导师 点评进行自我 反思,及时进 行自我学习调 整,分析本节 课项目实现的 设计要点,进 行算法设计。 8min 教学设计思路: 企业导师根据行业标 准进行项目分析及点 评,帮助学生及时发 现问题、解决问题, 强化对知识的理解, 提升学生的职业素 养。 1、拓展训练 学生成绩统计表 用程序实现以下功能: (1)插入新的一条记录“孟想,79,76,95,250”; (2)删除第 3 条记录; (3)查询王芳在第几条记录; (4)依次输出表中所有记录。 2、考证(考研)训练: (2012 年考研真题)关于线性表的顺序存储结构和链式存储结构,描述正确的是( )。 (1)线性表的顺序存储结构优于其链式存储结构。 (2)链式存储结构比顺序存储结构能更方便地表示各种逻辑结构。 (3)如频繁进行插入、删除结点操作,顺序存储结构更优于链式存储结构。 (4)顺序存储结构和链式存储结构都可以进行顺序存取。 A. (1)、(2)、(3) B. (2)、(4) C. (2)、(3) D. (3)、(4) (软件水平考试)在单链表中,若 p 结点不是末尾结点,在其后插人 s 结点的操作是( )。 A. s-> next=p; p-> next=s; B. s-> next=p-> next; p-> next=s; C. s-> next=p-> next; p=s; D. p-> next=s; s-> next=p; 3、竞赛训练 学号 姓名 数学 物理 外语 总分 1 李华 88 89 90 267 2 王芳 98 90 87 275 3 张丽 78 84 90 252 4 田爽 89 69 78 236
虚实结合任务先行一一学生成绩管理系统的实现教案蓝桥杯线性表部分https://dasai.langiao.cn/notices/1096/。九、教学评价与反馈本节课是数据结构第一种类型一线性结构的第二节课,涉及到链表的特征、在内存中的存储形式、以及在进行数据操作过程中内存地址的变化过程。理论知识较为抽象,需要学生加入个人的空间想象辅助理解。此外,在建立了空间逻辑结构的基础上还需要将其以程序的形式进行实现,因此,课程的实操性也很强。由于在上一节课的学习中,学生已经掌握了线性结构和顺序表的基本操作,并实现了项目案例的所有功能。因此,本节课在讲授过程中,将“对比“贯穿始终。在讲单链表的时候,从链表的结构、存储方式到基本操作的程序实现,通过观看动画并引导学生讨论的方式,让大家主动的不断的与顺序表进行对比;在学习链表其他结构的时候,引导大家将当前数据结构与单链表相比,以头脑风暴的形式深化学生对链表不同结构的理解。而对于实践技能训练部分,通过小组讨论总结知识点、课堂回答问题、课堂练习等多种形式相结合的形式,每个学生都充分、全程并且深度参与课堂互动中,在体验、经验的基础上领悟、归纳、总结知识点,通过理解程序一一仿写程序一一知识迁移的形式逐步将抽象的数据结构形式转化为个人对程序的理解,并实现了其功能。达到了预想的教学效果。由于学生已经利用线性表实现了项目功能,因此,在课后知识拓展部分,学生利用已掌握的顺序表的知识,对比新学习的链表知识,对系统功能进行分析,讨论系统实现的最佳数据结构,完善系统功能,对其进行优化。在此期间,既巩固了已学的知识点,又深化了对现学知识点的理解和把握,并通过对比,将不同数据结构与实践应用相结合,提升了学生的实际应用能力。本节课存在的问题主要集中体现在双向链表的实际应用中。由于双向链表的操作包括两个指针域,学生在习惯了单链表操作的前提下,一时难以转换思路,利用逆向思维同时考虑两个指针的变换。在后续的学习中,应该对前导课程“C语言程序设计”指针和结构体两部分知识进行强化练习,提升基本程序的操作技能,此外,通过学习复合数据存储的范例程序,尝试解决类似的其他复合数据的相关功能,完成知识的拓展,深化理论知识理解。十、教学总结本节课采用项目教学法展开教学,课堂上通过一个简单的有序数据的增、删、查的基本操作,了解到在内存中数据的地址变换方式,将抽象的空间想象以具体的程序进行了实现,建立逻辑结构与功能实践之间的联系,深化理论知识理解,提升实践技能,并将“对比“这样的行为贯穿教学过程始终。由于理论知识涉及到内存地址的变化,较为抽象,在讲解过程中采用“示例图讲解+动画演示+对比+学生自主总结”的方式进行理论知识讲解。学生通过与顺序表的对比,主动对链表进行总结,提升了学生的自我效能感,有效的将课堂知识内化到学生自身构建的知识体系中。实践操作部分,由于学生在学习顺序表的时候已经完成了项目的所有功能的实现,对项目有了较为深刻的认知和理解。因此,本节课采用“对比”的方式,引导学生重新分析项目案例,从系统功能角度分析采用不同的数据结构,其算法复杂度和程序运行效率是否有所不同,从而重新对项目进行规划,优化系统功能。在这个过程中,一方面深化学生对知识的理解和灵活应用,另一方也锻炼了学生多角度全方位思考问题的习惯,提升了他们的实践技能和职业素养。在整个课堂实施过程中,通过课堂回答问题、课堂练习以及小组讨论的形式,使学生全程参与课堂教学始终,保持了良好的、积极的课堂氛围。30
30 虚实结合 任务先行——学生成绩管理系统的实现 教案 蓝桥杯线性表部分 https://dasai.lanqiao.cn/notices/1096/。 本节课是数据结构第一种类型—线性结构的第二节课,涉及到链表的特征、在内存中的存 储形式、以及在进行数据操作过程中内存地址的变化过程。理论知识较为抽象,需要学生加入 个人的空间想象辅助理解。此外,在建立了空间逻辑结构的基础上还需要将其以程序的形式进 行实现,因此,课程的实操性也很强。 由于在上一节课的学习中,学生已经掌握了线性结构和顺序表的基本操作,并实现了项目 案例的所有功能。因此,本节课在讲授过程中,将“对比“贯穿始终。在讲单链表的时候,从 链表的结构、存储方式到基本操作的程序实现,通过观看动画并引导学生讨论的方式,让大家 主动的不断的与顺序表进行对比;在学习链表其他结构的时候,引导大家将当前数据结构与单 链表相比,以头脑风暴的形式深化学生对链表不同结构的理解。而对于实践技能训练部分,通 过小组讨论总结知识点、课堂回答问题、课堂练习等多种形式相结合的形式,每个学生都充 分、全程并且深度参与课堂互动中,在体验、经验的基础上领悟、归纳、总结知识点,通过理 解程序——仿写程序——知识迁移的形式逐步将抽象的数据结构形式转化为个人对程序的理 解,并实现了其功能。达到了预想的教学效果。 由于学生已经利用线性表实现了项目功能,因此,在课后知识拓展部分,学生利用已掌握 的顺序表的知识,对比新学习的链表知识,对系统功能进行分析,讨论系统实现的最佳数据结 构,完善系统功能,对其进行优化。在此期间,既巩固了已学的知识点,又深化了对现学知识 点的理解和把握,并通过对比,将不同数据结构与实践应用相结合,提升了学生的实际应用能 力。 本节课存在的问题主要集中体现在双向链表的实际应用中。由于双向链表的操作包括两个 指针域,学生在习惯了单链表操作的前提下,一时难以转换思路,利用逆向思维同时考虑两个 指针的变换。 在后续的学习中,应该对前导课程“C 语言程序设计”指针和结构体两部分知识进行强化 练习,提升基本程序的操作技能,此外,通过学习复合数据存储的范例程序,尝试解决类似的 其他复合数据的相关功能,完成知识的拓展,深化理论知识理解。 本节课采用项目教学法展开教学,课堂上通过一个简单的有序数据的增、删、查的基本操 作,了解到在内存中数据的地址变换方式,将抽象的空间想象以具体的程序进行了实现,建立 逻辑结构与功能实践之间的联系,深化理论知识理解,提升实践技能,并将“对比“这样的行 为贯穿教学过程始终。 由于理论知识涉及到内存地址的变化,较为抽象,在讲解过程中采用“示例图讲解+动画演 示+对比+学生自主总结”的方式进行理论知识讲解。学生通过与顺序表的对比,主动对链表进 行总结,提升了学生的自我效能感,有效的将课堂知识内化到学生自身构建的知识体系中。 实践操作部分,由于学生在学习顺序表的时候已经完成了项目的所有功能的实现,对项目 有了较为深刻的认知和理解。因此,本节课采用“对比”的方式,引导学生重新分析项目案 例,从系统功能角度分析采用不同的数据结构,其算法复杂度和程序运行效率是否有所不同, 从而重新对项目进行规划,优化系统功能。在这个过程中,一方面深化学生对知识的理解和灵 活应用,另一方也锻炼了学生多角度全方位思考问题的习惯,提升了他们的实践技能和职业素 养。 在整个课堂实施过程中,通过课堂回答问题、课堂练习以及小组讨论的形式,使学生全程 参与课堂教学始终,保持了良好的、积极的课堂氛围
虚实结合任务先行一学生成绩管理系统的实现教案十一、项目实现代码(关键代码段)struct stu (int num :char name[10];float s[3];char dj[3];struct stu *next;1:intinput()输入函数fkey_teacher()://调用登陆界面函数struct stu *head=NULL,*pnew=NULL;char i;head=pnew=(struct stu *)malloc(sizeof (struct stu ));head->next =NULL:printf("请输入学员成绩信息:n");printf("请输入学员的学号:In"):scanf ("%d,&pnew->num);printf("请输入学员的姓名:In");scanf ("%s",pnew->name );printf("请输入学员的c语言成绩:\n"));scanf("%f",&pnew->s[0]);printf("请输入学员的网络成绩:In");scanf("%f",&pnew->s[i]);printf("请输入学员的英语成绩:In");scanf("%f",&pnew->s [2]);for (::)1printf("是否继续输入学员成绩信息(y/n):In);getchar():i=getchar ();if (i=--'y' lli--'y')pnew=creat(pnew) ;else if(i=-"'n'lli--'N)1save (head):break;1elseprintf("您的输入有误,请重新输入,");1return o:31
31 虚实结合 任务先行——学生成绩管理系统的实现 教案 struct stu { int num ; char name[10]; float s[3]; char dj[3]; struct stu *next ; }; int input () // 输入函数 { key_teacher ();//调用登陆界面函数 struct stu *head=NULL,*pnew=NULL; char i; head=pnew=(struct stu *)malloc(sizeof (struct stu )); head->next =NULL; printf ("请输入学员成绩信息:\n"); printf ("请输入学员的学号:\n"); scanf ("%d",&pnew->num); printf ("请输入学员的姓名:\n"); scanf ("%s",pnew->name ); printf ("请输入学员的c语言成绩:\n"); scanf ("%f",&pnew->s[0]); printf ("请输入学员的网络成绩:\n"); scanf ("%f",&pnew->s[1]); printf ("请输入学员的英语成绩:\n"); scanf ("%f",&pnew->s [2]); for (;;) { printf ("是否继续输入学员成绩信息( y / n ):\n"); getchar( ); i =getchar ( ); if (i=='y'||i=='Y') pnew=creat(pnew); else if(i=='n'||i=='N') { save (head); break; } else printf ("您的输入有误,请重新输入,"); } return 0;