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