首页 > 范文大全 > 正文

C程序设计教学中趣味性的挖掘

开篇:润墨网以专业的文秘视角,为您筛选了一篇C程序设计教学中趣味性的挖掘范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:C程序设计课程中概念繁杂,例题繁多,不少学生死记硬背。针对这种情况,本文从激发兴趣、创造成绩入手,给出了4个教学示例的组织过程,特点是起点简单,步骤间逐步添加知识点,步步有成果,基本覆盖了c程序设计课程的核心内容,能起到通过趣味促进实践、激发创造力的作用。

关键词:程序设计;教学组织;相似性;抽象;实践

中图分类号:G642

文献标识码:B

1引言

C程序设计课程一般开设在大一上学期,大多数学生处在从中学学习方法向大学学习方法的过渡期,他们知道这门课程是计算机专业的第一块基石,却常常以死记硬背的方法应付,更无法找到课程的趣味。对初学者而言,C程序设计语言课程的概念繁杂,例题繁多,教材内容给读者的系统感不强。可实际教学中,理论课时和上机课时常显不足,教师忙于完成教学内容,知识点间的联系常被淡化。如何在增加课时的前提下,提高教学效率,是一个值得关注的教学课题。

学习的第一动力是兴趣,笔者在多年的C程序设计教学中,感到最无奈的是学生缺乏对课程的兴趣。编程类课程的趣味性,一在于其中知识点的联系,二在于成果有实际的应用价值。教师的教学重点应是通过教材内容的重组织,引导学生发掘课程兴趣点,带动课程难点的学习。虽然教学示例俯手皆拾,但示例的选择、组合却可以匠心独到。

示例的组织不仅应自然显示出同类问题、方法的代码相似性,更应展现出层次递进的抽象思维过程;示例的组织应让每一步都有新意,但难度变化不应过大,还应让每一步都有成果,成果是兴趣的激发点;示例的组织还应既便于教师连续讲解,也便于暂停数次,让学生自我探索实践。笔者在课程教学中有意摸索、积累了若干此类示例,在此抛砖引玉。

2数值程序的趣味

在讲解循环结构和函数时,数制转换程序常常作为示例,但这么一个涉及到计算机专业最基本概念的程序若只被提及一次,实在太可惜了。可以试将该示例分解为以下5个步骤。

第1阶段,讲解将十进制数转换为二进制数的程序,这个程序以main函数的形式展现给学生,让学生体会到循环的流程和调试的成果。这是本例的最基本目标。

第2阶段,改造代码为函数A1,函数有一个参数x,实现将任意十进制数x转换为二进制数的功能。这提升了程序的结构。

第3阶段,扩展函数A1为函数A2,在函数接口中增加参数m、n,实现将m进制数x转换为n进制数的功能。函数在具体代码的基础上,抽象程度有所提高。

第4阶段,设计main函数,反复调用函数A2,计算1至100所有十进制数的二、三、…、九进制的表示,并将结果输出到某文本文件中。

第5阶段,将结果文件内容,粘贴到Excel文件中,排版成一张精美的各进制的数字对照表。

以上每个阶段所涉及的技术都属于基本技能,但以一条主线带动学生,逐步深入,步步都有成果。与Excel联合应用,更使学生开阔了学习和实践的视野。

3类型变换程序的趣味

在讲解字符串处理时,类型转换是基本例题。如将数值转换数字串,将数字串转换为数值等。结合数制概念,可将问题多样化。虽然教学意图是开阔学生思路,却常常使学生感到程序繁杂无序。实际上,合适的示例组合可促进学生自己发现、领悟其中的规则。可以试将这些示例组成以下6个步骤。

第1阶段,讲解函数B1,函数有参数s,实现将lO进制数字串s转换为10进制整数的功能。

第2阶段,扩展函数B1功能,在接口中增加参数k,实现将k进制数字串转换为k进制的整数的功能。通过代码的抽象,强化了对核心代码的认识,也降低了编程难度。

第3阶段,讲解函数B2,函数有参数x,实现将10进制整数x转换为10进制数字串的功能。

第4阶段,扩展函数B2功能,在接口中增加参数k,实现将k进制整数转换为k进制数字串的功能。

第5阶段,设计函数B3,函数有参数s、m、t、n,调用Bl函数,将m进制数字串s转换为m进制整数;调用上节中的A2函数,将m进制整数转换为n进制整数;调用B2函数,将n进制整数转换为n进制数字串。

