应用一题多解培养学生的创新能力

时间:2022-07-03 05:59:15

应用一题多解培养学生的创新能力

摘要:在程序设计教学中培养学生的创新思维能力,是广大程序设计教师需要解决的重大课题。本文介绍在程序设计教学过程中,如何设计程序题目、如何采用一题多解、启发式教学等方法,培养学生的创新思维能力。

关键词:程序设计;教学方法;创新思维

培养具有创新能力的程序设计人才,就要培养和提高学生分析问题和解决问题的能力,而要达到这一目的,就要求教师在日常教学过程中注意培养学生发散思维、联想思维等有利于创新的思维训练。教师通过精心设计的教学方法和教学过程对学生施以教育和影响,使他们作为一个独立的个体,能够善于发现和认识有意义的新知识、新思想、新事物、新方法,掌握其中蕴含的基本规律,并具备相应的能力,为将来成为创新型人才奠定全面的素质基础。

高级语言程序设计作为计算机相关专业学生迈进计算机世界大门的第一门语言类课程,其地位和作用不可估量[1],而对第一门语言课程的学习体验几乎将影响学生的一生。在多年的高级语言程序设计课程教学过程中,笔者运用发散思维方法,对某些编程题目引导学生寻求一题多解。这种做法极大地激发了学生的学习兴趣,使学生大大拓展了解题思路,同时在多种算法进行对比时,加深了学生对所学程序和算法的理解,也丰富了教学内容[2]。

1培养学生创新思维能力对教师的要求

培养学生创新思维能力,对教师提出了新要求。教师作为知识的传授者,要适应现代教育的发展需求,不断学习新知识、不断更新自己的知识结构。教师要提高自学能力,掌握自主创新的学习之路,以学导学,以学导教。

同时,教师知识结构必须合理。教师除了掌握本门课程以外,最少还应精通两门以上程序设计语言,同时要精通数据结构、算法分析等课程;还要有心理学、教育学知识,才能更好地去做好老师,教好学生。另外,一本好的教材也会对培养学生创新思维能力起到良好的辅助作用。由笔者编写的《C语言程序设计教程》一书通过深入浅出的讲解、大量实例及思考题,引导学生循序渐进地掌握C语言及编程知识,在学生中反映良好[3]。

2一题多解教学方法实践

笔者在多年教学过程中发现,学生对一题多解类的题目有很大的兴趣,所以笔者在教学中常常采用这种方法来培养学生的创新思维能力。在设计题目时,要难度适中;在讲授题目时,要以启发引导为主;一个问题的多种解法之间要有必然的联系,使学生感到顺理成章。

2.1选择结构一题多解

例1:某超市内大白菜的价格如下,单次购买20公斤以下,每公斤0.5元;20公斤以上,每公斤0.4元;50公斤以上,每公斤0.3元;100公斤以上,每公斤0.2元。编程输入购买大白菜的公斤数,输出应付的金额。

在讲授if语句的单分支应用之后,马上让学生完成此例题目。可以很容易地看出本例问题中涉及4种情况,目前我们只有通过使用4个独立的单分支选择结构来解决此问题,程序如下。

程序1:

