基于循环不变式的循环结构教学研究

2023-04-14 03:29曹文平谷琼宁彬
电脑知识与技术 2023年6期
关键词:逻辑思维计算思维程序设计

曹文平 谷琼 宁彬

摘要:以梳理程序设计基础课程教学存在的问题为出发点,围绕循环结构教学内容,分析了逻辑思维和计算思维能力培养的必要性。文章从计算思维、逻辑思维、信息与数据的关系等方面剖析了循环结构教学内容的教学要点,设计了以循环不变式为基础的循环结构教学过程及其训练方法,经实践证明可有效地培养学生的逻辑思维和计算思维能力。

关键词:循环不变式;循环结构;计算思维;逻辑思维;程序设计

中图分类号:G642        文献标识码:A

文章编号:1009-3044(2023)06-0121-02

开放科学(资源服务)标识码(OSID)

循环结构是程序设计基础课程教学内容的重点和难点之一。学生在该课程学习过程中不能独立识别并解决基本循环问题,这与我们的课程教学方法或策略存在一定的关系。常规教学方法侧重于循环结构流程的讲解,忽略了程序设计中关于逻辑思维和计算思维的能力培养,导致学生对循环结构的理解存在偏差,不能从本质上分析基本循环问题,从而形成了课堂听懂、课后模糊不清的现象。针对这种教学现象很多研究提出了相关的解决方法,其中计算思维成为程序设计课程教学研究的热点。参考文献[1-2]提出了以計算思维为导向的案例式教学方法;参考文献[3]探讨了以应用需求为导向的程序设计课程的教学改革方法和步骤;参考文献[4]提出了线上线下一体化平台的混合教学模式;参考文献[5]提出了对比教学法在程序设计课程中的应用实践研究。本文基于循环不变式的思想,提出轻语法、重逻辑,并与计算思维相结合的教学过程,培养或训练学生的逻辑思维和计算思维能力。此外,辅助所设计的循环结构编程方法,引导学生依据步骤完成循环结构程序设计,同步自证循环结构的正确性,帮助学生识别并改正错误,从而增强学生学习程序设计的自信和兴趣。

1 循环不变式

循环不变式是从数学衍生而来的计算思维方法,本质上是一种数学思想。其核心部分是根据问题描述构造一系列的表达式或变量依赖关系,由这些表达式或依赖关系构成动态循环过程中的不可变约束,最后形成循环不变式的主体,这是问题的抽象数学表示方式。在循环的过程中保持这些约束,就能保证循环的正确。下面给出相关的定义。

定义1 循环变量:在循环过程中其值发生变化的量。所有循环变量构成循环变量集合,记为X={xi|xi为循环变量,i=1,2,... }。如果变量值在整个程序生命周期中保持不变,则将其视为常量。

定义2 运行环境:循环运行过程中循环变量的取值集合。

定义3 约束:循环变量之间的一个依赖关系称为一个约束。表现形式可以是语义关系、表达式,是描述循环变量取值变化的依赖关系,记为a->b,其中a∈X且b∈X。如果a->b,则a值的改变会引起b值的改变。所有的约束构成约束集合,记为S={ai->bi| ai->bi }。这是循环变量之间的依赖关系。

定义4 循环控制变量:决定循环是否终止的循环变量。循环执行的过程即是循环控制变量从初始值到结束值的变化过程。

定义5 循环边界:循环过程开始执行及结束执行时对应的循环控制变量的取值。

循环结构的设计过程如下:

1)确定循环变量集合X:将循环过程中变化的所有变量全部纳入该集合X,这是整个设计过程的基础;

2)确定约束集合S:根据逻辑关系确定循环变量之间的依赖关系,是设计循环体的关键;

3)确定循环边界;

4)根据约束集合完成循环体的设计。

循环执行结束后需要验证循环结果的正确性,这里设计了三个步骤实现关于循环结果的验证目的。

1)初次进入循环前,运行环境正确;

2)每次进入循环前,运行环境正确;

3)循环结束时,得到需要的结果。

这里运行环境正确是指在特定时刻,所有循环变量的取值均符合约束集合,即运行环境符合约束集合S。验证的三个步骤对应循环控制结构的三个部分:初始化、循环体和循环控制条件。如果验证了这三个步骤的正确性,则可以确保循环控制结构的正确性,如图1所示。

2 教学方案重构

基于循环不变式的教学方案是以计算思维和逻辑思维作为基础,重构传统的以语法和案例为主的教学方式。教学方案的重构围绕这两个思维方式,是以轻语法、重逻辑为出发点,提升学生的抽象思维能力为重点,设计正确的循环结构为目的,采用讲练同步进行的教学方法,帮助学生从本质上掌握循环结构设计的内涵和应用。其重构内容包括信息的表示和逻辑思维的训练两个方面。

2.1 信息表示的训练

信息是逻辑思维的前提和基础。从人类的思维角度看,描述待解决的问题属于信息范畴,而计算机加工或处理的对象是数据。计算机辅助人类解决问题的能力,依赖于从信息到数据的转化程度,即在计算思维范畴用数据代替信息。我们设计的教学方案从两个方面训练或提升学生的计算思维能力。一方面,从信息到数据的转换训练,体现为编程过程中的变量定义,包括变量的含义和具体值。例如变量a表示灯的颜色,整数1或字符x表示红色均可。这需要根据数据所赋予的信息,结合算法确定变量的数据类型及其取值。另一方面,归纳表达式所表示的信息。假设变量a表示整数,那么表达式a%2==1表示的信息“a是奇数”。

2.2 逻辑思维的训练

