论文部分内容阅读
摘要:C语言是一门非常重要的专业基础课程,直接影响后续专业课的学习和编程能力的培养,因此,针对语言特点,不断探索更为有效的教学方法,显得尤为重要。实践中,笔者把“启发式”和“案例驱动”教学方法结合起来,取得了良好的教学效果。在明确了C语言的教学目标的基础上,把提高学习兴趣、培养编程能力作为重点,结合实践,对“启发式”和“案例驱动”教学方法进行了探索,对于C语言教学方法改进具有参考价值。
关键词:C语言教学;启发式;案例驱动
中图分类号:G642.41文献标志码:A文章编号:1002-2589(2009)17-0221-02
一、引言
C语言的发展贯穿了计算机发展的几乎整个历程,蕴含了程序设计的基本思想和相关概念,如程序设计、数据结构等重要考业课程都以C语言为背景,再加上它应用广泛,从操作系统、数据库系统、通讯、数据处理,甚至嵌入式应用都大量使用C语言开发。所以,在高校作为重要的专业基础课程,C语言教学的重要性是公认的。作者多年来从事C语言的教学,实践中发现在明确的教学目标下,精心设计教学内容,并将“启发式”与“案例驱动”结合起来能取得较好的教学效果。下面是作者提炼出的教学心得,以期抛砖引玉。
二、明确的教学目标
教学中,首先应明确教学目标。C语言的第一节课很重要,有的老师为了赶课时可能匆匆略过,没有讲到位就直接进入后序章节中,学生没有真正领悟学习C语言的重要性,没有激发出主动获取知识的动力,造成被动的接受知识,学到最后可能也不学习C语言有什么用。为避免这种情况,第一次课我们就应突出以下三个方面:
(1)为什么说C语言是一门重要的专业基础课程?除了为后序课程做准备外,它还能做哪些应用,并用C语言编的实例程序演示一下,会收到很好的教学效果,学生会很喜欢,也让学生明白学习C语言的目的,激发学习兴趣。
(2)规划教学内容,明确学习方向。把C语言的大纲给学生展示及课程设计所包含的内容,最后达到的目标,让学生明确大致的方向。
(3)沟通“教”与“学”的方法。老师准备如何教?让学生怎样学?对于初学编程语言的学生来说非常重要,花些时间,会起到事半功倍的作用。大学里的学习和高中明显不同,更要注重提高学生的主动性,教师在此可以给学生提供一些资料、网址及学习方法,让学生没有畏难心理,并可以主动学习。
三、精心设计的教学内容
教材在教学中起着至关重要的作用,在教学当中,吃透教材,但又不能局限于教材,安排好教学内容很关键,也能起到画龙点睛的作用。
例如在求解最大公约数时,很多教科书只给出一个经典的辗转相除算法,如果我们就这样直接讲解时,学生很可能不知道为什么非要这样写呢?这是根据一个数学定理得到的求最大公约数的算法,大部分学生都不知道这个定理,所以不能理解。但我们在讲解时,可以安排先从最大公约数的定义出发,即几个数所公有的约数叫这几个数的公约数,公约数中最大的一个叫做这几个数的最大公约数。按照该理论可以写出学生容易理解的算法:
void main()
{
int m, n, j;
printf("input n,m(n>0,m>0)");
scanf("%d%d",&n,&m);
j=(n for(;j>0;j--)
{
if(n%j==0&&m%j==0)
break;
else
continue;
}
printf("max gys is:%d\n",j);
}
该程序的思想是,从两个数中选出较小的那个整数,从它开始依次递减(步长为1),直到某个数可以同时整除这两个数,最先满足条件的就是最大公约数。先按照学生的普遍思路出发讲解这个简单的程序实现方法,然后再讲解经典算法,学生就会更自信,兴趣也会更浓。
另外,有些章节可以根据情况详略得当,大学里的学生要培养其逐步养成自学的能力,有些内容可以适当的留给学生自己,让学生自己去理解,去做题目,以增加其成就感。
在教学中,还应参考一些其它的教材,可以丰富知识,引入更加合适的案例,建议可以参考一下国外的教材,因为国外的有些教材与实例结合,解决当前热点问题,如移动通信、网络的配置、DNA结构图绘制等,讲述了解决问题的系统的方法,讲述了利用软件工程方法设计出内聚的、可读性好的、可重用的模块化程序解决方案。可以引荐给學生,以提高其知识面,也可以弥补一些教材的不足。
四、结合案例应用启发式教学
有了前面的基础,教学中再安排一些案例,启发学生思考,效果会更好。对于学生而言,很想学习一些实践性的例子,所以在适当的章节中应该有一个切合实际的例子。比如讲到指针和数组时,这是一个难点,学生会感到很难,并且不知如何运用,此时以扑克牌游戏为例,先以52张牌为基准,从“洗牌”还有“发牌”讲起,这中间我们用到了指针数组、随机函数、双重循环语句等,由复杂到简单,把复杂的难以接受的语句和算法通过强烈的兴趣变成容易接受和消化吸收。这种教学方法,特别适合学生掌握了一定的方法之后再进一步的理解和加深并学会灵活运用的能力,在教学当中,可以从以下几点启发学生。
(一)启发学生复杂的事情简单的做
当面对一个复杂的程序时,应让学生明白不能选择逃避,而是如何想办法解决它,如何把复杂的程序从大的模块分析化简为若干个小的模块再到具体的算法。拿扑克牌游戏为例,当看到这个题目学生可能感到无从下手,先分析需要几个函数,再到具体实现。在具体实现中比如洗牌时先分析这52张牌需要多少个变量,这些变量应该如何定义,通过分析我们得出:
char*p[4]={"黑桃","红桃","梅花","方块"};//四种花色
int a[4][13]={0}; //每种花色对应13张牌,共52张,初始值为0,为洗牌准备
int row,clon;//随机的行与列(4行与13列)
最关键的是算法的选取,52张牌(1-52)我们要放在随机的位置上,应如何放,这要用到随机函数,循环语句,然后得出:
for(int i=1;i<53;i++)//共52张牌
{while(1)//找出一个随机的行与列
{row=rand()%4;
clon=rand()%13;
if(a[row][clon]==0)//如果这个位置是空的就填上,然后退出内循环
a[row][clon]=i;
break;
}
else continue; //如果已填上就继续找
}}
学生看到原来一个扑克牌游戏就是如此实验出来的,感觉很有意义,也对C越来越感兴趣,趁热打铁,此时启发学生如果加上两张大王的话,又该如何编写呢?从而引起学生深深的思考,化被动为主动。
(二)启发学生简单的事情认真的做
启发学生越是简单的东西越不能忽视,看似简单的程序,里面任何一个环节都要研究透彻,不能大意。对于洗牌程序来说算法已有,那发牌程序又如何编写呢?可以先让学生自己考虑,经过测试,有一部分学生这样写:
for(int i=0;i<4;i++)
for(int j=0;j<13;j++)
{ if(m%2= =0)//m已定义过,初值为0
printf("\n");//分两列输出
prinf("%d",a[i][j]);
m++;
}
当场运行给学生,会发现发牌是一样的,和洗牌的结果不一致。看似简单,但一下手就错,如何改进?和洗牌结合起来:
for(int k=1;k<53;k++)//52张牌
for(int i=0;i<4;i++)
for(int j=0;j<13;j++)
{ if(m%2= =0)//m已定义过,初值为0
printf("\n"); //分两列输出
if(a[i][j]= =k)//找到第1、2……牌
{prinf("%d",a[i][j]);
m++;}
}
学生会恍然大悟,看似简单的东西,要不断实验,最后才能得出正确结果。
(三)启发学生认真的事情反复的做
还是拿上例为准,当场将编好的程序反复验证,发现是有规律的,为什么会出现这样的情况,随机发牌应该是无规律的,这是因为随机种子一样,所以产生的随机数一样。程序修改为:
srand(time(0));//给随机数产生一个随机种子(seed),时间在变化,所以种子也不同
for(int i=1;i<53;i++)//共52张牌
{while(1)//找出一个随机的行与列
{row=rand()%4;
clon=rand()%13;
if(a[row][clon]= =0)//如果这个位置是空的就填上,然后退出内循环
a[row][clon]=i;
break;
}
else continue; //如果已填上就继续找
}}
启发学生考虑成熟的东西还需要不断测试与验证,直至达到合乎要求的结果。从这个例子中学生会学到书上没有的一些知识点,有种学有所用的感觉。
(四)启发学生反复的事情创新的做
启发学生在反复测试一些程序的时侯,看有无更好的解决办法,代码能简化的尽量简化,但又不能影响程序的可读性。创新能力对于培养学生的基本素质也很重要,但这需要学生了解更多的知识,促使学生主动学习,培养其独立发现和解决问题的能力。
五、总结
本文主要提出了“启发式”与“案例驱动”相结合的教学方法。老师在教学中起到的作用不仅是传授知识,指点方向也很重要,要不断挖掘学生的潜能。教学是个不断发展的过程,教学当中,要根据学生情况具体对待,找出一套适合自己学生学习的好方法,不断总结,寻找经验,以取得更大的教学效果。
参考文献:
[1]中国高等院校计算机基础教育课程体系[M].北京:清华大学出版社,2006.
[2]刘达明,甘玲.如何提高计算机专业的C语言教学质量[J].计算机教育,2005,(8):32-33.
[3]张莹.浅谈高职院校的项目教学模式[J],江苏高教,2008,(1):25-26.
[4]徐涵.行为导向教学中的教师角色转换[J].中国职业技术教育,2006,(4):14-16.
(責任编辑/石银)
关键词:C语言教学;启发式;案例驱动
中图分类号:G642.41文献标志码:A文章编号:1002-2589(2009)17-0221-02
一、引言
C语言的发展贯穿了计算机发展的几乎整个历程,蕴含了程序设计的基本思想和相关概念,如程序设计、数据结构等重要考业课程都以C语言为背景,再加上它应用广泛,从操作系统、数据库系统、通讯、数据处理,甚至嵌入式应用都大量使用C语言开发。所以,在高校作为重要的专业基础课程,C语言教学的重要性是公认的。作者多年来从事C语言的教学,实践中发现在明确的教学目标下,精心设计教学内容,并将“启发式”与“案例驱动”结合起来能取得较好的教学效果。下面是作者提炼出的教学心得,以期抛砖引玉。
二、明确的教学目标
教学中,首先应明确教学目标。C语言的第一节课很重要,有的老师为了赶课时可能匆匆略过,没有讲到位就直接进入后序章节中,学生没有真正领悟学习C语言的重要性,没有激发出主动获取知识的动力,造成被动的接受知识,学到最后可能也不学习C语言有什么用。为避免这种情况,第一次课我们就应突出以下三个方面:
(1)为什么说C语言是一门重要的专业基础课程?除了为后序课程做准备外,它还能做哪些应用,并用C语言编的实例程序演示一下,会收到很好的教学效果,学生会很喜欢,也让学生明白学习C语言的目的,激发学习兴趣。
(2)规划教学内容,明确学习方向。把C语言的大纲给学生展示及课程设计所包含的内容,最后达到的目标,让学生明确大致的方向。
(3)沟通“教”与“学”的方法。老师准备如何教?让学生怎样学?对于初学编程语言的学生来说非常重要,花些时间,会起到事半功倍的作用。大学里的学习和高中明显不同,更要注重提高学生的主动性,教师在此可以给学生提供一些资料、网址及学习方法,让学生没有畏难心理,并可以主动学习。
三、精心设计的教学内容
教材在教学中起着至关重要的作用,在教学当中,吃透教材,但又不能局限于教材,安排好教学内容很关键,也能起到画龙点睛的作用。
例如在求解最大公约数时,很多教科书只给出一个经典的辗转相除算法,如果我们就这样直接讲解时,学生很可能不知道为什么非要这样写呢?这是根据一个数学定理得到的求最大公约数的算法,大部分学生都不知道这个定理,所以不能理解。但我们在讲解时,可以安排先从最大公约数的定义出发,即几个数所公有的约数叫这几个数的公约数,公约数中最大的一个叫做这几个数的最大公约数。按照该理论可以写出学生容易理解的算法:
void main()
{
int m, n, j;
printf("input n,m(n>0,m>0)");
scanf("%d%d",&n,&m);
j=(n
{
if(n%j==0&&m%j==0)
break;
else
continue;
}
printf("max gys is:%d\n",j);
}
该程序的思想是,从两个数中选出较小的那个整数,从它开始依次递减(步长为1),直到某个数可以同时整除这两个数,最先满足条件的就是最大公约数。先按照学生的普遍思路出发讲解这个简单的程序实现方法,然后再讲解经典算法,学生就会更自信,兴趣也会更浓。
另外,有些章节可以根据情况详略得当,大学里的学生要培养其逐步养成自学的能力,有些内容可以适当的留给学生自己,让学生自己去理解,去做题目,以增加其成就感。
在教学中,还应参考一些其它的教材,可以丰富知识,引入更加合适的案例,建议可以参考一下国外的教材,因为国外的有些教材与实例结合,解决当前热点问题,如移动通信、网络的配置、DNA结构图绘制等,讲述了解决问题的系统的方法,讲述了利用软件工程方法设计出内聚的、可读性好的、可重用的模块化程序解决方案。可以引荐给學生,以提高其知识面,也可以弥补一些教材的不足。
四、结合案例应用启发式教学
有了前面的基础,教学中再安排一些案例,启发学生思考,效果会更好。对于学生而言,很想学习一些实践性的例子,所以在适当的章节中应该有一个切合实际的例子。比如讲到指针和数组时,这是一个难点,学生会感到很难,并且不知如何运用,此时以扑克牌游戏为例,先以52张牌为基准,从“洗牌”还有“发牌”讲起,这中间我们用到了指针数组、随机函数、双重循环语句等,由复杂到简单,把复杂的难以接受的语句和算法通过强烈的兴趣变成容易接受和消化吸收。这种教学方法,特别适合学生掌握了一定的方法之后再进一步的理解和加深并学会灵活运用的能力,在教学当中,可以从以下几点启发学生。
(一)启发学生复杂的事情简单的做
当面对一个复杂的程序时,应让学生明白不能选择逃避,而是如何想办法解决它,如何把复杂的程序从大的模块分析化简为若干个小的模块再到具体的算法。拿扑克牌游戏为例,当看到这个题目学生可能感到无从下手,先分析需要几个函数,再到具体实现。在具体实现中比如洗牌时先分析这52张牌需要多少个变量,这些变量应该如何定义,通过分析我们得出:
char*p[4]={"黑桃","红桃","梅花","方块"};//四种花色
int a[4][13]={0}; //每种花色对应13张牌,共52张,初始值为0,为洗牌准备
int row,clon;//随机的行与列(4行与13列)
最关键的是算法的选取,52张牌(1-52)我们要放在随机的位置上,应如何放,这要用到随机函数,循环语句,然后得出:
for(int i=1;i<53;i++)//共52张牌
{while(1)//找出一个随机的行与列
{row=rand()%4;
clon=rand()%13;
if(a[row][clon]==0)//如果这个位置是空的就填上,然后退出内循环
a[row][clon]=i;
break;
}
else continue; //如果已填上就继续找
}}
学生看到原来一个扑克牌游戏就是如此实验出来的,感觉很有意义,也对C越来越感兴趣,趁热打铁,此时启发学生如果加上两张大王的话,又该如何编写呢?从而引起学生深深的思考,化被动为主动。
(二)启发学生简单的事情认真的做
启发学生越是简单的东西越不能忽视,看似简单的程序,里面任何一个环节都要研究透彻,不能大意。对于洗牌程序来说算法已有,那发牌程序又如何编写呢?可以先让学生自己考虑,经过测试,有一部分学生这样写:
for(int i=0;i<4;i++)
for(int j=0;j<13;j++)
{ if(m%2= =0)//m已定义过,初值为0
printf("\n");//分两列输出
prinf("%d",a[i][j]);
m++;
}
当场运行给学生,会发现发牌是一样的,和洗牌的结果不一致。看似简单,但一下手就错,如何改进?和洗牌结合起来:
for(int k=1;k<53;k++)//52张牌
for(int i=0;i<4;i++)
for(int j=0;j<13;j++)
{ if(m%2= =0)//m已定义过,初值为0
printf("\n"); //分两列输出
if(a[i][j]= =k)//找到第1、2……牌
{prinf("%d",a[i][j]);
m++;}
}
学生会恍然大悟,看似简单的东西,要不断实验,最后才能得出正确结果。
(三)启发学生认真的事情反复的做
还是拿上例为准,当场将编好的程序反复验证,发现是有规律的,为什么会出现这样的情况,随机发牌应该是无规律的,这是因为随机种子一样,所以产生的随机数一样。程序修改为:
srand(time(0));//给随机数产生一个随机种子(seed),时间在变化,所以种子也不同
for(int i=1;i<53;i++)//共52张牌
{while(1)//找出一个随机的行与列
{row=rand()%4;
clon=rand()%13;
if(a[row][clon]= =0)//如果这个位置是空的就填上,然后退出内循环
a[row][clon]=i;
break;
}
else continue; //如果已填上就继续找
}}
启发学生考虑成熟的东西还需要不断测试与验证,直至达到合乎要求的结果。从这个例子中学生会学到书上没有的一些知识点,有种学有所用的感觉。
(四)启发学生反复的事情创新的做
启发学生在反复测试一些程序的时侯,看有无更好的解决办法,代码能简化的尽量简化,但又不能影响程序的可读性。创新能力对于培养学生的基本素质也很重要,但这需要学生了解更多的知识,促使学生主动学习,培养其独立发现和解决问题的能力。
五、总结
本文主要提出了“启发式”与“案例驱动”相结合的教学方法。老师在教学中起到的作用不仅是传授知识,指点方向也很重要,要不断挖掘学生的潜能。教学是个不断发展的过程,教学当中,要根据学生情况具体对待,找出一套适合自己学生学习的好方法,不断总结,寻找经验,以取得更大的教学效果。
参考文献:
[1]中国高等院校计算机基础教育课程体系[M].北京:清华大学出版社,2006.
[2]刘达明,甘玲.如何提高计算机专业的C语言教学质量[J].计算机教育,2005,(8):32-33.
[3]张莹.浅谈高职院校的项目教学模式[J],江苏高教,2008,(1):25-26.
[4]徐涵.行为导向教学中的教师角色转换[J].中国职业技术教育,2006,(4):14-16.
(責任编辑/石银)