int main( ){

float g,y;

scanf("%f",&g);

if(g

if(g>=20&&g

基金项目:黑龙江省计算机应用技术重点学科(081203)资助;黑龙江省智能教育与信息工程重点实验室资助。

作者简介:于延(1976-),男,讲师,硕士,研究方向为数据库技术、软件设计理论、网络安全。

if(g>=50&&g

if(g>=100) y=0.2*g;

printf("\n%f",y);

}

在讲授完if语句的嵌套以后,马上让学生再次完成例1。我们可以得到程序2以及程序3两个程序。

程序2:

int main( ){

float g,y;

scanf("%f",&g);

if(g

if(g

else y=0.4*g;

}

else{

if(g

else y=0.2*g;

}

printf("\n%f",y);

}

程序3:

int main( ){

float g,y;

scanf("%f",&g);

if(g

else { if(g

else {if(g

else y=0.2*g;

}

}

printf("\n%f",y);

}

在讲授完成多分支if语句以后,让学生利用多分支if语句再次完成该程序。

程序4:

int main( ){

float g,y;

scanf("%f",&g);

if(g

else if(g

else if(g

else y=0.2*g;

printf("\n%f",y);

}

同一个问题,教师在课堂教学过程中引导学生分别用4种不同的方法得以解决,不仅开拓学生的解题思路、锻炼学生思维能力,又使学生深刻领会了if语句的使用方法与技巧。

为了更好地训练学生的创新思维能力,笔者在实际教学中还启发学生:能否不用if语句完成此题呢?通过学生对已学过知识的回顾以及课堂激烈的探讨,终于找到可以实现选择的运算符――条件运算符。于是,笔者成功引导学生完成以下程序。

程序5:

int main( ){

float g,y;

scanf("%f",&g);

y=g

(g

printf("\n%f",y);

}

程序5程序的完成,极大地振奋了学生学习C语言的激情,简单的知识依然可以培养学生的创新思维能力。为了让学生更好地掌握C语言程序设计的精髓,更好地激发学生的学习兴趣,笔者在最后给出了程序6,并没有在课堂上讲解,而是让学生们自已理解,然后再为其他同学讲解,收到良好的教学效果。

程序6:

main( )

{ float g,y;

scanf("%f",&g);

y=((g=20&&g

(g>=50&&g=100)*0.2)*g;

printf("\n%f",y);

}

2.2循环结构一题多解

谭浩强教授的《C语言程序设计》教材在讲到while语句的时候有个计算从1加到n的精典例子程序[4]。

例2 输入正整数n,输出从1加到n的和。

为了节省篇幅,我们给出该问题的程序框架,该问题所有解法中的代码添加到省略号处即可。

int main( ){

int n,i,s;

scanf("%d",&n);

printf("%d",s);

}

一般地,教材中都会给出类似程序1和2的程序,启发学生区别程序1与程序2的不同之处及原因,使学生深刻理解循环变量初值如何设定、循环体执行次数的确定等问题。

程序1:

i=1,s=0;

while(i

s=s+i;

i++;

} 程序2:

i=0,s=0;

while(i

i++;

s=s+i;

}

实际上,由于C语言本身的高度灵活性,程序1可以有如下多种变形。

程序3:

i=0,s=0;

while(i++

i=0,s=0;

while(i++

程序5:

i=1,s=0;

while(i

程序6:

i=0,s=0;

while(i

程序7:

i=1,s=0;

while(s=s+i++,i

程序8:

i=0,s=0;

while(s=s+ ++i,i

通过以上多种解法,学生彻底掌握了while的语法规则及使用技巧,同时深刻理解了++运算符的运算规则和使用技巧。在后续教学do-while语句及for语句的时候,学生已经能自主创新使用多种方法解决同一问题,这一教学方法起到事半功倍的作用。

2.3函数编程及递归程序一题多解

在讲授函数的时候,笔者要求学生仿照教材中的例题完成例2的程序,学生很快得到代码1。

代码1的函数sum只能计算从1加到n的和,不够灵活,笔者在教学中启发学生编写从a加到b(a

代码1: 代码2:

int sum(int n){ int sum(int a,int b){

int i,s=0; int i,s=0;

for(i=1;i

return s return s;

} }

在讲授递归函数设计时,笔者启发学生根据教材中计算n的阶乘的递归程序来完成例2的函数设计。学生也很快得到代码3。

代码3:

int sum(int a,int b){

if(a= =b) return a;

else return a+sum(a+1,b);

}

笔者继续启发学生将等待求和的整数段平分为二份分别求和再相加,经过努力得到代码4。

代码4:

int sum(int a,int b){

if(a= =b) return a;

else if(b-a= =1) return a+b;

else return sum(a,(a+b)/2)+sum((a+b)/2+1,b);

}

经过以上几个函数代码的训练,学生深刻理解了函数及递归的知识。为了让学生得到更好的训练,笔者为该函数设计了以下改进方向,供学生思考:1)将等待求和的整数段平分为3份分别求和再相加;2)将等待求和的整数段以10个连续整数为单位分段求和,不足10个整数单独求和,再相加。

3结语

在笔者多年的教学过程中,采用一题多解的发散思维训练起到了良好的教学效果。学生对一个问题多种解法的探求过程本身就是创新思维的过程,对多种解法的对比使学生既掌握了知识又激发了兴趣,对学生程序设计起到事半功倍的作用。

通过我院程序设计教师多年来的努力,我院学生程序设计水平得到了很大提高。多年来,我院学生一直参加ACM/ICPC国际大学生程序设计竞赛,并多次取得东北赛区第二名、第三名,黑龙江省赛区第二名、第三名的成绩。

参考文献:

[1] 殷小玲,夏启寿. C语言教学中采用“一题多解”开发学生思维[J]. 计算机教育,2008(18):95-96.

[2] 陈金强. 浅谈程序设计中一题多解的教学方法. 计算机教育,2007(17):1460-1461.

[3] 于延. C语言程序设计教程[M]. 哈尔滨:东北林业大学出版社,2008:1-5.

[4] 谭浩强. C语言程序设计[M]. 北京:清华大学出版社,2000:100-101.

Training Students Creative Thinking by More Solutions on One Problem

YU Yan

(Institute of Computer Science and Information Engineering, Harbin Normal University, Harbin 150025, China)

Abstract: For programming teachers, how to cultivate creative thinking ability of students is a major issue. This paper introduction some experience for this question, such as how to design questions, how to solve one problem with many different method, how to use heuristic teaching, training student’s creative thinking.

Key words:programming; method of teaching; creative thinking

上一篇:分层次小班教学改革的实施 下一篇:我国网络工程专业建设的研究现状述评