APP下载

以数组为例的基于数学思维的C语言教学方法探讨

2014-10-08刘勇

教育教学论坛 2014年9期
关键词:数组C语言数学思维

摘要:数学思维在C语言教学中有着重要意义。针对C语言教学中存在的学生较难掌握数组多种访问形式的问题,应用数学思维方法,推导一维数组和二维数组访问形式的基本等价关系,并进行理论分析与实例验证相结合的教学方法的探讨,在教学实践中取得了较为理想的教学效果。

关键词:数学思维;教学方法;C语言;数组;等价关系

中图分类号:G642 文献标志码:A 文章编号:1674-9324(2014)09-0055-02

C语言是一种面向过程的计算机高级语言,与其他高级语言相比,C语言形式简洁,表达能力强,目标程序效率高,适于系统软件和应用软件的开发[1,2]。目前,许多高校的理工类专业都开设《C语言程序设计》课程,既培养了学生利用C语言编程解决问题的能力,又为今后学习其他计算机语言打下了良好的基础[3]。

C语言教学中语法知识的讲授对学生扎实掌握C语言起着决定性作用。目前C语言教学中主要采用基于案例或程序的多媒体辅助教学方法[4]、任务驱动教学法和项目教学法等[5,6],但对一些难点知识如果只采用案例、程序、任务或项目教学方法,不进行深入的理论分析,学生往往就会感觉知识内容太突兀,难于理解与掌握,从而失去学习的兴趣。

目前在多数C语言教材中普遍存在对数组多种访问形式的表述不够深入的问题,特别是对于二维数组的多种访问形式,因此在教学中往往存在教师难以讲透彻,学生较难掌握该知识点的问题。本文应用数学思维,对该知识点进行理论分析研究,推导出了一维数组和二维数组访问形式的基本等价关系,并采用理论分析与实例验证相结合的教学方法,在教学实践中取得了较为理想的教学效果。

一、数学思维在C语言教学中的重要性

数学思维是人脑在和数学对象交互作用的过程中,运用特殊的数学符号语言以抽象和概括为特点,对客观事物按照数学自身的形式或规律做出的间接概括的反映[7]。在C语言的语法中,处处闪烁着数学思维的火花,比如基本数据类型中常量到变量的知识与数学中常数到代数的思想一致;运算符继承和发展了数学中的运算符;表达式与数学中的多项式类似;选择结构与数学中的分段函数类似;循环结构与数学中的多项式求和、求积等计算类似;数组与数学中的矩阵类似;函数与数学中的函数类似;等等。因此可以认为C语言是数学语言的另外一种表现形式,充分借鉴数学思维进行C语言学习,是一种高效的学习方法。

在C语言教学中,强调C语言语法概念及语法形式,同时强调其与数学语言的联系,并借鉴数学思维,能很好地激发学生自主利用数学思维进行C语言学习的兴趣,使其对C语言学习充满自信,产生触类旁通的感觉。当然,C语言毕竟不等同于数学语言,其虽与数学语言有很大程度上的相似,但也存在显著的不同,比如运算符“/”在C语言中有两种用法,而在数学中只有一种用法;C语言中有求余(模)运算符“%”,而数学语言中却没有等。因此,在C语言学习中,既要借鉴数学思维来进行学习,又要辨清C语言与数学语言的不同,这是C语言学习中需要掌握的学习原则和方法。

二、数组多种访问形式的等价关系

1.一维数组多种访问形式的等价关系。

设一维数组a,整型指针变量p满足以下定义:

int a[5]={1,2,3,4,5};

int *p=a;

(1)C语言中定义a的值为一维数组a的首个元素的地址,则存在以下等价关系:

p <=> a <=> &a[0]

(2)根据C语言中指针运算法则,可得:

p+i <=> a+i <=> &a[i] <=> &p[i]

(3)对(2)中各项进行取内容运算,可得:

*( p+i ) <=> *( a+i ) <=> a[i] <=> p[i]

2.二维数组多种访问形式的等价关系。

设二维数组a,指向数组的整型指针变量p和整型指针变量q满足以下定义:

int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

int (*p)[4]=a;

int *q=a;

(1)由C语言中定义a的值为二维数组a首行的地址,则存在以下等价关系:

p <=> a <=> &a[0]

(2)根据C语言中定义的指向数组指针的运算法则,可得:

p+i <=> a+i <=> &a[i] <=> &p[i]

(3)对(2)中各项进行取内容运算,可得:

*( p+i ) <=> *( a+i ) <=> a[i] <=> p[i]

(4)C语言中定义ai]的值为二维数组a的第i行第0列元素的地址,则存在以下等价关系:

a[i] <=> &a[i][0]

(5)对(3)中各项再进行取内容运算,结合(4)中等价关系,可得:

**( p+i ) <=> **( a+i ) <=> *[a] <=> *p[i] <=> a[i][0]

(6)根据C语言中定义二维数组元素的访问方法,可得:

*( *( p+i ) +j )<=> *( *( a+i ) +j ) <=> a[i][j] <=> p[i][j]

(7)对于整型指针q,根据指针运算法则及取内容运算符的运算法则,可得以下3种等价关系:

