C语言程序设计教学研究与实践探索

2014-07-28 05:08罗恺韵朱成彪吕远方
电脑知识与技术 2014年17期
关键词:非计算机专业计算思维C语言

罗恺韵 朱成彪 吕远方

摘要:从三本程序设计实践教学出发,在教学中坚持“以学生为主体,教师主导”的原则,通过多种教学方法并用,全方位调动学生参与的积极性,使学生的学习目标不再单纯定位全国计算机等级考试,而是能充分理解和掌握计算机语言学习的方法和规律,从专业发展角度重视计算思维的培养,逐步体验计算原理的相互影响,享受问题有效解决的愉悦。

关键词:C语言; 程度设计;教学方法;计算思维;非计算机专业

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2014)17-4101-03

The Teaching Research and Practice in C Programming

LUO Kai-yun, ZHU Cheng-biao, LV Yuan-fang

(Furong College of Hunan University of Arts and Science, Changde 415000, China)

Abstract: From the practical teaching of three-base programming design,insisting on the principle of "student-centered,teacher-led" in the teaching,using various teaching methods together to mobilize comprehensively the enthusiasm of students to participate in, making the students aim at understanding and mastering principles and laws of computer language instead of National Computer Rank Examination simply, emphasizing on cultivating the computational thinking from the perspective of professional development,experiencing gradually the interplay of calculation principles and enjoying the happiness of problems solved effectively.

Key words: c language; programming; teaching methods; computational thinking; non-computer speciality

1 概述

“C语言程序设计”作为大学程序设计的入门课程,理论性和实践性要求较高,是一门既难教也难学的公共基础课。C语言所涉及的概念和语法规则较多,面对不断压缩课时的现状,传统的“满堂灌”教学法使学生始终处于被动接受状态,学习积极性和主动性下降,不利于学生分析问题和解决问题能力的培养。如何在C程序设计教学中引导非计算机专业学生克服编程畏惧感,培养计算思维能力,是我们此次针对独立学院非计算机专业C语言教学的改革选题之一。

2 精心设计第一堂课,激发学生的学习兴趣

“C语言程序设计”是大学新生进校后接触的第一门程序设计语言课程,第一堂课上得好不好,直接关系到学生对课程的认可度。我们从五个方面入手:

2.1 从日常小事入手

和学生一起探讨英文字典中查找单词SUM的方法:第一种,依次翻页找到;第二种,采用顺序法,先找到字母S,在范围内依次找U和M;第三种,翻到字典中部,判断当前页字母与S的顺序,并通过反复使用对数级的方式查找、判断,直至找到单词。通过这样的方式让学生了解:程序是解决问题的过程。但计算机技术的重点不全在编程,而是充分利用计算机的运算能力,将各领域所关心的问题转换成许多简单的子问题并进行求解,程序设计是其中的手段。

2.2 让每个人都参与的游戏

和学生一起统计教室人数:第一步,全体起立,每个人都代表“1”;第二步,位置最近的两人将各自的数字相加求和,先报出结果者坐下,另一个则带着结果继续战斗;第三步,重复第二步。如此循环,最后一位得到的结果就是教室的总人数。这个过程不仅渲染课堂气氛,而且在教师的引导下让学生具体感知程序、算法和处理方法。

2.3 展演C语言编写的小游戏

向学生展示并让他们试玩诸如俄罗斯方块、贪食蛇、五子棋等多款C语言编写的游戏程序,并鼓励学生——只要愿意,每个人都可以编写小游戏。通过发掘游戏的乐趣,激发学生学习C语言程序设计的热情。

2.4 精典咒语“Hello,C!”

通过对输出“Hello,C!”程序代码的分析,让学生明白C语言程序设计入门并不困难,从而打消他们心中的畏惧,增强学习的自信心。

2.5 总结C的上天下地的超能力

C语言不是“很高级”的语言,但因为限制少,所以可以处理大部分计算机能够处理的对象:比如字符、数字和地址;也不“庞大”——较小的篇幅即可描述,表示能力很强,非常高效;C语言简洁的表达式,流行的控制流和数据结构,及丰富的运算符集适合编写各种软件,通用性强,已成为公认的令人愉快的通用程序设计语言。

