分组+分级的C程序设计实验教学研究

时间:2022-03-06 07:54:51

分组+分级的C程序设计实验教学研究

摘 要:针对学生对C语言学习采用“文科”式方法学习和兴趣不高的问题,分析学习C语言困难的内在原因,将编程题目按难度进行分级(初、中、高三级难度);提出趣味编程、分组+“陪审”模式的实验改革,通过四步来逐步提高学生的编程能力,充分调动学生对C语言学习的主动性和参与性,实际教学表明该方法较好地调动学生学习的兴趣,较明显地提高学生的自主学习和编程能力。

关键词:C语言;程序设计;互助学习;教学改革;趣味学习

中图分类号:TP312.1-4;G652

C语言作为一种功能强大的通用编程语言,被广泛应用于系统和应用软件的开发[1-2],大多数计算机专业将其作为第一门程序设计语言。

对于初学者,C语言具有抽象、使用灵活等特点,这给程序的编写、调试、阅读带来了许多不便;在编写代码的过程中容易遇到难以下手、语法、系统等问题,很容易使学生失去兴趣[3-4]。

针对学生学习C语言存在的困难,分析了困难的内在原因,对现有的C语言程序设计课程实验课程进行改革,充分调动学生对C语言学习的积极性、主动性和参与性。

1 C语言学习困难的内在因素分析

对于初学者,往往觉得C语言学习比较困难,其原因主要包括:

1.1 专业背景不充分

初学者对计算机基础知识了解不够充分;没有深刻理解现代计算机的体系结构――von Neumann体系结构的核心思想――存储程序思想。如果不能很好地理解基础知识,必然使程序设计停留在一个比较浅显的层面,不能体会程序设计的艺术性、创造性等独特魅力。

1.2 文科式学习方法

学生对计算机专业的学习方法还停留在“文科”学习方法,症状表现为:上课能听懂,书上的例题也能看明白,可是到他们自己动手做编程时,却不知道如何下手。其所谓的看懂听明白,只是用文科的方法记忆或了解肤浅的语法知识。C语言程序设计是一门工科性课程,如果没有深刻地理解C语言的语句的执行过程是不会编写程序解决实际问题的。“纸上谈兵”式的光学不练是学不好C语言的,只有使用C语言自己编写代码解决了实际问题的学习方法才是正确的方法。

1.3 算法分析不够

初学者认为计算机是“全能的”,计算机就能自动完成事情。而事实是:现在的计算机智商几乎为0,要想让计算机完成预先给定的任务,就必须告诉计算机“做什么”以及“怎样做”。因此问题解决就是设计一个做事情的步骤,告诉计算机第一步做什么,第二步做什么,…,最后一步做什么。而人是通过程序设计语言来引导计算机完成这些工作,因此还需将每步实现转换为具体实现的程序代码,其中需要涉及对步骤过程进行抽象、总结、发现这些步骤过程中的规律等,而这一步往往是计算机编程的最难一步,恰恰是这一步使得大部分学生“知难而退”,从而造成学生不想学程序设计的最主要的原因。

2 C语言编程能力逐步提高步骤

C语言作为一门实践性很强的课程,实践能力的培养是学好C语言的关键环节,为了提高学生的编程能力,将C语言程序设计过程分为如下4步:

第1步:验证性练习。这一步要求学生首先把书本上的例程读懂,然后按照教材上的程序实例进行原样输入,运行一下程序是否正确。

这一步要求:基本掌握C语言编程软件的使用方法,熟练地输入、编辑C程序;初步记忆所学章节的知识点、养成良好的C语言编程风格。输入程序前,要让学生知道程序中包含的变量个数、变量类型、每个变量“扮演”几个角色、每条语句的功能、整个程序算法思想是什么、第一步做什么,第二步做什么,直到最后一步做什么都应该清清楚楚,只有这样才是真正的代码输入,而不是“打字练习”。遇到错误时,从第一条错误开始逐条进行修改,每改正一个错误就立即编译直到程序运行成功为止。

第2步:局部改动。在第1步输入的C程序代码的基础上进行试验性的修改并运行,看看程序结果发生了什么变化,分析结果变化的原因,加深对所学知识点的理解。这一步和第一步是同步进行的,实现“输入”加深知识的记忆,“修改”加深对知识的理解。记忆和理解是相辅相成的,相互促进。

如:编写程序实现1+2+3...+100之和。

#include

void main()