根据信息的表示进行正确的逻辑推理,这是训练逻辑思维能力的主要方法。例如计算a=b+c,变量a的取值随着程序的执行而变化,其正确性依赖于程序逻辑的正确性。程序的正确逻辑是:程序执行前,变量a、b和c具有独立的存储空间,b和c存放待求和的两个值,a待存放这两个数的和;程序执行结束后a的取值是两个数的和,b和c的取值保持不变。由程序逻辑的正确性,可推理变量取值执行前后的变化,经对比或梳理可进一步验证程序执行结果的逻辑正确性。在程序设计教学中即可正向讲解程序执行过程中每一步的逻辑,也可通过逻辑推理反向推进程序设计,达成训练学生逻辑思维能力的目的。

这是基于循环不变式面向循环控制结构的教学设计。由于循环体是不变的,其执行逻辑也不变,即每次循环执行前各个变量的信息表示一致。其设计的关键点在于确定循环执行前的循环变量集合及约束集合。

3 教学案例设计

3.1 冒泡法案例设计

冒泡法是对n个元素的整型数组升序排序的典型应用(为方便描述,采用从后向前的冒泡方式)。

步骤1:根据算法确定循环体的基本操作。第i次循环将第i小的元素放在i位置,使得0到i的元素有序;

步骤2:确定循环变量集合。i表示元素位置(或循环次数)、整型数组;

步骤3:确定循环开始前的约束集合。只有i和整型数组之间的约束关系,即从0到i的元素已是升序排列;

步骤4:确定循环边界。i是循环控制变量,边界为n-1,即算法结束时0到n-1升序排列;

步骤5:设计循环结构。

1)初始化。第一次循环前,其约束为0到0的元素有序,即i=0;

2)循環体设计。每次执行循环体前,0到i的元素有序排列。所以循环体通过冒泡算法确定i+1位置的元素,伪代码如下:

i++;

n-1到i冒泡;

当进入下一次循环结束前,保证了约束的一致性,即0到i的元素有序;

3)循环条件的设计。循环结束时应得到有序的元素序列,即0到n-1的元素有序。因此循环结束时i的值为n-1,条件即是i

i=0;

while(i

i++;

n-1到i冒泡;

}

3.2 约瑟夫环案例设计

约瑟夫环问题:n个按序编号的小孩围成一圈,从1到m报数,数到m的小孩出列,下一个小孩从1继续开始报数,以此类推,求小孩的出列顺序。

步骤1:确定信息表示。结果用数组记录出列顺序,数组下标对应小孩编号,数组值为0表示没有出列;

步骤2:确定循环体的基本操作为处理一个小孩的报数(不管该小孩是否出列);

步骤3:确定循环变量集合。数组a用来记录结果,i表示将要处理的小孩,j表示将要报的数,k表示将要出列的顺序号(从1开始);

步骤4:确定循环前的依赖集合。如果a[i]的值不是0,则本次循环结束;如果j的值是m,则a[i]的值赋k;

步骤5:确定循环边界。循环结束时将要出列的顺序号应该为n+1;

步骤6:设计循环体。

1)初始化。根据循环变量含义,首次循环之前数组元素的值应为0,i=0,j=1,k=1;

2)循环体设计。每次循环前的循环变量的含义及约束不变,因此在循环体内改变各个循环变量逻辑的伪代码如下:

If(a[i]==0){ //小孩没出列

If(j==m){ //报数为m

a[i]=k; //小孩出列

k++;j=1;  //修改k,j的值,为下次循环做准备

} }

i++; if(i==n-1)i=0;  //准备处理下一个小孩

3)循环条件设计。循环结束时所有小孩都出列了,此时k等于n+1,即while(k<=n)。

需要强调的是,由于变量的含义是随着其值的变化而变化,所以约束集合应该在进入循环之前确定。对照步骤5,即可验证循环结构的正确性。实际设计中的信息表示存在多种方式,如i可以表示为0到i-1的元素有序,这需要根据具体的信息进行逻辑推理而定,也是提升学生计算思维和逻辑思维能力的一种途径。

4 实践效果及结论

近三年的教学实践表明,基于循环不变式的教学方法对学生理解循环程序设计的本质,提高循环程序设计能力乃至程序设计基础的课程成绩均有比较好的效果。学生对循环控制结构的正确理解和应用已不成问题,程序设计基础课程的平均成绩由70分以下提高到80分以上,不及格人数大幅减少,明显地提升了学生学习程序设计的自信力和兴趣。由此可见,循环不变式的教学方法重构了传统的重语法轻逻辑的教学方式,从程序的内在逻辑入手,融合学生计算思维和逻辑思维能力的培养和训练,实际教学效果明显,具有推广和应用前景。

参考文献:

[1] 刘鑫,王忠,范青刚,等.智能时代程序设计基础课程改革实践探索[J].计算机教育,2022(6):194-199.

[2] 姜懿烊.以计算思维为导向的中职C程序设计教学模式研究[D].长春:长春师范大学,2021.

[3] 李运发.以应用需求为导向的程序设计课程教学改革[J].软件导刊,2021,20(12):221-225.

[4] 杨卫明.大数据智能化背景下程序设计课程线上线下混合教学模式构建[J].计算机时代,2021(5):84-87.

[5] 易锋,马慧,何怀文,等.对比教学法在程序设计基础课程中的应用实践研究[J].电脑知识与技术,2022,18(20):155-157.

【通联编辑:王力】

猜你喜欢
逻辑思维计算思维程序设计
基于Visual Studio Code的C语言程序设计实践教学探索
从细节入手,谈PLC程序设计技巧
高职高专院校C语言程序设计教学改革探索
浅析例题法在高中物理学习中的应用
通过认知规律进行逻辑思维训练刍议
浅析高中数学解题方法和技巧
程序设计课程中计算思维和应用能力培养问题研究
PLC梯形图程序设计技巧及应用