首页 > 范文大全 > 正文

“杨辉三角”与一题多解的计算思维

开篇:润墨网以专业的文秘视角,为您筛选了一篇“杨辉三角”与一题多解的计算思维范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:程序设计类课程充满了思维探索,教师可围绕某个典型题例,进行一题多解的思维训练,学生通过自主探索来接触计算思维,从多元角度对同一问题,进行分析与求解,立体训练自己的能力。

关键词:杨辉三角一题多解;实践环节;计算思维

中图分类号:TP311.1 文献标识码:A 文章编号:1009-3044(2013)26-5917-03

1 概述

程序设计类课程对于初学学生来说,是一门既有挑战,又有点难度的课程。学得好的同学就是高手,不能入门的连考个及格都困难。因此教师教授这类课程时,肯定不能照本宣科,也不能简单按模块教学,应该围绕培养学生的计算思维展开。

即以典型的专题为载体,用思维训练来贯穿整门课程。精选案例,对每个案例发散展开,精讲多练,并让学生进行自主的循序渐进的实践训练。

案例或载体的选择原则如下:应该选择一些基础性的综合的案例。这些案例蕴含了:1)基本知识如语法、丰富数据类型;2)凸现程序基本结构;3)能带有一定典型算法。举例来说,杨辉三角带有组合问题数学背景,蕴含了循环结构和二维数组操作的案例。斐波拉契数列蕴含了迭代或递归等多个循环算法的案例。润年就是一个蕴含一个逻辑结构、选择结构算法的案例。

我们对案例内的一些内容作一些约定,比如基础算法选择结构、基本循环、基本双重循环、简单的数据结构都成为原子的知识或技能点或能力点。比如输出一个长方形的*形图案,考核的是对双重循环的掌握,我们认为这个长方形的*形图案是简单的、原子的能力点。还有上三角*也是原子的能力。而棱形*图案,我们认为它是复杂的,它对循环控制的要求较高。举例来说,下三角的输出就是一个原子能力点,代码如下:

//空C文件也是原子的

#include "stdio.h"

main()

{}

//原子能力点,二维数组的输出

for(i=0;i

{ for(j=0;j< N;j++)

printf("%d ",a[i][j]);

printf("\n");

}

//原子能力点,完整的下三角*的输出

#include "stdio.h"

main()

{ int i,j;

for(i=0;i

{ for(j=0;j

printf("%c ",'*');

printf("\n");

}}

后续文中提到的原子能力点,大家就不会感到突兀了。

2 何谓一题多解

这里讲到的一题多解,可以是从分析—设计—实现过程中任何可能的变化都可以提取到解题方法,谓之多解。多解的思维的一定是发散性的,发散了那么多的思绪,得到那么多解,如何传授的完毕。因而,在操作前老师,其实,都已经结合课程的内容,来准备案例了,将一些无关C语言课程的思绪撇开,保持集中几个重点,从经典的方法中挖掘思维,授课。

但是,到此如何终止那么学生是得不到锻炼的,因而,留下思考的空间给学生还有其他的解法吗,自己去动脑筋,考虑的方向,依然是用C规范范畴,可以结合数据结构或者算法或者根据问题的定义去设计解法,得到答案,要反馈总结,如,逆向思考,自己做得C程序的解是否有数据结构的局限性,存储空间的局限性,方法本身的局限性。甚至C都弄清楚后,对于一般程序设计的解法是什么,又进行了合并、推理、推广,得到新一轮提升。

3 杨辉三角与一题多解的计算思维

以杨辉三角为例谈一题多解的问题。得到我们的第一步:

1)待求解问题。

我们会先考虑分析其数学背景,为多项式系数问题,得到第二步:

2)转换与替代:把求解问题抽象成数学问题,需要有高中的数学背景知识。

从数学的角度递进得到,系数与组合的关系。

每个具体的数字是[Cnm],就是三者阶乘(m!/(m-n)!)/n!,到此,一种计算杨辉三角的方法诞生了:编写原子的求阶乘的函数,用单重循环实现,数学问题被替代成自然杨辉的C语言编码:数学的三者相除,被替代成三次调用此阶乘函数,c(i,j)= f(j)/f(i-j)/f(j),得到杨辉三角的每个系数,下一步,

3)类比发现隐含的相似性,杨辉三角的形状同C原子能力点下三角*输出形状相似,输出方法可以调用前面学过的知识,完成,杨辉三角的每个数据的输出方法。

* for(i=0;i

* * {for(j=0;j

* * * 输出*

* * * * 回车}

类比得到:

for(i=0;i

for (j=0;j

{c(i,j)=f(j)/f(i-j)/f(j);

输出c(i,j);

回车}

4)对求解结果,总结反馈不难发现,大数值的阶乘计算用普通的C的数据类型比较麻烦,因为,C整数存储数据的空间小,导致数据范围小,这种方法在实际应用中可能会有瑕疵,因而,需要对阶乘函数进行修改。如何修改,我们说可以从组合的定义出发得到算法,因而,又要从定义出发重新思考,对C(i,j)的进行设计;引出新的编写代码的思维。

再进一步,把调用也跟学生讲了,补充课程的新知识,此为顺势而为,学生平稳接受;5行杨辉三角的每个元素直接输出

呼应了第二步设置;本步骤阶乘的实现方法借用了数学手算的方法,对过去知识的一种回顾,更能激起学生的思维。按理至此,就可以停了,但是,我们总是希望自己的知识能更上一层楼。因而,进一步观察杨辉三角形状不难发现更多的规律,得到下一步:

5) 从数据中,发现数据的规律。

此方法中,最左列全1,对角线全1,其他元素(如2),由其正上方的元素(如1)与左上角的元素(如1)相加得到。从算法中,我们看到有多个数的相加,需要存储数据,杨辉三角又要结合新的知识二维数组,一举多得。依据获得的规律编写C代码,具体如下:非常自然得到C代码,注意其中的语法,数据定义,数据的赋值,数据的计算,数据的输出。

6)留下想象的余地给学生思考。

杨辉三角是一个有数学背景的问题,对于杨辉三角的每个数据,就是一个多项式系数问题,系数问题可以用组合方法求解,也可以系数累加,程序迭代的方法得到。讲解的过程又可以分多种具体的实现方法。

学生可思考不用二维数组做存储空间,还要利用第5步的数据关系来实现,预告C语言中函数的递归,让学生探索,预习。同时,也允许学生创造性思维得到其他的解题方法。

4 总结

本文从教学和思考两个环节谈了用思维贯穿程序设计类课程的方法,其步骤一般包括:“分析-转换-替代-细化-优化-反馈”,希望同学们能真正理解思维方式,并利用好思维。

参考文献:

[1] 李小遐.高职《C语言程序设计》课程教学方法探析[J]. 陕西国防工业职业技术学院学报,2006,16(3)

[2] 常娟,李建平.C语言程序设计多媒体教学探讨[J].山西科技,2007(2).

[3] 陈兴无.《C语言程序设计》教学中的几个疑难问题的探讨[J].恩施职业技术学院学报(综合版),2006,18(4).