q+4*i<=> a[i] <=> &a[i][0]

*( q+4*i ) <=> *a[i] <=> a[i][0]

*( q+4*i +j )<=> a[i][j]

根据以上一维数组、二维数组访问形式的等价关系,可以总结为:(1)一维数组访问形式存在3种等价关系;(2)二维数组访问形式也存在6种等价关系,前3种等价关系与一维数组形式相同,但含义不同,在教学中要引起重视。

三、数组多种访问形式的教学方法

在具体数组多种访问形式教学时,基于数学思维,采用先理论分析,后实例验证的方法。具体验证环境为windows XP操作系统,编译器采用Visual C++ 6.0。

1.一维数组多种访问形式的教学方法。先推导一维数组多种访问形式等价关系,再给出如下验证实例程序:

#include

void main( )

{

int a[5]={1,2,3,4,5};

int *p=a;

printf(“%X,%X,%X\n”,p,a,&a[0]);/*见2.1中1)*/

printf(“%X,%X,%X,%X\n”,p+1,a+1,&a[1],&p[1]);/*见2.1中2)*/

printf(“%d,%d,%d,%d\n”,*(p+1),*(a+1),a[1],p[1]);/*见2.1中3)*/

}

编译连接后,运行结果为:

12FF6C,12FF6C,12FF6C

12FF70,12FF70,12FF70,12FF70

2,2,2,2

结果验证:根据实验结果各行相等,可验证一维数组的3种等价关系成立。

2.二维数组多种访问形式的教学方法。先推导二维数组多种访问形式等价关系,再给出如下验证实例程序:

#include

void main( )

{

int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

int (*p)[4]=a;;

int *q=a;

printf("%X,%X,%X\n",p,a,&a[0]);/*见2.2中1)*/

printf("%X,%X,%X,%X\n",p+1,a+1,&a[1],&p[1]);/*见2.2中2)*/

printf("%X,%X,%X,%X\n",*(p+1),*(a+1),a[1],p[1]);/*见2.2中3)*/

printf("%d,%d,%d,%d,%d\n",**(p+1),**(a+1),*a[1],*p[1],a[1][0]);/*见2.2中4)*/

printf("%d,%d,%d,%d\n",*(*(p+1)+2),*(*(a+1)+2),a[1][2],p[1][2]);/*见2.2中5)*/

printf("%X,%X\n",a+1,&a[1][0]);/*见2.2中6)*/

printf("%X,%X,%X\n",q+4*1,a1],&a[1][0]);/*见2.2中7)*/

printf("%d,%d,%d\n",*(q+4*1),*a[1],a[1][0]);/*见2.2中8)*/

printf("%d,%d\n",*(q+4*1+2),a[1][2]);/*见2.2中9)*/

}

编译连接后,运行结果为:

12FF50,12FF50,12FF50

12FF60,12FF60,12FF60,12FF60

12FF60,12FF60,12FF60,12FF60

5,5,5,5,5

7,7,7,7

12FF60,12FF60

12FF60,12FF60,12FF60

5,5,5

7,7

结果验证:根据实验结果各行相等,可验证二维数组的9种等价关系成立。

四、结论与认识

C语言主体内容及其严密的逻辑性与数学语言有天然的一致性,数学思维贯穿C语言学习的始终。在数组多种访问形式知识点的教学中,采用理论分析与实例验证相结合的教学方法,既突出了数学思维在C语言教学中的重要性,又符合学生在学习新知识时类比学习方法最为有效的客观认知规律,从而在教学实践中取得了较为理想的教学效果。

参考文献:

[1]谭浩强.C程序设计[M].北京:清华大学出版社,2002:13.

[2]贾宗璞,许合利.C语言程序设计[M].北京:人民邮电出版社,2010:10.

[3]周汝雁,韩彦岭,张明华,等.程序设计语言中较难理解算法的课堂教学方法[J].计算机教育,2013,(6):91-94.

[4]王光琼,袁小艳,梁弼.C程序设计课程教学方法探讨[J].四川文理学院学报,2010,(2):108-111.

[5]张季良.任务驱动教学法在独立学院计算机教学中的应用[J].计算机教育,2007,(5):46-48.

[6]张学林,陈齐超,段珊,等.项目教学法在“C语言课程设计”中的研究与应用[J].实验技术与管理,2011,(2):164-167.

[7]王宪昌.数学思维方法[M].北京:人民教育出版社,2010:4.

基金项目:国家“十二五”科技重大专项课题“全国重点煤矿区瓦斯(煤层气)赋存规律和控制因素”(2011ZX05040-005)。

作者简介:刘勇,男,讲师,研究方向为瓦斯理论与信息化研究。

猜你喜欢

数组C语言数学思维
JAVA稀疏矩阵算法
基于Visual Studio Code的C语言程序设计实践教学探索
JAVA玩转数学之二维数组排序
基于C语言的计算机软件编程
Excel数组公式在林业多条件求和中的应用
高职高专院校C语言程序设计教学改革探索
高等数学的教学反思
寻找勾股数组的历程
论子函数在C语言数据格式输出中的应用