3 根据学生特点,在教学过程中多种教学方法并用

第一堂课后,我们会针对学生的特点,并参照专业特性,多种教学方法并用,进一步提高学生学习热情及课堂教学质量。

3.1 案例教学法

我们选用教务管理系统中的学生成绩管理部分作为案例,以便让学生在理解项目功能及开发过程中不出现盲点,且有机会提出建议并实现。案例的实现贯穿了整个C语言的教学过程(如表1):endprint

通过这样的方式,改变了传统教学中理论与实践脱节的局面。每一阶段教学中都呈现一段相对完整的程序,前一阶段的结果成为下一阶段教学的基础,下一阶段的工作又对前一阶段的成果进行改进和完善。学生也在知识点的反复使用中不断加深对基础理论的理解,并借助案例和技能训练,逐步学会思考,有效提升问题求解能力、动手能力及团队协作精神。

3.2 问题教学法

由于学生的整体知识架构不稳固,我们创建问题时既要考虑巩固已学知识点,又要尝试通过学生解决问题时在认知上的冲突,来激发他们的学习兴趣,并主动进行探索求解。比如我们在探讨“条件语句表达式”时,创建了如下程序:

#include

main()

{int a=0,x=35;

printf("条件判断之前x的值为:%d\n",x);

if (!a) x=3;

else x=4;

printf("条件判断之后x的值为:%d\n",x);}

大多学生的答案是:条件判断之前x值为35,之后x值为4。而正确结果是:条件语句之前x值为35,之后x值为3。

答案完全出乎学生的意料。这种“冲击”让学生的学习欲望高涨,他们会主动向教师阐述对已学知识点的理解及得出答案的理由,并请求教师共同分析原因,为教师的知识讲述埋下了绝佳伏笔。学生也在解决问题的过程中,不断巩固知识点、领会计算思维方式并运用所学解决问题,最终完成自我构建知识的过程。

3.3 类比式教学

指针是C语言中的一个重要概念。因为涉及内存的动态分配,加之经常与链表等动态数据结构搭配使用,其强大灵活的数据操纵方式一直让学生望而生畏。通过实际教学,我们发现在讲解存储单元、存储单元地址及存储单元内容等基本概念时运用类比法效果较好——学生宿舍恰似一个个存储单元,宿舍号就是存储单元的地址,宿舍里的学生就是存储单元的内容。当我们要找到某位学生时,只要知道他(她)所在的宿舍号即可。相应的,要使用存储单元中的数据就必须知道存储单元的地址,只不过指针地址用了一个变量存放,这个变量即指针变量。通过类比,将抽象的问题具体化,学生在理解指针即地址时更容易。在此基础上,可以进一步对比指针类型和一般数据类型的特性,让学生发现指针操纵简单变量的用处,更好地理解指针如何处理多字节变量等内容。

3.4 启发式教学

教学过程中根据教学任务和学生的实际情况,适当采用启发法,能调动学生的学习积极性和主动性。比如,我们会利用求1+2+3+…+100的值来讲解程序循环结构。这是一个循环累加问题,每次循环累加一个递增的自然数,经过100次循环后,得到这个数列之和。我们会让学生思考后再表述他们的想法,自然引出课堂的知识点——循环和嵌套循环,然后让学生根据知识点,确定循环条件(i<=100),循环体(sum+=i)及循环增量(i++),并尝试用while循环、do while循环和for循环分别写出程序,以区分异同及各自优势。

在此基础上,通过求表达式1+3+5+…+99的值,提示学生注意由于步长值的变换,程序中循环增量就由i++变成了i+2。继续增加难度,让学生发现在求表达式l-2+3-4+…-100的值时,数列的相加项呈加减交替,在相加项中增加变量t即可解决符号变换的问题。增设的t项初始值为1,相加项表示成t*i,i仍是一个递增序列,循环一次后t=-t,循环体也就相应变成了sum+=t*i。这样由浅入深的引导让学生比较容易理解问题,并产生一定兴趣。很多时候,他们会主动要求进一步增加难度。我们也会将类似求表达式1!+2!+3!+…+100!的值,或是求表达式1+1/3+(1*2)/(3*5)+(1*2*3)/(3*5*7)+…+(1*2*3*…*n)/(3*5*7*…*(2*n+1))的值这类题目抛给大家。不仅活跃了课堂气氛,也使得一题多解多问,达到从点到面启发学生主动思考,逐步从“授人以鱼”到“授人以渔”的教学转变。

