以计算思维为导向的C语言课程研究
C语言是我院针对非计算机专业开设的计算机类公共基础课程,也是计算机专业及相关专业的专业基础课。在该门课程的教学中一直存在一些问题:[1]
(1)我院非计算机专业学生约占全体学生的90%,大部分学生认为自己毕业又不从事计机软件开发,与后续课程结合又不紧密,所以学习的主动性和自觉性下降。人在课堂,心却不在听课状态,厌学情绪明显,学习效益低下。
(2)C语言的课程采取大班上课,学生的水平参差不齐,随着程序设计知识点增多,大量的难以理解和记忆的新概念、新术语、新规则出现以后,学生逐渐感觉课程难度大,更加无心学习。
(3)课堂内容与实际问题脱节C语言是一门理论和实践性都很强的课程。教学中重理论轻实践,实践课时不足,对程序设计能力的培养不够。
(4)重语法,轻算法。现有的C语言教材中首先要介绍编程涉及的语法格式,然后讲解语法要点和注意事项,对算法描述内容涉及甚少。再加上计算机等级考试的内容主要包括选择题、判断题、填空题、程序填空、程序改错、程序编程题等,都是侧重语法,无疑这种考查方法使得学生的程序设计能力降低。
(5)C语言的语法结构一般都是零散的,学生难于相互关联、总结,采用的案例也是比较零散、短小的、关联不大。学生经常是学会了全部的语法,但仍不知道这门课能做什么,能解决什ห么实际的问题,甚至不知道如何解决问题。
1 计算机思维
近年来,随着计算思维概念的提出,各大高校相继把计算思维引入到计算机类课程教学中,围绕计算思维能力的培养开展课程教学。那么,究竟什么是计算思维? ☻
计算机思维的概念和特征:周以真教授于20★06年在Communications of the ACM期刊上首次提出了计算思维的基本概念:计算思维是运用计算机科学的基础概念进行问题求解、系统设计以及人类行为理解等涵盖计算机科学之广度的一系列思维活动为便于理解。计算思维作为一种思维活动,它不是僵化的一种具体问题的解决方法,而是具有很好普适性的思考方式,提供的是一种方法论。[2]
2 如何在C语言课程中培养计算思维能力?以下针对这些问题谈一下笔者的认识和看法
(1)重视实验教学。C语言程序设计是一门实践性很强的课程,实验教学环节尤为重要。目前我院通过优化调整现有学时比例达到课程改革的目的。将C语言程序设อ计的学时重新分配:该课程总课时为72学时,其中学时调整为理论和实践学时各占一半。在教学内容符合省等级考纲要求的基础上,课程采用课堂讲授与实验操作相结合的方法,使学生动手能力得到了较大的提高。实验内容要具有一定的趣味性或实用性,比如银行存款利息和if结构结合、出生月份的计算和switch结构结合等,采用日常生活中的问题从而激发学生学习的兴趣。实验过程按照验证调试设计的顺序进行设计。1)验证:安排学生对学习过的内容利用现有的简单程序进行验证;2)调试示例:编写简单的程序作为调试示例,在其中设置学生经常遇到的各种小错误(包括语法错误、逻辑错误);3)编程练习:根据编程示例,让学生能用灵活运用所学知识,求解新的问题解决类似的问题,既巩固了所学知识,又提升了学生的分析问题和解决问题的能力。在实验教学过程中,授课教师还要注意引导、启发学生积极思考。让学生在亲手操作中学习知识、消化知识,运用知识,强化计算思维。培养他们积极思维,自己发现问题、解决问题的计算思维能力。[3]
(2)采用项目驱动的方式进行教学。针对于C语言的语法结构过于零散的情况,可以采用项目驱动的方式。本着一个项目贯穿整个课程教学的思想。可以选用涵盖所有知识点的猜数游戏经典程序,让学生围绕这个程序循序渐进地学习,便于思维训练的连贯性。[4]
(3)案例式教学。案例式教学通过先提出问题分析问题解决问题的过程中讲授所需知识点。在讲解案例时,我们先提出具体问题,后引导学生去体会为了解决问题而产生的大脑思考过程,将人的想法转写成计算机能够处理的表达式或操作步骤。在课堂上教师借助案例题把C语言的基本概念和方法传授给学生。这种案例式教学能更好地引导学生去分析问题、解决问题,特别是提高学生如何自主寻求解决方案的独立思考能力。
(4)重视算法的作用。将C语言中常用的算法进行归类,在教学过程的不同阶段,分别引入这些算法。好的算法不一定适用于每个问题和每个学生,通过算法的多样性使学生深入理解到计算机求解同一问题可用不同的方法。而掌握计算机求解问题的各类方法,也是培养学生计算思维的关键。例如素数求解问题:如果n能被2~(n-1)之中任何一个整数整除,则ภ表示n肯定不是素数,不必再继续被后面的整数除;反之就是素数。按照这种方法求解的程序是:
for(i=2;i=n-1;i++)
if(n%i==0)break;
这样For循环要执行n-2次,经过分析我们发现并不需要使用这么多次判断。只要条件满足n能被2~ 之中任何一个整数整除,则n就不是素数,因此可以将程序更改为:
for(i=2;i=sqrt(n);i++)
if(n%i==0)break;
这样n值越大改进后程序运行效率越高。对于求解某一区间内的素数如求100~200间的素数我们可以通过以下程序来判断:
for(n=101;n=200;n=n+2)
for(i=2;i=sqrt(n);i++)
if(n%i==0)break;
上面的例子充分说明利用算法的简化和优化,可以帮助学生举一反三地学好C语言课程。
(5)改革考核内容。一直以来,C语言课程的考核都是针对于期末考试和省二过级而设定的,内容主要是针对C语言语法知识的掌握、常用算法的识记和应用、初步的程序设计开发能力等方面来设置的,并没有有意识地针对计算思维能力的培养来设置考核内容。注重计算思维能力培养的C语言课程应在考核内容设置上更多更明确地体现出对学生运用计算思维求解问题的能力的考核。例如,考核常用算法的识记和应用时,应侧重对最初算法的改进或扩展用于实际问题求解的考核。加大算法的运用比例,增加程序设计题的占有率,从学生的考核中强化计算思维能力的培养。[5]
3 结束语
通过C程序课程中的若干改革尝试,将计算思维培养融入到理论教学和实践教学的各个环节,培养学生用计算机自主解决问题的能力,从而提高学生的创新思维和创新能力都有积极的作用。