第6阶段,设计main函数,反复调用函数B3,计算十进制数字串“001”至“100”对应的二、三、…、九进制数字串;将结果输出到文本文件;将文件内容粘贴到Excel文件中,排版成一张与上节相同的各进制数字串对照表。

以上6个阶段,以易于掌握的函数入手,通过增加函数参数提高函数的抽象性,增强函数的功能,第2、4阶段的成果都有一定的应用价值,第5、6阶段培养了函数组合调用的能力。

4加密、解密程序的趣味

在字符串编程的练习中,对称加密、解密算法是一个有趣的话题,可以充分利用它引导学生做更深入的实践。可以试将此示例分解为以下6个步骤。

第l阶段,讲解加密函数C1,函数有参数s、k,对存于字符数组s的明文采用密钥k进行对称加密。这一短小精干的程序可以让学生体验字符串操作的一般方法。

第2阶段,扩展函数C1,在接口中增加参数n、f2,实现读取n指定的明文文件,将其中的每行字符串用密钥k加密,生成密文文件f2;设计main函数,实现独立的加密程序。

第3阶段,讲解解密函数C2,函数有参数s、k,对存于字符数组s的密文采用密钥k进行对称解密。

第4阶段,扩展函数C2,在接口中增加参数f1、f2,实现读取n指定的密文文件,将其中的每行字符串用密钥k解密,生成明文文件位;设计main函数,实现独立的解密程序。

第5阶段,使用main(int argo,char*argv)函数的接口参数,将加密、解密程序合二为一,具体执行时,使用命令行参数识别加密或解密功能。如命令行参数是“-e a1.txta2.txt 5”表示对a1.txt使用密钥5加密,结果密文存于a2.txt;如命令行参数是“-d a2.txt a3.txt 5”表示对a2.txt使用密钥5解密,结果明文存于a3.txt。

第6阶段,对于优秀的学生,还可以鼓励他们进一步探索,在没有密钥情形下如何猜测某个密文文件的密钥进行解密。这种探索性的实践会带给学生更广阔的编程视野。

在以上6个阶段中,C1和C2函数非常相似,对这种相似性的留意不仅能强化编程中的概念,更能提高编程、调试的效率。最终的软件成果已经具备商业软件的雏形,学生们会更加兴奋。

5打印字符图案的趣味

在学习循环、分支结构时,用字符打印特定的几何图案是最简的示例。可惜这个示例的思路没有继续延伸,只是局限在打印完全规则的图案。可以试将此示例分解为以下7个步骤。

第1阶段,讲解一个打印固定规则图案的函数Dl,实现用某种字符打印一个固定形状的三角形。

第2阶段,扩展函数DI,在接口中增加参数base、angle、scale,base是图案打印基点,angle是图案旋转角度(0或90或180或270),scale是图案的大小比例的参数,值可以是1或2或3等正整数。

第3阶段,按照函数D1的形式,引导学生编程更多的打印规则图案的函数:建立函数的调度管理函数D2;

第4阶段,利用二维数组存储图案数据,数组元素为1或0,表示在相应位置上打印或不打印字符。二维数组相当于任意字符图案的数据结构。设计函数D3,参数是一个二维数组,实现打印任意不规则图案的功能。

第5阶段,扩展函数D3,在接口中增加参数base、angle、scale,意义同第2阶段,函数的功能也类似第2阶段。

第6阶段,调试函数D3的图案数据,建立起对任意图案的数据增加、修改、调用等管理函数D4.

第7阶段,设计函数D5,以菜单形式组织函数D2、D4,实现规则图案和任意图案的多种形式的打印。此时程序的结构已经比较复杂了。这个示例不仅充分锻炼了编程技术,更为将来学习图像处理技术做了铺垫。

6结束语

本文给出了数值程序、类型变换程序、加密/解密程序、打印字符图案等4个教学示例的组织过程,每个示例的起点简单,每个步骤涉及的新知识较少,思维跳跃小,但每个步骤的收获喜人,最终涉及到了除指针、结构之外的所有c语言知识点。每个示例可以一次讲解,也可以分步骤多次讲解,或空缺一二步骤,让学生实践完成,尤其能起到通过悬念、兴趣促进实践、激发创造力的作用。