摘要:《C程序设计》是一门程序设计基础课程,在实验教学中强调学生能够分析问题,并使用C语言编程解决问题。该文主要针对在实验教学中所遇到的一些问题进行探讨,在实际教学中取得了一定的效果。
关键词:C程序设计;实验;教学
中图分类号:G424文献标识码:A文章编号:1009-3044(2012)30-7287-03
C程序设计课程在高校中一般多作为学习程序设计技术的入门课程,它是计算机专业和相关专业的必修课[1]。C语言可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。通过C程序设计这门课程的学习可以掌握程序设计的方法和技巧。作为一门程序设计课程,强调培养学生的程序设计的能力,因此实验课是该门课程教学中必不可少的组成部分。以下主要对C程序设计的实验课教学所遇到的一些情况做了一个总结,并给出相应的一些解决方法。
1 实验教学中所遇到的问题及其解决方法
1.1 培养学生解决问题的能力
程序设计的关键是解决问题的方法和步骤,因此程序设计的核心是算法[2]。在碰到一些问题时,人们都会对这个问题有些想法,若是要利用计算机解决问题,则应该将这些想法转变成算法。在实验教学或课堂教学中应该注重培养学生解决问题的能力。
计算机解决问题时,主要解决思路就是IPO即输入、处理和输出。首先,需要分析问题有哪些是输入的,经过处理后需要输出什么样的输出结果。再进行分析,输入的数据类型是什么,输出的结果的数据类型是什么。最后,考虑问题处理时采用何种方法,并写出问题的解决步骤。在实验过程中,鼓励学生独立思考,强调每个问题可能有不止一个解决方法。
例如:一个天平,砝码分别为1g、2g、4g、8g、16g、32g、...、1024g,每个砝码只有一个,要称重的物品放在天平的左侧,而砝码只允许放在天平的右侧。已知一个物品的重量,问如何称重?试编程解决。
本文作者在实验课时布置这个题目时,有的同学就觉得题目挺难的,当时,教师给予了一定的提示:首先,要求学生仔细分析题目的输入和输出要求是什么。经过分析后,学生自行得出输入数据的要求:输入的是物体重量值,而且该重量值因为可以用砝码称量出来,该值应该是一个整数;为了便于检查,在教师的要求下该题的输出结果是:称重时所使用的砝码重量,砝码的重量按从大到小输出其值。再次,该问题的解决方法可能有多个,方法一:让学生假设如果现在有一个天平在眼前,应该如何用砝码称重,且每种重量的砝码只有1个,砝码重量是由大到小进行试探称重,还是砝码重量是由小到大进行试探称重。学生由此会进行相关思考,从而得出第一种算法:
1.2 注意一些运算符的使用
程序设计过程中会使用到一些C语言的运算符,但是在实验课时发现学生经常会出现一些运算符未能正确掌握,一般常见的错误如下:
1)“==”的使用
“==”运算符是关系运算符,一般用在条件判断。但是,在使用时经常会将“==”写作“=”。例如,判断4个连续自然数乘积为3024,有的学生在编程时写作:
if (x*(x+1)*(x+2)*(x+3)=3024)
对于这个问题,在编程时要求学生仔细想一想此处是判断左式是否等于右式,还是将右式的值赋给左边。若是判断,则用运算符“==”;若是赋值,则用运算符“=”。
2)“%”的使用
“%”运算符是算术运算符,它的作用是求余,该运算符要求操作数必须为整型数值。但是,在实验课时,本文作者发现学生在编程中使用该运算符时未曾考虑操作数的数据类型。对于这个问题,只能要求学生在使用该运算符时,必选检查两个操作数的数据类型是否为整型,若不是整型则可以强制转换为整型。
3)“/”的使用
“/”运算符是算术运算符,它是除法运算符,该运算符有一个规定:若两个操作数都为整数,则商为整数,否则商为实数。例如,华氏温度转换成摄氏温度的公式为:C= 5/9*(F-32),学生在编程时写作:C= 5/9*(F-32),但是不管输入的F值为多少,输出的结果C都为0。此类问题,在编程时需要注意商是要取整还是需要商的小数部分,若商要求为整数,则操作数必须为整数。
1.3 注意调试技能的培养
程序设计过程中,可能会出现很多错误,有的是语法错误,有的可能是编程时考虑不够全面,算法出现了一些问题。因此,在实验课时要求学生能自己使用一定的调试方法找到错误并加以修正。至于常用的调试方法,诸如设置断点、单步跟踪、监测变量以及在某些位置设置输出语句等,这些方法在实验课时可以先演示,在学生遇到实际问题时让其自己动手,若学生还是无法解决,则教师可以进行单独辅导,让学生自行操作时予以发现问题并告知如何正确操作。
1.4 注意培养学生建立测试数据的能力
1) 建立测试数据完成程序的测试
在实验课时,本文作者发现不少学生将程序调试成功后只输入一组测试数据就认为该程序没有问题了,但是,实际上该程序可能并不正确。在实验课时,要求学生对一个题目要输入多组数据,多组数据的设计一定要求能涵括题目的输入数据的不同要求,特别需要考虑0作为测试数据。
例如,要求编制一个求方程a*x*x+b*x+c=0的根的程序。其中,a、b、c要求用户输入。
这个题目实际上不太难,在上实验课时,很多同学就输入了一组测试数据:1 2 1。但是他们给出的程序很多都不对。那么,针对这个题目教师要求学生设想中学时碰到这个题目时,会考虑delta=b*b-4*a*c的取值,现在做测试时,仍然按该思路进行考虑,因此,准备了如下测试数据:1 2 1;-1 2 4;1 2 4。教师在检查作业时,若发现学生只准备了诸如上述这样的测试数据时,需要让学生注意测试数据0的使用,例如:0 1 2;1 0 2;1 2 0。由于测试数据0的加入,会让学生发现可能以前可能忽略的a为0的处理。
2) 先建立测试数据再完成程序的编码
在实验课时,本文作者发现有的题目有些学生感觉不知如何解决,遇到这种情况时,本文作者一般建议学生先建立测试数据,再依据现有的测试数据进行编码。当然,有时学生可能无法独自给出测试数据,那么教师可以帮助学生建立测试数据。
例如,加密规则如下:
要求输入若干组数据,每组数据均具有如下的形式:
起始行 —— 一行,内容为字符串 "START"
密文 —— 给出密文,密文不为空
结束行 —— 一行,内容为字符串 "END"
在最后一组数据之后有一行,包括字符串 "ENDOFINPUT",表示输入结束。
对每组数据,都有一行输出,给出密文对应的明文。
在实验课时,学生从题目描述中感觉无法理解输入数据的含义,但是能设计出如何将密文转换为明文,一般很多同学写出如下的代码:
但是有的同学就对输入和输出那块不怎么清楚是什么意思,因此,教师可以给出3个测试数据文件如下表1所示。
3 总结
在这门课程的实验教学中,学生们会出现比较多的情况,需要教师多加引导和指引,以上只是就常见的一些情况做了个总结,并给出了相应的解决思想和方法,在实际教学中取得了一定的效果。但是,在实验教学中还有很多方面需要进行相关的教学研究。
参考文献:
[1] 王晓霞.《C语言程序设计》教学策略与效应[J].电脑知识与技术,2012,8(26):6310-6312.
[2] 胡明,王红梅.程序设计基础——从问题到程序[M].北京:清华大学出版社,2011:4.