类比法在C语言程序设计教学中运用.docx
《类比法在C语言程序设计教学中运用.docx》由会员分享,可在线阅读,更多相关《类比法在C语言程序设计教学中运用.docx(7页珍藏版)》请在冰豆网上搜索。
类比法在C语言程序设计教学中运用
摘要:
教学中方法得当,事半功倍。
该文重点阐述了类比法在《C语言程序设计》教学过程中的应用,以函数实例介绍了方法的展开过程,使得教学中的抽象概念具体化,收到良好的教学效果。
关键词:
类比法;函数;教学效果
中图分类号:
TP311文献标识码:
A文章编号:
1009-3044(2009)25-7318-02
ApplicationAnalogyinCProgrammingTeaching
XUWen-fang
(XiamenUniversityTanKahKeeCollegeComputerDepartment,Zhangzhou363105,China)
Abstract:
Asuitablemethodcanhelpusgettwicetheresultwithhalftheeffort..ThispaperisconcernedwiththeapplicationanalogyinCprogrammingteaching.Bytheexampleoffunction,Tellushowtoapplyanalogytoprogrammingteaching.Itgetsgoodteachingresults.
Keywords:
Analogy;Function;Teachingresult
C语言作为一个经典的编程语言,被很多的高校选做编程入门的必修课程。
对于计算机专业学生而言,这门课通常在大学第一年开设,课程的主要目地在于使学生掌握程序设计的基本方法和本思想,培养使用计算机解决实际问题的能力,为它对后续专业课程的学习奠定基础。
但对于大一的新生而言,往往对计算机工作原理了解不多,对一些抽象的编程思想,理解时存在一定的困难,致使写程序时无从下手。
所以在教学过程中,采用适当的教学方法将抽象的思想具体化是非常必要的。
笔者在教学过程中使用了类比法,收到了良好的教学效果。
类比在汉语字典中的解释是一种推理方法,根据两种事物在某些特征上的相似,做出它们在其他特征上也可能相似的结论,这种方法在我们认识新事物时很有帮助。
教学中应用类比法,可将抽象概念同生活中熟悉的事物类比,将难理解的编程思想同已学知识类比,下面结合函数相关知识点介绍一下教学过程的展开。
1针对抽象的参数概念应用类比法
在讲解函数参数这个知识点时,一个让学生很困惑的问题是:
什么时候要用实参传递数值,什么时候用实参传递地址?
二者的差别是什么?
通过以下示例说明类比法在教学中的展开。
编写一个子程序实现加密电文的翻译,其功能是:
对于字符字母,字母表中第i个字母变成第(26-i+1)个字母。
即:
A→Za→z;B→Yb→y;C→Xc→x;对于非字母字符保持不变。
例如输入Blfzivirtsg!
输出:
Youareright!
#include
main()
{
voidtransform(charc);
inti=0;
charch[80];
printf("请输入密文:
");
gets(ch);
while(ch[i]!
='\0')
{
transform(ch[i]);
i++;
}
printf("\n翻译后的电文为:
%s\n",ch);
}/*程序1主函数结束*/
voidtransform(charc)
{
if((c>='A')&&(c<='Z'))
c=155-c;
elseif((c>='a')&&(c<='z'))
c=219-c;
else
c=c;
}/*程序1子函数结束*/
请输入密文:
Blfzivirtsg!
翻译后的电文为:
Blfzivirtsg!
上述程序1中实参传递给形参的是一个变量的值。
讲解时可将参数传递的过程与学生中流行的qq聊天类比。
参数传递数值就好比A通过qq向好友B传递照片,B接收到后如果对照片进行了修改,并不会影响A在本地浏览照片,因为过程中是将照片复制了一份给B,实参是将数值复制了一份给子函数transform(),子函数对数值进行了修改,但没有返回主函数,所以上述程序是没有起到翻译作用的。
再来看程序2:
#include
main()
{voidtransform(charstr[80]);
inti=0;
charch[80];
printf("请输入密文:
");
gets(ch);
transform(ch);
printf("\n翻译后的电文为:
%s\n",ch);
}/*程序2主函数结束*/
voidtransform(charstr[80])
{
inti=0;
while(str[i]!
='\0')
{
if((str[i]>='A')&&(str[i]<='Z'))
str[i]=155-str[i];
elseif((str[i]>='a')&&(str[i]<='z'))
str[i]=219-str[i];
else
str[i]=str[i];
i++;}
}/*程序2子函数结束*/
请输入密文:
Blfzivirtsg!
翻译后的电文为:
Youareright!
上述程序中实参传递了一个地址给形参,好比A通过qq的远程协助与B共享了自己电脑,这样B与A看到的是同一个文件,当B修改照片后,A所看到的就是被修改后的照片,通过传递地址给子函数,同一段的存储空间在主函数和子函数transform()之间实现共享,所以这段程序可以输出翻译后的电文。
通过以上的类比,使学生清楚看到二者的本质差别,从而在编程时可以结合具体问题灵活的做出选择。
2针对易混淆的参数形式应用类比法
对于普通变量做函数参数时,相应的子函数定义以及函数原型的形式多数学生是很容易掌握的,但谈到数组元素做函数参数时,很多同学在定义子函数,写函数原型时就容易同数组名做函数参数混淆,通过下面的表1,容易让学生看到其实
(1)
(2)本质上是一样,所以对于
(1)中普通变量做函数参数时的特点,
(2)也一样,这样就不容易将
(2)和(3)混淆了。
3对于难理解的递归思想应用类比法
对于第一次接触递归思想的学生来说,将自己的递归思想用代码实现时往往不知从何处下手,此时可将学生熟悉循环思想与递归类比,例如:
求斐波那契(Fibonacci)数列的问题,用循环实现求数列第20项值的代码如程序3所示,用递归实现如程序4所示:
#include
main()
{inti;
intf[20]={1,1};
for(i=2;i<20;i++)
f[i]=f[i-2]+f[i-1];
printf(″%12d″,f[19]);
}/*程序3结束*/
#include
intfib(intn)
{intz;
if(n==1||n==2)
z=1;
else
z=fib(n-1)+fib(n-2);
return(z);
}/*求数列各项的递归函数*/
main()
{intfib(int);
intn=20,result;
result=fib(n);
printf(“%d”,result);
}/*程序4结束*/
通过程序3与程序4的对比,可以看到循环思想中的必要元素有:
循环初始值,循环结束条件以及循环体。
同样实现递归思想的必要元素有:
递归求解的问题规模,递归返回点以及递归表达式,找到这些元素后再编写递归程序就容易了。
以上是笔者在c语言程序设计课程教学方法方面的一点尝试。
但这远不是一个终点,如何将我们熟悉的方法与具体的教学相结合是值得我们不断探讨的问题,总之,希望借着对这些问题的探讨,使教学水平得到不断的提高。
参考文献:
[1]谭浩强.C程序设计[M].3版.清华大学出版社,2005:
155-184.
[2]程艳.C语言程序设计教学中类比法的运用[J].教职论坛,2003(18):
34.