4 课外延伸展望

对初学者而言,理解程序设计的思想和能动手编程是两码事。在编程中他们不可避免地会遇到很多的困难,如果得不到及时的帮助,一定会影响学习的信心和兴趣。我们在保留传统的师生面对面答疑基础上,又增加了网络在线答疑方式,集课堂、实验、网络教学于一体,拓展“教”与“学”的空间和时间。并尝试筹建学生俱乐部,由学生自行组织、管理,主要是针对各级赛事、科技创新和应用性软件项目开发,教师仅仅提供稍许业余指导,真正实现学生的主体作用。

5 结束语

“C语言程序设计”课程的理论性和实践性要求较高,在实际的教学过程中必须针对学生的层次,结合专业的需求,充分选用各种有效的教学方法调动学生的学习积极性,提高自觉能力,使学生真正地成为课堂内外的“主体”,教师则辅以“主导”角色最大程度地提高教学质量。

课题组在C语言课程的教学实践中注重了学生心理的把握,并针对不同知识点采用相宜的教学方法,收效良好,具体表现:①教学有的放矢,学生自信增加。针对三本学生的具体情况,我们设立的课程目标是:让每个学生都听得懂,愿意听,并逐渐进行自觉思考。教学中,我们充分考虑学生在理解知识点中可能出现的问题,利用多种教学方法从他们能理解的角度着手讲解、引导,使学生逐步加深对C语言的认知。课题实践后,我院C语言程序设计课程的逃课率急剧下降,并激发了部分学生学习程序设计的兴趣和创造性。②突出重点,提高效率。尽管我院C语言程序设计的教学课时在逐年递减,课程中还不断增加一些关于C++面向对象的内容,由于把握了C语言教学中重点,并与学生有效沟通,使得课程通过率并不低于过往。③学生综合应用能力整体提升。由于学生对C语言特性的理解及应用方法掌握较好,实验课时能较为准确地发现编程中的常见错误,并对程序调试有了一定的想法,团队协作能力也进一步增强。

参考文献:

[1] 苏小红,陈惠鹏,孙志岗. C语言大学实用教程[M].2版.北京:电子工业出版社,2011.

[2] 谭浩强. C语言程序设计[M]. 北京:清华大学出版社,2008.

[3] Brian W. Kernighan, Dennis M. Ritchie. C程序设计语言[M].2版.北京:机械工业出版社,2012.

[4] 陈国良,董荣胜. 计算思维与大学计算机基础教育[J]. 中国大学教育, 2012(1):7-11.

[5] 马英. C语言程序设计课教学之我见[J]. 山西财经大学学报,2011,33(2):131-132.

通过这样的方式,改变了传统教学中理论与实践脱节的局面。每一阶段教学中都呈现一段相对完整的程序,前一阶段的结果成为下一阶段教学的基础,下一阶段的工作又对前一阶段的成果进行改进和完善。学生也在知识点的反复使用中不断加深对基础理论的理解,并借助案例和技能训练,逐步学会思考,有效提升问题求解能力、动手能力及团队协作精神。

3.2 问题教学法

由于学生的整体知识架构不稳固,我们创建问题时既要考虑巩固已学知识点,又要尝试通过学生解决问题时在认知上的冲突,来激发他们的学习兴趣,并主动进行探索求解。比如我们在探讨“条件语句表达式”时,创建了如下程序:

#include

main()

{int a=0,x=35;

printf("条件判断之前x的值为:%d\n",x);

if (!a) x=3;

else x=4;

printf("条件判断之后x的值为:%d\n",x);}

大多学生的答案是:条件判断之前x值为35,之后x值为4。而正确结果是:条件语句之前x值为35,之后x值为3。

答案完全出乎学生的意料。这种“冲击”让学生的学习欲望高涨,他们会主动向教师阐述对已学知识点的理解及得出答案的理由,并请求教师共同分析原因,为教师的知识讲述埋下了绝佳伏笔。学生也在解决问题的过程中,不断巩固知识点、领会计算思维方式并运用所学解决问题,最终完成自我构建知识的过程。

