欢迎访问志愿传奇

高考倒计时23

立身以力学为先,力学以读书为本。——欧阳修

您所在的位置: 新考网(原中国大学在线)>>教学教育 > 正文内容

《C语言程序设计》课程教学方法探索点滴

作者:  时间: 2017-04-16

 

基于C语言程序设计课程的教学实践,分析了《C语言程序设计》教学过程中,通过多年讲授《C语言程序设计》课程的实际教学,从培养学生学习兴趣和教学方法革新与探索等方面谈自己的体会,以达到提高课程教学质量的目的。

关键词 C语言;程序设计;学习兴趣;教学探索;方法革新

1 培养兴趣,养成严谨程序风格

要想学生能够学好C语言编程,培养学生的兴趣就是关键。在《C程序设计》课程教学中,如何找到一条比较新颖、有效的解决程序设计枯燥、难懂的教学方式,一直是从事计算机教学的教师不断探索和研究的方向。当学生对所学的课程知识产生兴趣和爱好时,就会从内心发出向往和求知的强烈欲望,产生积极、主动的学习动机,那么学习过程也就不再是一种负担,而是一种愉快的体验,为了避免学生出现对C这门课的误解,对它失去兴趣,更别说什么风格了。所以,前期上课时,我们要让学生有直观的感性认识,可结合学生所学专业,演示几个用C开发的相关程序,让学生领悟到《C程序设计》在今后专业岗位上的作用,多讲一些C在现实生活中的应用。例如让学生玩一些由C开发设计的破解CMOS密码程序、解方程,或用各种计算器按要求计算求值,通过实例的有效引入,可以让学生了解C的实用性和强大的功能,激发学生的求知欲,培养学生的学习积极性、主动性。然后让学生亲自上机操作,验证运行程序, 逐渐培养他们的兴趣,树立信心,激起学生学习的兴趣。另外,从一开始就要注意让同学们养成严谨严格的编程风格,对那些就算是最简单的程序也要注意其细枝末节,例如:比较“=”和“==”的不同,详细讲解:a=3printf(“%d%d%d”,++aa - -a++);的输出结果。还可充分利用同学们喜闻乐见的网络即时通讯工具和学生交流,巩固学生的学习积极性,随时解答学生在学习过程的问题,同时老师也可以在网上发布相关材料及时解决问题并了解学生的心理,这样就极大地激发了学生的学习兴趣,使得以往的填鸭式教学变成了在老师指导下的学生自主学习。

2教法革新,重在培养学生的实际应用能力

以教学大纲为依据,渗透新的教育理念,遵循教师为主导、学生为主体的原则,结合高职学生求知心理和已有的认知水平开展创新教学是十分的必要,现在显得尤其迫切。

C语言的学习中,如果不进行创新探索,大都会象往届90%以上的大学毕业生抱怨的一样:“C语言太难了,我什么都没学会就毕业了。

现就教学方法的革新与探索,以如下几点期待抛砖引玉之效。

.1十面埋伏

在讲授前面的内容时,一定要为后边的重点内容难点内容多留伏笔,便于学生突破重点,化解难点。

当讲解给变量命名规则的时候,我们就得上升一层来讲。应该讲标识符的命名规则。并且说明标识符包括:变量名、常量名、数组名、函数名、文件名等,这一切命名都得遵循这个标识符的命名规则。

当多次调用输入输出函数的时候,一定多去解释小括号中是什么(是函数的参数),为什么要用逗号隔开(因为有多个参数)。以后讲解函数就顺理多了,甚至不用多解释,一带可过,因为习惯已养成。

为了让同学们顺利突破函数这章重点内容,我们在前面讲授的时候不仅要讲到函数库中的函数,还要自制一些库中没有的函数,就算是暂时这程序不能运行,也得让学生明白函数的基本内容和功能,做到未雨绸缪。

例如:程序中有交换两个变量的值的运用  t =a;   a=b;   b=t;   a,b两变量的值就交换了,在学生清楚了这三个语句的基础上,我们就不再用这三个语句来写,而写成swap(a,b) 形式,而它就是一个专门用来交换两变量值的函数,这个函数的内容就是上边三条语句。

当定义数组的时候,如果你不强调数组名就是一个地址常量,到后来学习指针的时候很容易出错。如错误1int a[10] ={1,2,3} , *p=&a;因为他老是把数组当成一组变量来理解,其实,这样理解没错,只是少了一点内涵。错误2int a[10] ={1,2,3}a++;出现这样的问题是不知道数组名a是个常量,不能进行自增运算。这种错误应在前边防止,做到防患未然

.2百川汇海

不知道是什么原因,C语言从开始到现在的教材中,基本没有对程序的算法进行归类的,可能是慑于谭浩强先生的大名吧!对于一些自学能力强的学生可能不需要归类,而对于自学能力较弱的学生来说,要理清里面各种算法之间的关系可能太不容易了,为什么我们高职的教材也不进行归类呢?

在程序的三种基本结构讲解完成后,应把所有的课后习题进行归类整理得出算法特征,并辅以相应的习题,使学生能举一反三,一通百通。

..循环嵌套

通过如下典型实例使学生进一步理解循环嵌套的运行机制。

      int I,k,m,a=3;

           for  ( I=1 ;I<=5  ; i++){

              a=a+3;               ………  执行5

              for (k = 1 ; k<=6 ; k++){

                  a=a+3;              ……  执行5*6

                  for(m = 1 ; m<= 7 ; m++){

                    a=a+3;         ……  执行5*6*7

            }}}

            Printf(“%d”, a)

a的值应是738

..图阵数阵

通过如下图阵掌握星阵编程的一般规律

                *

             *  *  *

          *  *  *  *  *

       *  *  *  *  *  *  *

          *  *  *  *  *

             *  *  *

                *

    对称轴是第4行,本行共有7列)

