system: [SYSTEM]

user: 3. 基于案例的教学方法 学生由于已经学完“C语言程序设计”课程，已经基本掌握该课程的基础知识，只是课上的很多知识可能是割裂的不成系统的，本课程需要将这些知识融会贯通，从而提高学生的编程能力。程序设计是一种技能性知识，需要在不断的实践中掌握，因此我们采用基于案例的教学方法。该方法的主要步骤如图1所示。 3.1. 案例设计 案例教学需要情景结合，师生互动，注重学生的实践活动。在基于案例的教学方法中，案例的选择是关键步骤。案例设计应该突出学生在教学中的主体地位，注重学生实践动手能力的培养。我们在案例设计中遵循四个原则：案例要具有的知识性和趣味性；案例要贴近实际应用；案例设计要以点带面循序渐进；案例设计注重培养学生以计算机思维解决实际问题。根据以上要求和原则，设计了以下两个实验，详情如表2所示。 3.2. 基础知识回顾 在解决实际问题时，学生应该先有解决问题的思路。这个思路对应到C程序设计中，就是要首先研究 Table 1 The priorities and difficulties of C programmin 知识点 教学内容和要求 重点和难点 数据类型 理解和掌握常量、变量以及基本类型的定义和分类，赋值运算符和赋值表达式的语法要求和使用。 赋值表达式 算数运算符和表达式 理解和掌握算术运算符和表达式的语法要求和使用，宏常量、宏替换和const常量的概念及使用，类型转换的二种方法，并能够使用这些概念和方法编写简单程序。 运算符的优先级 标准输入和输出 理解程序设计中数据输入、输出的概念，字符型常量和变量的输入/输出以及数据的格式化输入/输出，并能够使用这些概念和方法编程解决简单问题。 格式化输入和输出 程序控制结构 理解程序的控制结构和结构化程序设计的相关概念，算法的概念和描述方法，理解和掌握逻辑量的表示方法，能够理解并正确使用关系运算符、关系表达式、逻辑运算符和逻辑表达式，掌握if语句和switch语句的语法要求和使用方法，能够用if语句和switch语句编程解决实际问题，理解和掌握循环语句(while语句、do-while语句和for语句)的语法要求和使用，流程控制语句(break语句和continue语句)的语法要求和使用，能够使用循环语句和流程控制语句编程解决比较复杂的实际问题，并能够使用循环方法实现一些常用算法。 嵌套循环结构， break和continue语句 函数 理解和掌握函数的概念，变量的存储类型，并通过函数进一步理解结构程序设计概念，能够应用函数概念设计结构化程序，解决比较综合的实际问题。 形参和实参，参数传递中的值传递和引用传递(指针)，变量的生命周期 指针 理解地址运算符及指针的概念和含义，理解和掌握指针变量的定义和使用方法，学会使用指针变量传递函数参数和按地址调用函数，能够使用指针概念编程解决实际问题。 指针和数组的关系，函数指针，指针的本质 数组 理解指针和一维数组、指针和二维数组的关系，理解和掌握指针数组的含义和使用，能够使用指针和指针数组处理一维数组和二维数组的相关问题。 多维数组，指针数组和数组的指针 结构体和共用体 理解结构体类型的概念，理解和掌握结构体变量和结构体数组的定义及使用，学会向函数传递结构体和返回结构体指针，理解和掌握链表的含义、链表的定义和链表的基本操作，学会使用结构体变量和链表处理实际问题。 链表的定义和操作，共用体的大小，结构体嵌套 文件 理解文件的概念、含义和类型，理解和掌握文件基本操作，包括文件的访问、文件的建立、文件的读写和文件的复制，学会用文件的概念和操作解决一些实际问题。 文本文件和二进制文件，文件中的数据和程序中的数据 表1. C语言程序设计重难点 图1. 基于案例的教学方法的步骤 Table 2 Case detail 案例 描述 知识点 贪吃蛇游戏 “贪吃蛇”游戏是一款简单的益智类游戏，使用上下左右键控制“蛇”的移动方向，寻找“食物”，每吃一个“食物”就能得到一定的积分，并且“蛇”的身子越来越长，难度越来越大，“蛇”不能碰墙和障碍物也不能咬到自己的身体。当“蛇”违反以上规则时游戏结束。 该游戏包含以下功能。 · 人机操控平台：启动程序后，系统提供给用户一个操作界面，以便用户有效地操作游戏。 · 选择游戏难度：贪吃蛇游戏需要用户选择不同的难度，难度主要体现在蛇的移动速度上。 · 游戏绘制：绘制“墙”、障碍物、“食物”和“蛇”，并且输出游戏分数。 · 游戏操作和得分：使用上下左右键控制蛇的移动，寻找食物，食物分为普通食物和奖励性食物，吃普通食物蛇身会变长，分数增加，吃到奖励性食物，蛇身不变长，分数增加，但是奖励性食物有时间限制。 函数 数组 指针 结构体 宏定义 链表 文件 求任意多边形间的交集 任意二维多边形求交集是计算几何中较为基础的算法之一，其在很多场景下都有应用，如计算机图形学中的消隐处理，地理信息系统中的空间叠置分析、缓冲区分析应用等。 该程序要求如下： · 可以通过鼠标点击的方式所见即所得地输入多边形 · 算法能够处理凸多边形和凹多边形 · 输入的多边形不存在自交和退化的情况 · 程序应能够灵活地处理不同的输入和输出 可参考《一个有效的多边形裁剪算法》 [ 2 ] 的实现。 函数 链表 函数指针 结构体 表2. 案例详情 和确定算法。由于问题具有一定的复杂性，所以需要教师在课堂上进行适当的引导，指出解决这些问题需要使用的具体知识点。解决具体的问题，对于学生来说既新鲜好奇，又充满挑战。若解决问题的难度过大，学生就容易放弃。因此教师做好基础知识的回顾，适时地启发对于教学效果的提高具有至关重要的作用。 在知识回顾阶段，根据表2中知识点，安排合适的教学内容。以贪吃蛇游戏为例，要回顾的知识点包括：函数、数组、指针、结构体、宏定义、链表和文件等。在知识回顾的过程中，要结合具体的案例。如：贪吃蛇游戏中“蛇”的表示，需要记录“蛇”的坐标，可以使用数组也可以使用链表，由于需要经常在头部添加元素，故而使用链表。在这个过程中让学生明白了数组和链表在存储数据上的优缺点，加深了学生对基础知识的理解。 3.3. 分析问题 教师通过分析案例，启发学生使用计算机的思维去解决问题，同时让知识和案例结合的更为紧密，从而实现从实践到理论，从具体到抽象的学习。以“求任意多边形间的交集”为例，要想灵活地处理不同的输入和输出，那么就要求程序能够基于不同的数据结构工作，实现这个要求使用C语言中的函数指针能够很好地解决这个问题，仅需要调用者提供对应的数据输入和输出的函数，然后将函数指针作为参数传入算法就可以了。 分析问题的过程，是教师思路外化的过程。通过分析问题，学生可以学到教师思考问题的方式方法。这对于提高学生解决实际问题的能力是至关重要的。 3.4. 程序编写和调试 程序编写和调试是基于案例的教学方法的重要组成部分，也是提高学生编程能力的关键环节。通过上一步的问题分析，学生基本已经具有了解决问题的思路，程序编写是一个实现思路的过程，也是将所学的C语言知识应用于解决实际问题的过程。这个过程可以很好地提高学生的编程能力。在这个环节中，突出学生的主体作用，教师作为服务者，提供必要的答疑服务，引导学生正确地进行程序的编写和调试。 在这个环节，学生以小组的形式进行组织，设一名小组长。小组内通过讨论的方式进一步明确问题解决方案和步骤，将问题进行分解，每个成员负责一部分程序的编写。遇到问题，组内讨论找到合适的解决方案。 3.5. 成果汇报和结果评价 学生编写和测试完程序，完成了任务要求中的功能后，需要以小组的形式汇报本小组的工作。汇报需要包含程序设计的思路，主要的数据结构，重要的程序逻辑，程序运行结果，程序设计过程中遇到的问题以及解决方法。汇报最后分享程序设计过程中的感想。 学生通过成果汇报可以加深对专业知识的理解，同时又再次回顾了程序设计的过程，可以站在更高的高度去理解和思考问题，可谓一举多得。 最后教师根据汇报的实际情况进行评价，对学生讲解过程中出现的问题进行指导，对一些关键的知识点和实现方法进行提问，促进学生真正地掌握这些知识。