3.3 类比式教学

指针是C语言中的一个重要概念。因为涉及内存的动态分配,加之经常与链表等动态数据结构搭配使用,其强大灵活的数据操纵方式一直让学生望而生畏。通过实际教学,我们发现在讲解存储单元、存储单元地址及存储单元内容等基本概念时运用类比法效果较好——学生宿舍恰似一个个存储单元,宿舍号就是存储单元的地址,宿舍里的学生就是存储单元的内容。当我们要找到某位学生时,只要知道他(她)所在的宿舍号即可。相应的,要使用存储单元中的数据就必须知道存储单元的地址,只不过指针地址用了一个变量存放,这个变量即指针变量。通过类比,将抽象的问题具体化,学生在理解指针即地址时更容易。在此基础上,可以进一步对比指针类型和一般数据类型的特性,让学生发现指针操纵简单变量的用处,更好地理解指针如何处理多字节变量等内容。

3.4 启发式教学

教学过程中根据教学任务和学生的实际情况,适当采用启发法,能调动学生的学习积极性和主动性。比如,我们会利用求1+2+3+…+100的值来讲解程序循环结构。这是一个循环累加问题,每次循环累加一个递增的自然数,经过100次循环后,得到这个数列之和。我们会让学生思考后再表述他们的想法,自然引出课堂的知识点——循环和嵌套循环,然后让学生根据知识点,确定循环条件(i<=100),循环体(sum+=i)及循环增量(i++),并尝试用while循环、do while循环和for循环分别写出程序,以区分异同及各自优势。

在此基础上,通过求表达式1+3+5+…+99的值,提示学生注意由于步长值的变换,程序中循环增量就由i++变成了i+2。继续增加难度,让学生发现在求表达式l-2+3-4+…-100的值时,数列的相加项呈加减交替,在相加项中增加变量t即可解决符号变换的问题。增设的t项初始值为1,相加项表示成t*i,i仍是一个递增序列,循环一次后t=-t,循环体也就相应变成了sum+=t*i。这样由浅入深的引导让学生比较容易理解问题,并产生一定兴趣。很多时候,他们会主动要求进一步增加难度。我们也会将类似求表达式1!+2!+3!+…+100!的值,或是求表达式1+1/3+(1*2)/(3*5)+(1*2*3)/(3*5*7)+…+(1*2*3*…*n)/(3*5*7*…*(2*n+1))的值这类题目抛给大家。不仅活跃了课堂气氛,也使得一题多解多问,达到从点到面启发学生主动思考,逐步从“授人以鱼”到“授人以渔”的教学转变。

4 课外延伸展望

对初学者而言,理解程序设计的思想和能动手编程是两码事。在编程中他们不可避免地会遇到很多的困难,如果得不到及时的帮助,一定会影响学习的信心和兴趣。我们在保留传统的师生面对面答疑基础上,又增加了网络在线答疑方式,集课堂、实验、网络教学于一体,拓展“教”与“学”的空间和时间。并尝试筹建学生俱乐部,由学生自行组织、管理,主要是针对各级赛事、科技创新和应用性软件项目开发,教师仅仅提供稍许业余指导,真正实现学生的主体作用。

5 结束语

“C语言程序设计”课程的理论性和实践性要求较高,在实际的教学过程中必须针对学生的层次,结合专业的需求,充分选用各种有效的教学方法调动学生的学习积极性,提高自觉能力,使学生真正地成为课堂内外的“主体”,教师则辅以“主导”角色最大程度地提高教学质量。

