曹文平 谷瓊 寧彬
摘要:以梳理程序設(shè)計基礎(chǔ)課程教學(xué)存在的問題為出發(fā)點,圍繞循環(huán)結(jié)構(gòu)教學(xué)內(nèi)容,分析了邏輯思維和計算思維能力培養(yǎng)的必要性。文章從計算思維、邏輯思維、信息與數(shù)據(jù)的關(guān)系等方面剖析了循環(huán)結(jié)構(gòu)教學(xué)內(nèi)容的教學(xué)要點,設(shè)計了以循環(huán)不變式為基礎(chǔ)的循環(huán)結(jié)構(gòu)教學(xué)過程及其訓(xùn)練方法,經(jīng)實踐證明可有效地培養(yǎng)學(xué)生的邏輯思維和計算思維能力。
關(guān)鍵詞:循環(huán)不變式;循環(huán)結(jié)構(gòu);計算思維;邏輯思維;程序設(shè)計
中圖分類號:G642? ? ? ? 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2023)06-0121-02
開放科學(xué)(資源服務(wù))標(biāo)識碼(OSID)
循環(huán)結(jié)構(gòu)是程序設(shè)計基礎(chǔ)課程教學(xué)內(nèi)容的重點和難點之一。學(xué)生在該課程學(xué)習(xí)過程中不能獨立識別并解決基本循環(huán)問題,這與我們的課程教學(xué)方法或策略存在一定的關(guān)系。常規(guī)教學(xué)方法側(cè)重于循環(huán)結(jié)構(gòu)流程的講解,忽略了程序設(shè)計中關(guān)于邏輯思維和計算思維的能力培養(yǎng),導(dǎo)致學(xué)生對循環(huán)結(jié)構(gòu)的理解存在偏差,不能從本質(zhì)上分析基本循環(huán)問題,從而形成了課堂聽懂、課后模糊不清的現(xiàn)象。針對這種教學(xué)現(xiàn)象很多研究提出了相關(guān)的解決方法,其中計算思維成為程序設(shè)計課程教學(xué)研究的熱點。參考文獻(xiàn)[1-2]提出了以計算思維為導(dǎo)向的案例式教學(xué)方法;參考文獻(xiàn)[3]探討了以應(yīng)用需求為導(dǎo)向的程序設(shè)計課程的教學(xué)改革方法和步驟;參考文獻(xiàn)[4]提出了線上線下一體化平臺的混合教學(xué)模式;參考文獻(xiàn)[5]提出了對比教學(xué)法在程序設(shè)計課程中的應(yīng)用實踐研究。本文基于循環(huán)不變式的思想,提出輕語法、重邏輯,并與計算思維相結(jié)合的教學(xué)過程,培養(yǎng)或訓(xùn)練學(xué)生的邏輯思維和計算思維能力。此外,輔助所設(shè)計的循環(huán)結(jié)構(gòu)編程方法,引導(dǎo)學(xué)生依據(jù)步驟完成循環(huán)結(jié)構(gòu)程序設(shè)計,同步自證循環(huán)結(jié)構(gòu)的正確性,幫助學(xué)生識別并改正錯誤,從而增強(qiáng)學(xué)生學(xué)習(xí)程序設(shè)計的自信和興趣。
1 循環(huán)不變式
循環(huán)不變式是從數(shù)學(xué)衍生而來的計算思維方法,本質(zhì)上是一種數(shù)學(xué)思想。其核心部分是根據(jù)問題描述構(gòu)造一系列的表達(dá)式或變量依賴關(guān)系,由這些表達(dá)式或依賴關(guān)系構(gòu)成動態(tài)循環(huán)過程中的不可變約束,最后形成循環(huán)不變式的主體,這是問題的抽象數(shù)學(xué)表示方式。在循環(huán)的過程中保持這些約束,就能保證循環(huán)的正確。下面給出相關(guān)的定義。
定義1 循環(huán)變量:在循環(huán)過程中其值發(fā)生變化的量。所有循環(huán)變量構(gòu)成循環(huán)變量集合,記為X={xi|xi為循環(huán)變量,i=1,2,... }。如果變量值在整個程序生命周期中保持不變,則將其視為常量。
定義2 運(yùn)行環(huán)境:循環(huán)運(yùn)行過程中循環(huán)變量的取值集合。
定義3 約束:循環(huán)變量之間的一個依賴關(guān)系稱為一個約束。表現(xiàn)形式可以是語義關(guān)系、表達(dá)式,是描述循環(huán)變量取值變化的依賴關(guān)系,記為a->b,其中a∈X且b∈X。如果a->b,則a值的改變會引起b值的改變。所有的約束構(gòu)成約束集合,記為S={ai->bi| ai->bi }。這是循環(huán)變量之間的依賴關(guān)系。
定義4 循環(huán)控制變量:決定循環(huán)是否終止的循環(huán)變量。循環(huán)執(zhí)行的過程即是循環(huán)控制變量從初始值到結(jié)束值的變化過程。
定義5 循環(huán)邊界:循環(huán)過程開始執(zhí)行及結(jié)束執(zhí)行時對應(yīng)的循環(huán)控制變量的取值。
循環(huán)結(jié)構(gòu)的設(shè)計過程如下:
1)確定循環(huán)變量集合X:將循環(huán)過程中變化的所有變量全部納入該集合X,這是整個設(shè)計過程的基礎(chǔ);
2)確定約束集合S:根據(jù)邏輯關(guān)系確定循環(huán)變量之間的依賴關(guān)系,是設(shè)計循環(huán)體的關(guān)鍵;
3)確定循環(huán)邊界;
4)根據(jù)約束集合完成循環(huán)體的設(shè)計。
循環(huán)執(zhí)行結(jié)束后需要驗證循環(huán)結(jié)果的正確性,這里設(shè)計了三個步驟實現(xiàn)關(guān)于循環(huán)結(jié)果的驗證目的。
1)初次進(jìn)入循環(huán)前,運(yùn)行環(huán)境正確;
2)每次進(jìn)入循環(huán)前,運(yùn)行環(huán)境正確;
3)循環(huán)結(jié)束時,得到需要的結(jié)果。
這里運(yùn)行環(huán)境正確是指在特定時刻,所有循環(huán)變量的取值均符合約束集合,即運(yùn)行環(huán)境符合約束集合S。驗證的三個步驟對應(yīng)循環(huán)控制結(jié)構(gòu)的三個部分:初始化、循環(huán)體和循環(huán)控制條件。如果驗證了這三個步驟的正確性,則可以確保循環(huán)控制結(jié)構(gòu)的正確性,如圖1所示。
2 教學(xué)方案重構(gòu)
基于循環(huán)不變式的教學(xué)方案是以計算思維和邏輯思維作為基礎(chǔ),重構(gòu)傳統(tǒng)的以語法和案例為主的教學(xué)方式。教學(xué)方案的重構(gòu)圍繞這兩個思維方式,是以輕語法、重邏輯為出發(fā)點,提升學(xué)生的抽象思維能力為重點,設(shè)計正確的循環(huán)結(jié)構(gòu)為目的,采用講練同步進(jìn)行的教學(xué)方法,幫助學(xué)生從本質(zhì)上掌握循環(huán)結(jié)構(gòu)設(shè)計的內(nèi)涵和應(yīng)用。其重構(gòu)內(nèi)容包括信息的表示和邏輯思維的訓(xùn)練兩個方面。
2.1 信息表示的訓(xùn)練
信息是邏輯思維的前提和基礎(chǔ)。從人類的思維角度看,描述待解決的問題屬于信息范疇,而計算機(jī)加工或處理的對象是數(shù)據(jù)。計算機(jī)輔助人類解決問題的能力,依賴于從信息到數(shù)據(jù)的轉(zhuǎn)化程度,即在計算思維范疇用數(shù)據(jù)代替信息。我們設(shè)計的教學(xué)方案從兩個方面訓(xùn)練或提升學(xué)生的計算思維能力。一方面,從信息到數(shù)據(jù)的轉(zhuǎn)換訓(xùn)練,體現(xiàn)為編程過程中的變量定義,包括變量的含義和具體值。例如變量a表示燈的顏色,整數(shù)1或字符x表示紅色均可。這需要根據(jù)數(shù)據(jù)所賦予的信息,結(jié)合算法確定變量的數(shù)據(jù)類型及其取值。另一方面,歸納表達(dá)式所表示的信息。假設(shè)變量a表示整數(shù),那么表達(dá)式a%2==1表示的信息“a是奇數(shù)”。
2.2 邏輯思維的訓(xùn)練
根據(jù)信息的表示進(jìn)行正確的邏輯推理,這是訓(xùn)練邏輯思維能力的主要方法。例如計算a=b+c,變量a的取值隨著程序的執(zhí)行而變化,其正確性依賴于程序邏輯的正確性。程序的正確邏輯是:程序執(zhí)行前,變量a、b和c具有獨立的存儲空間,b和c存放待求和的兩個值,a待存放這兩個數(shù)的和;程序執(zhí)行結(jié)束后a的取值是兩個數(shù)的和,b和c的取值保持不變。由程序邏輯的正確性,可推理變量取值執(zhí)行前后的變化,經(jīng)對比或梳理可進(jìn)一步驗證程序執(zhí)行結(jié)果的邏輯正確性。在程序設(shè)計教學(xué)中即可正向講解程序執(zhí)行過程中每一步的邏輯,也可通過邏輯推理反向推進(jìn)程序設(shè)計,達(dá)成訓(xùn)練學(xué)生邏輯思維能力的目的。
這是基于循環(huán)不變式面向循環(huán)控制結(jié)構(gòu)的教學(xué)設(shè)計。由于循環(huán)體是不變的,其執(zhí)行邏輯也不變,即每次循環(huán)執(zhí)行前各個變量的信息表示一致。其設(shè)計的關(guān)鍵點在于確定循環(huán)執(zhí)行前的循環(huán)變量集合及約束集合。
3 教學(xué)案例設(shè)計
3.1 冒泡法案例設(shè)計
冒泡法是對n個元素的整型數(shù)組升序排序的典型應(yīng)用(為方便描述,采用從后向前的冒泡方式)。
步驟1:根據(jù)算法確定循環(huán)體的基本操作。第i次循環(huán)將第i小的元素放在i位置,使得0到i的元素有序;
步驟2:確定循環(huán)變量集合。i表示元素位置(或循環(huán)次數(shù))、整型數(shù)組;
步驟3:確定循環(huán)開始前的約束集合。只有i和整型數(shù)組之間的約束關(guān)系,即從0到i的元素已是升序排列;
步驟4:確定循環(huán)邊界。i是循環(huán)控制變量,邊界為n-1,即算法結(jié)束時0到n-1升序排列;
步驟5:設(shè)計循環(huán)結(jié)構(gòu)。
1)初始化。第一次循環(huán)前,其約束為0到0的元素有序,即i=0;
2)循環(huán)體設(shè)計。每次執(zhí)行循環(huán)體前,0到i的元素有序排列。所以循環(huán)體通過冒泡算法確定i+1位置的元素,偽代碼如下:
i++;
n-1到i冒泡;
當(dāng)進(jìn)入下一次循環(huán)結(jié)束前,保證了約束的一致性,即0到i的元素有序;
3)循環(huán)條件的設(shè)計。循環(huán)結(jié)束時應(yīng)得到有序的元素序列,即0到n-1的元素有序。因此循環(huán)結(jié)束時i的值為n-1,條件即是i i=0; while(i i++; n-1到i冒泡; } 3.2 約瑟夫環(huán)案例設(shè)計 約瑟夫環(huán)問題:n個按序編號的小孩圍成一圈,從1到m報數(shù),數(shù)到m的小孩出列,下一個小孩從1繼續(xù)開始報數(shù),以此類推,求小孩的出列順序。 步驟1:確定信息表示。結(jié)果用數(shù)組記錄出列順序,數(shù)組下標(biāo)對應(yīng)小孩編號,數(shù)組值為0表示沒有出列; 步驟2:確定循環(huán)體的基本操作為處理一個小孩的報數(shù)(不管該小孩是否出列); 步驟3:確定循環(huán)變量集合。數(shù)組a用來記錄結(jié)果,i表示將要處理的小孩,j表示將要報的數(shù),k表示將要出列的順序號(從1開始); 步驟4:確定循環(huán)前的依賴集合。如果a[i]的值不是0,則本次循環(huán)結(jié)束;如果j的值是m,則a[i]的值賦k; 步驟5:確定循環(huán)邊界。循環(huán)結(jié)束時將要出列的順序號應(yīng)該為n+1; 步驟6:設(shè)計循環(huán)體。 1)初始化。根據(jù)循環(huán)變量含義,首次循環(huán)之前數(shù)組元素的值應(yīng)為0,i=0,j=1,k=1; 2)循環(huán)體設(shè)計。每次循環(huán)前的循環(huán)變量的含義及約束不變,因此在循環(huán)體內(nèi)改變各個循環(huán)變量邏輯的偽代碼如下: If(a[i]==0){ //小孩沒出列 If(j==m){ //報數(shù)為m a[i]=k; //小孩出列 k++;j=1;? //修改k,j的值,為下次循環(huán)做準(zhǔn)備 } } i++; if(i==n-1)i=0;? //準(zhǔn)備處理下一個小孩 3)循環(huán)條件設(shè)計。循環(huán)結(jié)束時所有小孩都出列了,此時k等于n+1,即while(k<=n)。 需要強(qiáng)調(diào)的是,由于變量的含義是隨著其值的變化而變化,所以約束集合應(yīng)該在進(jìn)入循環(huán)之前確定。對照步驟5,即可驗證循環(huán)結(jié)構(gòu)的正確性。實際設(shè)計中的信息表示存在多種方式,如i可以表示為0到i-1的元素有序,這需要根據(jù)具體的信息進(jìn)行邏輯推理而定,也是提升學(xué)生計算思維和邏輯思維能力的一種途徑。 4 實踐效果及結(jié)論 近三年的教學(xué)實踐表明,基于循環(huán)不變式的教學(xué)方法對學(xué)生理解循環(huán)程序設(shè)計的本質(zhì),提高循環(huán)程序設(shè)計能力乃至程序設(shè)計基礎(chǔ)的課程成績均有比較好的效果。學(xué)生對循環(huán)控制結(jié)構(gòu)的正確理解和應(yīng)用已不成問題,程序設(shè)計基礎(chǔ)課程的平均成績由70分以下提高到80分以上,不及格人數(shù)大幅減少,明顯地提升了學(xué)生學(xué)習(xí)程序設(shè)計的自信力和興趣。由此可見,循環(huán)不變式的教學(xué)方法重構(gòu)了傳統(tǒng)的重語法輕邏輯的教學(xué)方式,從程序的內(nèi)在邏輯入手,融合學(xué)生計算思維和邏輯思維能力的培養(yǎng)和訓(xùn)練,實際教學(xué)效果明顯,具有推廣和應(yīng)用前景。 參考文獻(xiàn): [1] 劉鑫,王忠,范青剛,等.智能時代程序設(shè)計基礎(chǔ)課程改革實踐探索[J].計算機(jī)教育,2022(6):194-199. [2] 姜懿烊.以計算思維為導(dǎo)向的中職C程序設(shè)計教學(xué)模式研究[D].長春:長春師范大學(xué),2021. [3] 李運(yùn)發(fā).以應(yīng)用需求為導(dǎo)向的程序設(shè)計課程教學(xué)改革[J].軟件導(dǎo)刊,2021,20(12):221-225. [4] 楊衛(wèi)明.大數(shù)據(jù)智能化背景下程序設(shè)計課程線上線下混合教學(xué)模式構(gòu)建[J].計算機(jī)時代,2021(5):84-87. [5] 易鋒,馬慧,何懷文,等.對比教學(xué)法在程序設(shè)計基礎(chǔ)課程中的應(yīng)用實踐研究[J].電腦知識與技術(shù),2022,18(20):155-157. 【通聯(lián)編輯:王力】