崔 杰
谈C程序设计对大学生科学思维的培养
崔 杰
(辽宁工业大学 电子与信息工程学院,辽宁 锦州 121001)
科学思维是大学生必备的科学素质,将科学思维的培养纳入大学课堂势在必行。本文提出将科学思维引入C程序设计教学,将多种科学思维方法在C程序设计教学中加以运用。与传统的教学模式相比,融入科学思维的教学模式对提高学生的科学素质起到了非常重要的作用,同时也培养了学生综合分析问题和解决问题的能力,对C程序设计的学习也起到了很大的促进作用。
C程序设计;科学思维;思维方法
科学思维是科学工作者重要的科学品质,培养具有科学思维的综合性素质人才是大学的任务。在大学阶段要把学生的人文素质发展和科学素质发展作为学生综合素质评定实施的重要内容,引导大学生有意识地促进两方面素质的发展。C语言程序设计课程包含很多的科学思维方法,教师在讲授C程序设计时,要自觉地将人文精神和科学精神的培养贯穿于程序设计课程的始终,充分发掘程序设计课程对人才综合素质养成的潜移默化的作用,真正做到教书育人。
思维是人脑对客观事物的间接的概括反映,是揭示事物的本质特征及内部规律的认识活动。科学思维教育的目的是提高学生基本的科学素质,这是学生素质的一个重要组成部分。因此,推行素质教育必须注重学生科学思维的训练。从某种意义上讲,人类的每一种能力、每一个进步,都与自己的思维能力息息相关。研究表明:古今中外在各个领域做出重大贡献的杰出人物,他们所共同具有的是卓越出众的思维能力。由于思维的重要性,国外从20世纪30年代开始对思维教育进行研究。很多国际公司为了开发职工的创造潜力,提高企业的竞争力,在职工中进行科学思维教育和训练,企业对职工进行关于创新思维方法的培训。在我国,对思维的研究有较长的历史,孔子说过:“学而不思则罔,思而不学则殆”,由此指明了学习与思维的关系。随着信息时代的到来,知识更新的加快,社会竞争日趋激烈,科学思维教育越来越引起人们的重视。这是因为,将来一个人在社会竞争中是否成功,关键看他是否具有灵活的头脑、敏锐的思维和创新能力,能否捕捉机会、组合机会和创造机会。因此,科学思维教育已成为科学教育的重要方面,科学思维的训练也应成为素质教育的一个重要内容。
科学思维包括很多思维方法,正确地运用科学思维方法,对今后的学习、工作以至于生活都有很大的益处。笔者根据多年的实践,在自己讲授的C程序设计课程中贯穿科学思维方法,包括系统思维、逆向思维、归纳思维、创新思维等,根据具体的问题来引出具体思维方法。这样既可以加深对哲学的理解,又可以对所学的知识有一个质的提升[1]。
系统思维是人类最重要的思维方式。它要求看待事物要从全局而非局部出发,从系统整体来思考,找到整体与部分之间的辩证关系。系统思维要把握事态发展的动态性,要用发展的眼光看待事物。在C程序设计中的需求分析要求对软件的各个环节进行全局考虑,解决之间出现的诸多问题,包括硬件与软件的问题,开发商与用户的问题,软件模块之间的问题等,在问题协调中找到解决的方法。需求分析也不是不变的,随着时间、软硬件环境的变化,需求也会发生变化,对需求需要重新审视。在需求分析的过程中,要按照需求分析的五个阶段:需求分析,获取需求;建立概念模型;产生需求说明书;分析需求的正确性;跟踪管理需求。在整个需求分析过程中体现了科学的系统思维方法。
归纳思维是从多个个体之中找到其中的规律加以归纳总结,得到一个一般性的概括性的规则。这种方法主要是将收集到的已有资料加以“抽丝剥茧”地分析,最后得以做出一个概括性的结论。在结构化程序设计中,循环结构比较难理解,在循环中引入归纳思维的方法,可以达到事半功倍的效果。冒泡法排序算法在程序设计中历来是很难理解的算法,采取归纳的方法,可以使学生对问题的理解达到水到渠成的效果。
归纳思维在排序算法中的应用[1]。问题:将5个整数按照从小到大排序,部分源代码如下:
#include
main()
{int a[5],i;
for(i=0;i<5;i++)
scanf(“%d”,&a[i]);
/*具体排序过程*/
…
for(i=0;i<5;i++)
printf(“%6d”,a[i]);
}
冒泡排序(Bubble Sort)的基本思想是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此,第一趟排序结束,将最大的数放到了最后。
原始数据:971264
第一趟比较结果:796412
代码实现:
for(j=0;j<4;j++)
if(a[j]>a[j+1]) {t=a[j];a[j]=a[j+1];a[j+1]=t;}
经过第一趟的比较后,不难看出最大的数已经排在了最后一个位置,那么利用同样的方法再进行第二趟比较,就会将第二大的数排在倒数第二位置。依次类推,只要同样的方法进行4趟比较,所有的数据就都可以排出来。
第二趟比较结果764912
第三趟比较结果647912
第四趟比较结果467912
也就是让第一趟的代码执行4遍,那么归纳出程序段如下:
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(a[j]>a[j+1]) {t=a[j];a[j]=a[j+1];a[j+1]=t;}
实际上这个算法就已经能够将5个数按照从小到大排序,但在讲解排序过程中,有部分学生就已经发现一个问题,就是每一趟的比较不需要比较到最后,而是随着比较趟数的增多,比较次数可以逐渐减少。因为经过每趟比较后出来的最大数,下趟比较时就不需要处理了,这样就可以提高程序的效率。因此,就提出对上面的程序进行改进:
for(i=0;i<4;i++)
for(j=0;j<4-i;j++) /*随着比较趟数的增加比较次数逐渐减少*/
if(a[j]>a[j+1]) {t=a[j];a[j]=a[j+1];a[j+1]=t;}
冒泡排序算法到此结束,同时引出其他的排序算法。在教师的引导下,只给出排序的思想,让学生利用分步再归纳的方法自己编写其他的算法,如选择法。每个班级都会有大部分的同学将排序算法编写出来,学生感觉收获很大,同时也体会了归纳思维方法在程序设计中产生的效果。
逆向思维是一种重要的思考方式,也称反向思维。一般思考问题都是从正面出发,对于特殊的问题如果能从问题的对立面出发,找到解决问题的方法,也可以达到意想不到的效果[2]。现实生活中有很多无法解决的问题,敢于“反其道而思之”,从结论往回推,倒过来思考,从求解回到已知条件,反过去想或许会使问题简单化。其实,对于一些特殊问题,运用逆向思维去思考和处理问题,实际上就是以“出奇”去达到“制胜”。C语言的学习对于大学一年级的学生来说有一定难度,尤其在初期入门阶段,数据类型的学习就存在很大的问题,难理解、枯燥、记不住,从此对C语言的学习就失去了兴趣。因此,可以用逆向思维的方法来解决该问题,学生对数据类型就自然而然地掌握了。为了解决困扰很多学生的数据类型问题,在C程序设计教学中采用了一个实例:
#include
main()
{int a=32767,b; /*a、b是两个变量,用来存储数据*/
b=a+1;
printf(“%d”,b);
}
这是一道C语言中最简单的一道题,学生预计的结果应该是32768,而实际运行后的结果却是-32768。这让每个学生都感到很诧异,功能如此强大的电脑,为什么这么简单的问题都不能正确计算呢?据此,教师直接提出了一个数据存储的问题。在计算机文化课程中曾讲解过内存、原码、反码和补码的问题,在C程序设计中会使这些知识得以真正地理解。计算机中存取数据的基本单位为字节,每个字节存储8个二进制位,对于有符号的数来说,第一位是符号位,0代表正数,1代表负数。让学生计算一下,1个字节能存放的有符号数据最大是多少呢?回答的结果是127。接下来计算2个字节能表示的最大一个正数是多少呢?回答是32767。通过前面的计算学生已经深刻记忆两个字节只能表示32767,再大就表示不了了。32767+1导致第一位变成了1,则正数变成了负数。此时教师就提出一个问题,a、b两个变量在内存中分配了两个字节,分配几个字节是谁确定的呢?学生表示疑惑,于是教师将问题解释:a、b变量分配两个字节就是由它前面的关键字int决定的,int类型的变量,TC环境下操作系统为该类型变量分配两个字节的存储空间。于是对于上面的程序结果就明白了为什么。然后,学生马上就提出问题,为什么这样计算不将变量分配更多的字节?用哪个关键字来表示呢?于是,教师将刚才调试的程序,将变量的类型进行了修改,将int改为long int,输出格式也同步修改成%ld,则程序结果正确。学生终于明白:原来变量在内存中分配字节数是可以编程者自己决定的。于是就想到直接申请更大的空间,通常的数据都能存下。那么,用什么关键字可以申请更大的空间呢?教师讲解数据类型的种类,每种类型的变量在内存中分配的字节数,最后让学生自己来选择,学生说那就选择double类型,分配8个字节,通常的计算就都没有问题,不会超过范围。教师又提出了另一个问题,这样是不是太浪费内存了?而且double类型是用来存储实形数据的,存储整形数据会不会存在误差?
#include
main()
{long int a=32767,b;
b=a+1;
printf(“%ld”,b);
}
最后,教师总结数据类型相关的知识。学生理解了数据类型,知道数据类型的具体使用,但对于数据类型多记不住的问题又如何解决呢,教师明确告诉学生不需要记忆,用时查表就可以了,随着数据类型的不断使用,记住数据类型就不是问题了。实践证明,这种逆向思维讲解数据类型效果非常显著,不但使学生对内存产生了极大的兴趣,也为程序设计打下了坚实的基础。只要逆向思维在教学中运用得当,势必产生意想不到的效果。
创新是人的一种潜能,每名教师都要爱护和培养学生的好奇心,保护学生的探索精神、创新思维,坚信每个学生都能成才,每个学生都能创新[3]。在教学之初就引导学生关注程序设计课程在所学专业领域的应用,鼓励学生从网上或图书馆查阅相关资料,了解程序设计在所学专业的应用,提高学生对学习程序设计的兴趣。
同时,每年举办一届全校范围内的程序设计大赛,鼓励学生参加省、国家级比赛,因为竞赛是培养全面优秀人才的一项重要的活动。程序设计大赛对创新思维能力的培养起到了很大的推动作用,它对参赛学生的逻辑分析、策略制定和创新思维等方面具有极大的挑战性。
通过C程序设计课程对大学生科学思维方法的培养,使学生对知识的掌握由点到面,由量变到质变,实现学生综合素质的提升,达到对学生科学素质和人文素质的综合培养。应用科学思维方法可以与传统的教学方法互相补充,启示人们以不同的视角看同一个问题,这样会更全面地了解事物,同时也可以启发教师在教学过程中恰当地运用一些科学思维方法,可以达到事半功倍的效果。
[1] 谭浩强,张基温. C语言程序设计[M]. 北京: 高等教育出版社, 2006: 12.
[2] 栗亚荣, 刘宇伟. 程序设计中的科学思维方法[J]. 教学与管理, 2002(4): 76.
[3] 张国华. 系统思维在培养计算机类学生创新能力中的作用[J]. 福建电脑, 2019, 35(1): 54-55.
10.15916/j.issn1674-327x.2022.03.033
G642.0
B
1674-327X (2022)03-0131-03
2021-01-15
辽宁工业大学教学改革研究项目(2018081)
崔杰(1972-),女,辽宁海城人,副教授。
(责任编辑:付春玲)