课题组在C语言课程的教学实践中注重了学生心理的把握,并针对不同知识点采用相宜的教学方法,收效良好,具体表现:①教学有的放矢,学生自信增加。针对三本学生的具体情况,我们设立的课程目标是:让每个学生都听得懂,愿意听,并逐渐进行自觉思考。教学中,我们充分考虑学生在理解知识点中可能出现的问题,利用多种教学方法从他们能理解的角度着手讲解、引导,使学生逐步加深对C语言的认知。课题实践后,我院C语言程序设计课程的逃课率急剧下降,并激发了部分学生学习程序设计的兴趣和创造性。②突出重点,提高效率。尽管我院C语言程序设计的教学课时在逐年递减,课程中还不断增加一些关于C++面向对象的内容,由于把握了C语言教学中重点,并与学生有效沟通,使得课程通过率并不低于过往。③学生综合应用能力整体提升。由于学生对C语言特性的理解及应用方法掌握较好,实验课时能较为准确地发现编程中的常见错误,并对程序调试有了一定的想法,团队协作能力也进一步增强。

参考文献:

[1] 苏小红,陈惠鹏,孙志岗. C语言大学实用教程[M].2版.北京:电子工业出版社,2011.

[2] 谭浩强. C语言程序设计[M]. 北京:清华大学出版社,2008.

[3] Brian W. Kernighan, Dennis M. Ritchie. C程序设计语言[M].2版.北京:机械工业出版社,2012.

[4] 陈国良,董荣胜. 计算思维与大学计算机基础教育[J]. 中国大学教育, 2012(1):7-11.

[5] 马英. C语言程序设计课教学之我见[J]. 山西财经大学学报,2011,33(2):131-132.

通过这样的方式,改变了传统教学中理论与实践脱节的局面。每一阶段教学中都呈现一段相对完整的程序,前一阶段的结果成为下一阶段教学的基础,下一阶段的工作又对前一阶段的成果进行改进和完善。学生也在知识点的反复使用中不断加深对基础理论的理解,并借助案例和技能训练,逐步学会思考,有效提升问题求解能力、动手能力及团队协作精神。

3.2 问题教学法

由于学生的整体知识架构不稳固,我们创建问题时既要考虑巩固已学知识点,又要尝试通过学生解决问题时在认知上的冲突,来激发他们的学习兴趣,并主动进行探索求解。比如我们在探讨“条件语句表达式”时,创建了如下程序:

#include

main()

{int a=0,x=35;

printf("条件判断之前x的值为:%d\n",x);

if (!a) x=3;

else x=4;

printf("条件判断之后x的值为:%d\n",x);}

大多学生的答案是:条件判断之前x值为35,之后x值为4。而正确结果是:条件语句之前x值为35,之后x值为3。

答案完全出乎学生的意料。这种“冲击”让学生的学习欲望高涨,他们会主动向教师阐述对已学知识点的理解及得出答案的理由,并请求教师共同分析原因,为教师的知识讲述埋下了绝佳伏笔。学生也在解决问题的过程中,不断巩固知识点、领会计算思维方式并运用所学解决问题,最终完成自我构建知识的过程。

3.3 类比式教学

指针是C语言中的一个重要概念。因为涉及内存的动态分配,加之经常与链表等动态数据结构搭配使用,其强大灵活的数据操纵方式一直让学生望而生畏。通过实际教学,我们发现在讲解存储单元、存储单元地址及存储单元内容等基本概念时运用类比法效果较好——学生宿舍恰似一个个存储单元,宿舍号就是存储单元的地址,宿舍里的学生就是存储单元的内容。当我们要找到某位学生时,只要知道他(她)所在的宿舍号即可。相应的,要使用存储单元中的数据就必须知道存储单元的地址,只不过指针地址用了一个变量存放,这个变量即指针变量。通过类比,将抽象的问题具体化,学生在理解指针即地址时更容易。在此基础上,可以进一步对比指针类型和一般数据类型的特性,让学生发现指针操纵简单变量的用处,更好地理解指针如何处理多字节变量等内容。

3.4 启发式教学

教学过程中根据教学任务和学生的实际情况,适当采用启发法,能调动学生的学习积极性和主动性。比如,我们会利用求1+2+3+…+100的值来讲解程序循环结构。这是一个循环累加问题,每次循环累加一个递增的自然数,经过100次循环后,得到这个数列之和。我们会让学生思考后再表述他们的想法,自然引出课堂的知识点——循环和嵌套循环,然后让学生根据知识点,确定循环条件(i<=100),循环体(sum+=i)及循环增量(i++),并尝试用while循环、do while循环和for循环分别写出程序,以区分异同及各自优势。

