“C语言程序设计”课程是许多高校计算机类专业的编程入门课程,为了巩固专业知识,提高编程能力,该课程后续会进行以实践为主的课程设计。本文分析了C语言程序设计的知识体系和重难点,在此基础上提出了基于案例的教学方法,并设计了两个案例,详细描述了该教学方法的过程和注意事项。 The “C programming” course is a programming introductory course for many computer majors in universities. In order to consolidate professional knowledge and improve programming skills, the practice-oriented curriculum design will be followed. This paper analyzes the knowledge system and the key and difficult knowledge of the language programming. Based on this, we propose a case-based teaching method and design two cases. The process and precautions of the teaching method are described in detail.
杨帅,薛永江
天津工业大学计算机科学与软件学院,天津
收稿日期:2018年6月14日;录用日期:2018年6月30日;发布日期:2018年7月6日
“C语言程序设计”课程是许多高校计算机类专业的编程入门课程,为了巩固专业知识,提高编程能力,该课程后续会进行以实践为主的课程设计。本文分析了C语言程序设计的知识体系和重难点,在此基础上提出了基于案例的教学方法,并设计了两个案例,详细描述了该教学方法的过程和注意事项。
关键词 :C语言程序设计,编程能力,案例
Copyright © 2018 by authors and Hans Publishers Inc.
This work is licensed under the Creative Commons Attribution International License (CC BY).
http://creativecommons.org/licenses/by/4.0/
随着科技的进步和计算机的普及,社会对程序开发人员的需求与日俱增。C语言程序设计作为一门面向过程的程序设计语言,其教学目的是培养学生初步具有求解复杂科学问题的计算思维能力、算法设计能力、程序编程能力和测试分析能力 [
为了培养学生的编程思维和编程兴趣,提高学生的编程能力,巩固C语言知识,我院在大一下学期开设了为期两周(共30学时)的“C程序课程设计”课。该课程以提高学生的编程能力为目标,采用案例教学的方法,课上以学生练习和汇报为主。该课程在实践的过程中融入了当今翻转课堂的理念,比较适合工科背景下程序设计类课程的教学。
根据提高学生编程能力的要求,该课程需要重点培养学生的以下能力:问题的抽象与描述、算法的分析与设计、数据表达与构造、程序编写与测试。C程序设计的教学内容主要包括以下几部分:数据类型、算术运算和表达式、标准输入和输出、程序控制结构、函数、指针、数组、结构体和共用体、文件等。每部分的教学内容和要求、重点和难点如表1所示。
学生由于已经学完“C语言程序设计”课程,已经基本掌握该课程的基础知识,只是课上的很多知识可能是割裂的不成系统的,本课程需要将这些知识融会贯通,从而提高学生的编程能力。程序设计是一种技能性知识,需要在不断的实践中掌握,因此我们采用基于案例的教学方法。该方法的主要步骤如图1所示。
案例教学需要情景结合,师生互动,注重学生的实践活动。在基于案例的教学方法中,案例的选择是关键步骤。案例设计应该突出学生在教学中的主体地位,注重学生实践动手能力的培养。我们在案例设计中遵循四个原则:案例要具有的知识性和趣味性;案例要贴近实际应用;案例设计要以点带面循序渐进;案例设计注重培养学生以计算机思维解决实际问题。根据以上要求和原则,设计了以下两个实验,详情如表2所示。
在解决实际问题时,学生应该先有解决问题的思路。这个思路对应到C程序设计中,就是要首先研究
知识点 | 教学内容和要求 | 重点和难点 |
---|---|---|
数据类型 | 理解和掌握常量、变量以及基本类型的定义和分类,赋值运算符和赋值表达式的语法要求和使用。 | 赋值表达式 |
算数运算符和表达式 | 理解和掌握算术运算符和表达式的语法要求和使用,宏常量、宏替换和const常量的概念及使用,类型转换的二种方法,并能够使用这些概念和方法编写简单程序。 | 运算符的优先级 |
标准输入和输出 | 理解程序设计中数据输入、输出的概念,字符型常量和变量的输入/输出以及数据的格式化输入/输出,并能够使用这些概念和方法编程解决简单问题。 | 格式化输入和输出 |
程序控制结构 | 理解程序的控制结构和结构化程序设计的相关概念,算法的概念和描述方法,理解和掌握逻辑量的表示方法,能够理解并正确使用关系运算符、关系表达式、逻辑运算符和逻辑表达式,掌握if语句和switch语句的语法要求和使用方法,能够用if语句和switch语句编程解决实际问题,理解和掌握循环语句(while语句、do-while语句和for语句)的语法要求和使用,流程控制语句(break语句和continue语句)的语法要求和使用,能够使用循环语句和流程控制语句编程解决比较复杂的实际问题,并能够使用循环方法实现一些常用算法。 | 嵌套循环结构, break和continue语句 |
函数 | 理解和掌握函数的概念,变量的存储类型,并通过函数进一步理解结构程序设计概念,能够应用函数概念设计结构化程序,解决比较综合的实际问题。 | 形参和实参,参数传递中的值传递和引用传递(指针),变量的生命周期 |
指针 | 理解地址运算符及指针的概念和含义,理解和掌握指针变量的定义和使用方法,学会使用指针变量传递函数参数和按地址调用函数,能够使用指针概念编程解决实际问题。 | 指针和数组的关系,函数指针,指针的本质 |
数组 | 理解指针和一维数组、指针和二维数组的关系,理解和掌握指针数组的含义和使用,能够使用指针和指针数组处理一维数组和二维数组的相关问题。 | 多维数组,指针数组和数组的指针 |
结构体和共用体 | 理解结构体类型的概念,理解和掌握结构体变量和结构体数组的定义及使用,学会向函数传递结构体和返回结构体指针,理解和掌握链表的含义、链表的定义和链表的基本操作,学会使用结构体变量和链表处理实际问题。 | 链表的定义和操作,共用体的大小,结构体嵌套 |
文件 | 理解文件的概念、含义和类型,理解和掌握文件基本操作,包括文件的访问、文件的建立、文件的读写和文件的复制,学会用文件的概念和操作解决一些实际问题。 | 文本文件和二进制文件,文件中的数据和程序中的数据 |
表1. C语言程序设计重难点
图1. 基于案例的教学方法的步骤
案例 | 描述 | 知识点 |
---|---|---|
贪吃蛇游戏 | “贪吃蛇”游戏是一款简单的益智类游戏,使用上下左右键控制“蛇”的移动方向,寻找“食物”,每吃一个“食物”就能得到一定的积分,并且“蛇”的身子越来越长,难度越来越大,“蛇”不能碰墙和障碍物也不能咬到自己的身体。当“蛇”违反以上规则时游戏结束。 该游戏包含以下功能。 · 人机操控平台:启动程序后,系统提供给用户一个操作界面,以便用户有效地操作游戏。 · 选择游戏难度:贪吃蛇游戏需要用户选择不同的难度,难度主要体现在蛇的移动速度上。 · 游戏绘制:绘制“墙”、障碍物、“食物”和“蛇”,并且输出游戏分数。 · 游戏操作和得分:使用上下左右键控制蛇的移动,寻找食物,食物分为普通食物和奖励性食物,吃普通食物蛇身会变长,分数增加,吃到奖励性食物,蛇身不变长,分数增加,但是奖励性食物有时间限制。 | 函数 数组 指针 结构体 宏定义 链表 文件 |
求任意多边形间的交集 | 任意二维多边形求交集是计算几何中较为基础的算法之一,其在很多场景下都有应用,如计算机图形学中的消隐处理,地理信息系统中的空间叠置分析、缓冲区分析应用等。 该程序要求如下: · 可以通过鼠标点击的方式所见即所得地输入多边形 · 算法能够处理凸多边形和凹多边形 · 输入的多边形不存在自交和退化的情况 · 程序应能够灵活地处理不同的输入和输出 可参考《一个有效的多边形裁剪算法》 [ | 函数 链表 函数指针 结构体 |
表2. 案例详情
和确定算法。由于问题具有一定的复杂性,所以需要教师在课堂上进行适当的引导,指出解决这些问题需要使用的具体知识点。解决具体的问题,对于学生来说既新鲜好奇,又充满挑战。若解决问题的难度过大,学生就容易放弃。因此教师做好基础知识的回顾,适时地启发对于教学效果的提高具有至关重要的作用。
在知识回顾阶段,根据表2中知识点,安排合适的教学内容。以贪吃蛇游戏为例,要回顾的知识点包括:函数、数组、指针、结构体、宏定义、链表和文件等。在知识回顾的过程中,要结合具体的案例。如:贪吃蛇游戏中“蛇”的表示,需要记录“蛇”的坐标,可以使用数组也可以使用链表,由于需要经常在头部添加元素,故而使用链表。在这个过程中让学生明白了数组和链表在存储数据上的优缺点,加深了学生对基础知识的理解。
教师通过分析案例,启发学生使用计算机的思维去解决问题,同时让知识和案例结合的更为紧密,从而实现从实践到理论,从具体到抽象的学习。以“求任意多边形间的交集”为例,要想灵活地处理不同的输入和输出,那么就要求程序能够基于不同的数据结构工作,实现这个要求使用C语言中的函数指针能够很好地解决这个问题,仅需要调用者提供对应的数据输入和输出的函数,然后将函数指针作为参数传入算法就可以了。
分析问题的过程,是教师思路外化的过程。通过分析问题,学生可以学到教师思考问题的方式方法。这对于提高学生解决实际问题的能力是至关重要的。
程序编写和调试是基于案例的教学方法的重要组成部分,也是提高学生编程能力的关键环节。通过上一步的问题分析,学生基本已经具有了解决问题的思路,程序编写是一个实现思路的过程,也是将所学的C语言知识应用于解决实际问题的过程。这个过程可以很好地提高学生的编程能力。在这个环节中,突出学生的主体作用,教师作为服务者,提供必要的答疑服务,引导学生正确地进行程序的编写和调试。
在这个环节,学生以小组的形式进行组织,设一名小组长。小组内通过讨论的方式进一步明确问题解决方案和步骤,将问题进行分解,每个成员负责一部分程序的编写。遇到问题,组内讨论找到合适的解决方案。
学生编写和测试完程序,完成了任务要求中的功能后,需要以小组的形式汇报本小组的工作。汇报需要包含程序设计的思路,主要的数据结构,重要的程序逻辑,程序运行结果,程序设计过程中遇到的问题以及解决方法。汇报最后分享程序设计过程中的感想。
学生通过成果汇报可以加深对专业知识的理解,同时又再次回顾了程序设计的过程,可以站在更高的高度去理解和思考问题,可谓一举多得。
最后教师根据汇报的实际情况进行评价,对学生讲解过程中出现的问题进行指导,对一些关键的知识点和实现方法进行提问,促进学生真正地掌握这些知识。
从2016年开始,在天津工业大学计算机科学与软件学院物联网工程专业中,使用了本文提出的以培养编程能力为导向的基于案例的教学方法。在实践的过程中,注重突出学生的主体作用,教师作为引导者,以学生动手实践为主,使用分组自主学习的方法,培养学生的编程能力。该方法取得了良好的教学效果。案例的设计以及导入是实现该教学模式的关键,案例的知识性和趣味性是该模式下教学效果的保证。今后仍需进一步设计更多具有知识性和趣味性的案例,丰富教学内容。
天津工业大学教改项目(Y20160419)。
杨 帅,薛永江. 以培养编程能力为导向的C程序课程设计教学实践 C Program Training Teaching Practice for Cultivating Programming Ability[J]. 教育进展, 2018, 08(04): 407-411. https://doi.org/10.12677/AE.2018.84062