星阵有七行,那么第 n 行有多少列呢?不正是解决这类问题的关键吗?

n 行有7 – 2 * abs( 4 – n ) (这几乎就是公式),所以该程序如下:

int i,k,j;

for(i =1; i<= 7; i++){

for (k=1;k<=(20+abs(4-i));k++)printf(" ");

for (j=1; j<=(7-abs(4-i)*2); j++) printf("*");

     printf("\n");}

..数域遍历

例如1:求1100内不能被3整除的整数的个数。

例如2:编程产生尾数为114位整数,并每行5个打印输出。

例如3:输入一批数,直到输入0为止,统计正数和负数的个数。

古典数学问题:百钱百鸡,百马百担等也属这类算法的内容

..规则数列

就是有规律可循的一列数值,如果知道其初值,就很容易计算出其中的任意项。可考虑使用迭代法来解决这类问题。例如:1,1,2,3,5,8,13………同样的问题有:递增的牛群,递增的兔群。

..初等数学问题

1:求两个正整数的最大公约数。 【欧几里德算法】

2:编程找出100~999之间的所有梅花数(也称作水仙花数:一个三位数等于它的每一位数字的立方和)

3:输出100以内的所有完备数(其各因子之和等于其本身的正整数)等

.3横看成岭侧成峰

说到排序,所有学过程序设计的同学都认为难理解、难懂,为什么呢?大部分的教材在这一章节都是就事论事,较少究其根源。

那么这种教材又有什么样的特色呢?按大纲要求我们同学们掌握的排序算法不外乎:冒泡法,交换法,选择法几种,而所有的教材都只全面细致地讲解了冒泡排序算法。再出几个交换法,选择法的练习题放在课后练习中来希望同学们巩固提高,这种教材本也没什么不好的地方,但这样的教学效果实在不尽人意。为什么不换种方法来教来学呢?

其实排序方法来源于最值。大家想:从n个数中找到最大值或者最小值,就有很多办法,以下列出三种方法:

1)、相邻两数比较后,符合条件就交换,直到最后,最大或者最小数就到了最后一个位置上。按这种找最值的办法,同样也可找到剩下的n-1数的最值放到倒数第二个位置上,一直进行下去,这就是冒泡排序算法。

2)、拿第一个数和后边的其它数两两比较,如果第一个数比其它的数大,则就交换,比较交换了n-1次后,则第一个位置上是这n个数的最小数,同理可在第二个位置上放置其余n-1个数中的最小数,直到最后。这就是交换法排序算法。

3)、拿第一个数和后边的其它数两两比较,如果第一个数比其它的数小,则就记下这个数的位置,然后再拿这个数与它后边的数比较,符合条件就记下它的位置,直到n-1次比较后,这n个数的最大值就能找到,再把它与是后的数交换位置,不也找到了这n个数中的最大值吗?照此办理,这n 个数就一定能按要求排好序,这就是典型的选择法排序。

其实这三种排序都与最值有关,且最值是同学们最熟悉,也最有办法的,那么教材为什么不从最容易着手的地方入手呢?当然进一步分析求最值的方法,还有第四种、第五种求最值的办法,同样能产生第四种、第五种排序的方法。揭开这层面纱,庐山真面目才会显现。

3重点选题,培养学生动手能力

程序设计课程的实践性很强,,实验教学在程序设计教学中起着重要的作用,学生只有通过自己编写程序、上机调试程序,才能从中理解程序设计的思想方法、积累程序调试的经验,体会成功的乐趣,从而激发学生的学习兴趣,学生只听不练根本达不到学习的目的。如在学生学会编写求1+2+…+N=?的程序后,即引导学生设计求1***4……*N的程序,待学生设计出N!的程序后,接着又让学生进一步设计求1!+2!+…+N!=?的程序。这种一环紧扣一环的探究式的动手实践练习, 以发展学生探索能力为主线来组织实践, 以培养探究性思维的方法为目标,以基本的教材为内容,使学生通过再发现的步骤进行主动实践的过程,产生一种探索和发现的心理。因此如何让学生综合应用所学知识解决实际问题,提高综合应用能力和动手操作能力,激发学习兴趣也是我们需要加入课程设计的内容。课程设计时,老师要重点设计选题, 使得选题既贴近实际需要,又能够让学生感兴趣,并且能够运用所学知识解决问题,课程设计题目分为基本题和综合题。基本题按教学顺序设计,尽量避免涉及后续章节的知识,后续的课程设计题目尽量引用前面的课程设计内容,以便加深对前面所学知识的理解;综合性题目是对一学期所学知识的总结和巩固,应与实际生活或工作相关且具有一定规模,可将其分成几个子项目,由更多的学生参与,分工合作,以期进一步锻炼学生的动手能力,从而进一步培养学生分析问题、解决问题、研究和探索问题的能力和团队协作精神。

总之,C语言作为一门重要的编程语言,在高校的计算机基础教学中占据重要位置,教学方法在程序设计教学中的举足轻重制约着程序设计教学的效率。科学的教学方法一定会为学生提供良好的帮助。我们在教学过程中应以学生为主体,教师为主导,采用符合学生认知规律的、科学的教学方法,充分调动学生学习的主动性,同时,提高学生实际应用能力,养成严谨的程序风格,从而使得C课程的教学质量得到不断地提高。

参考文献

1谭浩强.《C语言程序设计》. 北京:清华大学出版社,2008.

2严蔚敏,吴伟民.《数据结构》.北京: 清华大学出版社,2002.


加入家长群

QQ扫一扫,加入家长群

关注我们

关注微信公众号,了解最新精彩内容

关注抖音号

抖音扫一扫,立即关注我