在此基础上,通过求表达式1+3+5+…+99的值,提示学生注意由于步长值的变换,程序中循环增量就由i++变成了i+2。继续增加难度,让学生发现在求表达式l-2+3-4+…-100的值时,数列的相加项呈加减交替,在相加项中增加变量t即可解决符号变换的问题。增设的t项初始值为1,相加项表示成t*i,i仍是一个递增序列,循环一次后t=-t,循环体也就相应变成了sum+=t*i。这样由浅入深的引导让学生比较容易理解问题,并产生一定兴趣。很多时候,他们会主动要求进一步增加难度。我们也会将类似求表达式1!+2!+3!+…+100!的值,或是求表达式1+1/3+(1*2)/(3*5)+(1*2*3)/(3*5*7)+…+(1*2*3*…*n)/(3*5*7*…*(2*n+1))的值这类题目抛给大家。不仅活跃了课堂气氛,也使得一题多解多问,达到从点到面启发学生主动思考,逐步从“授人以鱼”到“授人以渔”的教学转变。

4 课外延伸展望

对初学者而言,理解程序设计的思想和能动手编程是两码事。在编程中他们不可避免地会遇到很多的困难,如果得不到及时的帮助,一定会影响学习的信心和兴趣。我们在保留传统的师生面对面答疑基础上,又增加了网络在线答疑方式,集课堂、实验、网络教学于一体,拓展“教”与“学”的空间和时间。并尝试筹建学生俱乐部,由学生自行组织、管理,主要是针对各级赛事、科技创新和应用性软件项目开发,教师仅仅提供稍许业余指导,真正实现学生的主体作用。

5 结束语

“C语言程序设计”课程的理论性和实践性要求较高,在实际的教学过程中必须针对学生的层次,结合专业的需求,充分选用各种有效的教学方法调动学生的学习积极性,提高自觉能力,使学生真正地成为课堂内外的“主体”,教师则辅以“主导”角色最大程度地提高教学质量。

课题组在C语言课程的教学实践中注重了学生心理的把握,并针对不同知识点采用相宜的教学方法,收效良好,具体表现:①教学有的放矢,学生自信增加。针对三本学生的具体情况,我们设立的课程目标是:让每个学生都听得懂,愿意听,并逐渐进行自觉思考。教学中,我们充分考虑学生在理解知识点中可能出现的问题,利用多种教学方法从他们能理解的角度着手讲解、引导,使学生逐步加深对C语言的认知。课题实践后,我院C语言程序设计课程的逃课率急剧下降,并激发了部分学生学习程序设计的兴趣和创造性。②突出重点,提高效率。尽管我院C语言程序设计的教学课时在逐年递减,课程中还不断增加一些关于C++面向对象的内容,由于把握了C语言教学中重点,并与学生有效沟通,使得课程通过率并不低于过往。③学生综合应用能力整体提升。由于学生对C语言特性的理解及应用方法掌握较好,实验课时能较为准确地发现编程中的常见错误,并对程序调试有了一定的想法,团队协作能力也进一步增强。

参考文献:

[1] 苏小红,陈惠鹏,孙志岗. C语言大学实用教程[M].2版.北京:电子工业出版社,2011.

[2] 谭浩强. C语言程序设计[M]. 北京:清华大学出版社,2008.

[3] Brian W. Kernighan, Dennis M. Ritchie. C程序设计语言[M].2版.北京:机械工业出版社,2012.

[4] 陈国良,董荣胜. 计算思维与大学计算机基础教育[J]. 中国大学教育, 2012(1):7-11.

[5] 马英. C语言程序设计课教学之我见[J]. 山西财经大学学报,2011,33(2):131-132.

猜你喜欢
非计算机专业计算思维C语言
基于Visual Studio Code的C语言程序设计实践教学探索
基于C语言的计算机软件编程
非计算机专业计算机基础教学的总结与思考
高校非计算机专业计算机网络基础教学改革探究
高职高专院校C语言程序设计教学改革探索
程序设计课程中计算思维和应用能力培养问题研究
民族高校C语言程序设计课程教学改革的研究
算法的案例教学探析
浅谈艺术专业学生计算思维能力的培养
非计算机专业VF课程教学内容与方法探究