{int i,sum=0; //变量定义

for(i=1;i

sum=sum+i;

printf("sum=%d\n", sum); //结果输出

}

第1次:将for(i=1;i

第3步:照葫芦画瓢。在书上已有例程的基础上,设计出具有相似功能的程序。比如:书上例程给出了求1―100的和,在给学生布置上实验作业时,可以布置求2+4+6+…+100、或求1*2*3*4*…*n等相类似的实验作业。这样,学生就能在求和程序的基础上就行小幅度的改进,实现新的程序设计。

第4步:进阶提高。经过上述过程,学生已经基本掌握了C语言,就可以研读别人编写的C语言经典程序,学习他人解决问题的方法和程序设计的技巧,提高自己的程序设计能力。在此基础上,逐步用C语言解决一些实际问题。

3 C语言实验课程改革

由于编程是一件相对比较枯燥和烦闷的工作,而学生又处于青春活动期,因此在C语言实验课程中根据学生的特点,进行如下改变:

3.1 趣味+实际应用编程

兴趣是最好的老师,激发学生学习兴趣是教学成败的关键[5],可激发学生的兴趣,提高学生学习的主动性和积极性。在计算机程序设计中恰当地引入趣味性的数学知识,如:我国古代数学名的数学问题:百钱买百鸡、36人搬36块砖等问题。同时,可将现实生活中的一些实际问题,如给定打电话的时间(单位:秒),计算每次打电话的费用。通过引入趣味数学和实际应用问题,锻炼了学生的编程能力,又解决了学生认为学习C语言不能解决实际问题的苦恼。

3.2 题目分级

根据实验编程题的难度大小,分为:初级、中级、和高级3个等级。其中,初级难度的程序设计题目一般比较简单,包括内容为书上的例程、和例程相类似的题目,初级难度题目评分区间为0-70分。中级难度的编程题的难度逐渐提高,学生根据相关的背景知识,做一定的分析就可比较容易地将程序编写出来,如对于循环语句部分:设计进制转换程序、求素数等问题,中级难度题目评分区间为70-90分。高级难度编程题目的难度较大,需要做大量的分析、较好的编程技巧才能,如:约瑟夫问题、螺旋矩阵等,高级难度题目评分区间为90-100分。

对于不同难度的题目分别给出3-5个实验内容,学生可根据自身的学习情况,选择不同难度的题目进行编程(至少要选择初级难度的题目完),这样既考虑了学生的实际学习情况,给予不同的选择。同时,对于有能力的学生,在完成一定难度的设计题目后,可申请向高级难度题目进发,只要能完成高级难度题目,其评分就按高级难度分值重新评定,促进学生的自主学习。

3.3 分组+“陪审”

为充分体现学生在学习中的主导地位,在实验中引入了分组模式。以小组为单位对案例进行分析、探讨,激发他们解决问题的灵感和方法;让小组的人在不同的程序题目中分别扮演不同角色(如题目分析、程序设计、程序测试、文档编写),充分调动学生学习的积极性和参与性。

在实验课程中,每次随机抽取3-5个小组来向全班同学讲解题目设计思路、想法、程序代码等内容(为充分调动每个同学的积极性,防止部分同学的懒惰型,每次讲解的人不同),让剩余的每个小组随机抽取1人组成“陪审团”对讲解小组进行评价和提问(包括设计的原理、代码等),并给出讲解小组的成绩。实践中表明,最佳的学习小组合作人数应在4到6人之间。

3.4 综合试验

在C语言程序设计第一节课时,布置5-7个综合性试验,如“学籍管理系统”、“职工管理系统”、机房收费系统“等,每个小组选择1个完成。综合试验融合了C语言程序设计的所有知识点,编制一个超过200行左右的代码对学生是一个大的挑战,需要学生考虑方方面面的东西,如界面的友好性,数据合法性验证等,既锻炼了学生分析问题、解决问题的能力,又锻炼了学生编写小规模代码和文档书写能力。

3.5 实验报告

文档书写也是一个编程人员必备的能力,因此,每次实验需要学生编写一个实践报告,报告的主要内容包括:实验的目的和内容;算法或关键技术介绍、实验代码、实验过程代码出错原因、分析及修改;多组测试数据及对应的测试结果、算法的可能改进、体会及编程心得。通过实践报告的撰写,促进学生对算法的进一步思考,进一步熟悉C语言的语法知识,培养高效、精炼的编程风格。

4 结束语

本文针对学生学习C语言方法的缺点,提出了通过四步来逐步提高学生的编程能力;提出了对编程题目进行分为初、中、高三级,提出趣味编程、以及分组+“陪审”模式的实验改革。实际教学证明,这些方法能充分调动学生学习C语言的积极性、参与性,学生编程能力有较大提高。

参考文献:

[1]维基百科.C语言[EB/OL].http:///wiki/C%E8%AF%AD%E8%A8%8

[2]Kernighan B W,Ritchie D M.The C Programming Language (2nd Edition)[M].New York:Prentice Hall,2001.

[3]陈庆利.基于工程实践能力培养的C语言教学改革[J].计算机光盘软件与应用,2013(21):215-216.

[4]侯宏霞.提高“C语言程序设计”课程教学质量的探索与实践[J].内蒙古师范大学学报:教育科学版社,2012(01):131-133.

[5]赵君,钟良骥,卢社阶.C语言教学方法的探索―基于学习兴趣的教学改革[J].湖北科学院学报,2013(03):85-87.

作者简介:陈庆利(1975-),男,四川眉山人,副教授,博士,研究方向:数字图像处理。

作者单位:乐山师范学院 计算机科学学院,四川乐山 614004

基金项目:乐山师范学院教学模式与方法改革试点项目《C语言程序设计》。

上一篇:数学建模中计算机技术的应用研究 下一篇:翻转课堂在项目驱动式教学中的应用