韋萍萍 崔忠偉
摘 要:針對(duì)計(jì)算思維培養(yǎng)問題以及C語言程序設(shè)計(jì)教學(xué)現(xiàn)狀,通過分析計(jì)算思維的關(guān)鍵內(nèi)容及表述體系,提出了如何在C程序設(shè)計(jì)教學(xué)中培養(yǎng)計(jì)算思維的一般方法。
關(guān)鍵詞:C語言;程序設(shè)計(jì);計(jì)算思維;邏輯
中圖分類號(hào):TP311.1 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2095-1302(2018)01-0-03
0 引 言
目前,提出的人類認(rèn)識(shí)、改造世界的思維方式有以下三種:
(1)以數(shù)學(xué)學(xué)科為代表的采用演繹、推理方法的邏輯思維;
(2)以實(shí)驗(yàn)、觀察、數(shù)據(jù)收集、分析、歸納為主要研究形式的實(shí)證思維;
(3)以利用計(jì)算技術(shù)通過構(gòu)建系統(tǒng)進(jìn)行問題求解為主要研究形式的計(jì)算思維(以計(jì)算學(xué)科為代表);
(4)目前還存在爭議的以大數(shù)據(jù)背景下的數(shù)據(jù)計(jì)算為主要研究形式的數(shù)據(jù)思維[1]。
計(jì)算思維的概念由麻省理工大學(xué)Seymour Papert教授于1996年提出[2],但真正讓計(jì)算思維概念引起學(xué)者關(guān)注的代表人物是美國卡內(nèi)基梅隆大學(xué)(CMU)的周以真教授[3]。多年來,眾多學(xué)者不僅定義了計(jì)算思維概念,更在計(jì)算機(jī)教育中多次探討了其實(shí)現(xiàn)、挑戰(zhàn)等。周以真教授認(rèn)為,計(jì)算思維是運(yùn)用計(jì)算機(jī)科學(xué)的基礎(chǔ)概念求解問題、設(shè)計(jì)系統(tǒng),及人類行為理解等涵蓋了計(jì)算機(jī)科學(xué)的一系列思維活動(dòng)。計(jì)算思維雖然擁有諸多計(jì)算機(jī)科學(xué)的特征,但其本身卻并非是計(jì)算機(jī)科學(xué)的專屬[4]。工作、生活中的問題及解決方法也可用計(jì)算機(jī)思維的概念來描述。
1 計(jì)算思維的關(guān)鍵內(nèi)容
1.1 計(jì)算思維的思路
對(duì)于計(jì)算思維的內(nèi)涵定義,學(xué)者們目前并未達(dá)成共識(shí),周以真教授給出其特征,并建議大家對(duì)其進(jìn)行擴(kuò)展。
作為人類認(rèn)識(shí)世界、改造世界的科學(xué)思維,各種思維方式必須具備不同的區(qū)分依據(jù),確立一種思維模式的主要依據(jù)是它產(chǎn)生結(jié)論的方式和判斷結(jié)論的標(biāo)準(zhǔn)[5]。邏輯思維以三段式推理規(guī)則和重言式公理作為工具,對(duì)已知進(jìn)行演繹,通過推理得到結(jié)論。而判斷結(jié)論的合理性只在乎推導(dǎo)過程的正確性、合理性,無論是否符合事實(shí)。因此符合邏輯推理是邏輯思維判定結(jié)論的標(biāo)準(zhǔn)。實(shí)證思維以觀察、實(shí)驗(yàn)得到的結(jié)論為假設(shè)(定律或原理),再經(jīng)過新的實(shí)驗(yàn)、觀察或推理得出新的結(jié)論,且該結(jié)論必須與以往的實(shí)驗(yàn)結(jié)論不矛盾,要經(jīng)得起實(shí)驗(yàn)的驗(yàn)證。因此,實(shí)驗(yàn)是實(shí)證思維判斷結(jié)論的標(biāo)準(zhǔn)。
隨著科技的進(jìn)步,人類認(rèn)識(shí)世界的能力大大提升,也極大地推進(jìn)了人類改造世界的能力。人們?cè)噲D構(gòu)造、實(shí)現(xiàn)自然界不存在的事物,但自然界不存在的事物既不同于由實(shí)證思維得到的自然規(guī)律,也不同于依靠邏輯推導(dǎo)得到的結(jié)論,它具有可構(gòu)造、可實(shí)現(xiàn)、可重復(fù)、可驗(yàn)證、可表達(dá)等特性,比如建筑設(shè)計(jì)。以自然界知識(shí)為前提,設(shè)計(jì)可行的方案,創(chuàng)造自然界原本不存在的事物,這就是計(jì)算思維。
計(jì)算思維的標(biāo)志是有限性、確定性和機(jī)械性[3]。計(jì)算思維通過對(duì)問題進(jìn)行描述、規(guī)劃,對(duì)處理對(duì)象進(jìn)行抽象、資源調(diào)配、算法設(shè)計(jì)等操作而得到結(jié)論(實(shí)施方案),判斷結(jié)論的標(biāo)準(zhǔn)為方案的可行性。只要方案滿足計(jì)算思維的三個(gè)標(biāo)志,即視為可行。而如何求解問題,將理論實(shí)現(xiàn)的過程轉(zhuǎn)換為現(xiàn)實(shí)可實(shí)現(xiàn)的過程是計(jì)算思維的核心。計(jì)算機(jī)的出現(xiàn),使該核心得以實(shí)現(xiàn)和發(fā)展。從思維的角度看,計(jì)算機(jī)科學(xué)主要研究計(jì)算思維的概念、方法和內(nèi)容,并發(fā)展成為解決問題的一種思維模式[4]。
1.2 計(jì)算思維的表述體系
前ACM主席Denning為了方便各學(xué)科理解計(jì)算原理,提出“偉大的計(jì)算原理”,并將其歸納為7個(gè)類別,陳國梁等在此基礎(chǔ)上增加了“抽象”類,提出了表1中基于“偉大的計(jì)算原理”構(gòu)建的計(jì)算思維表述體系框架[6]。
2 計(jì)算思維在C語言中的案例分析
2010年9月發(fā)表的九校聯(lián)盟(C9)計(jì)算機(jī)基礎(chǔ)教學(xué)發(fā)展戰(zhàn)略聯(lián)合聲明指出:把“計(jì)算思維能力的培養(yǎng)”作為計(jì)算機(jī)基礎(chǔ)教學(xué)的核心任務(wù)[7]。表明計(jì)算思維能力已成為當(dāng)今復(fù)合型創(chuàng)新人才不可或缺的基本素質(zhì)。
在計(jì)算機(jī)學(xué)科中,計(jì)算機(jī)程序設(shè)計(jì)語言用以描述問題求解的實(shí)現(xiàn)步驟,學(xué)習(xí)程序設(shè)計(jì)語言是培養(yǎng)計(jì)算思維能力的有效方法。以下以C語言為例討論其支持計(jì)算思維體系框架的知識(shí)點(diǎn)。
2.1 C語言基本知識(shí)點(diǎn)
C語言作為算法描述語言,初學(xué)者需掌握數(shù)據(jù)存儲(chǔ)基本結(jié)構(gòu)、結(jié)構(gòu)化程序設(shè)計(jì)、模塊化等知識(shí)點(diǎn)。
2.1.1 數(shù)據(jù)存儲(chǔ)基本結(jié)構(gòu)
需要解決某個(gè)問題必定會(huì)涉及其所要處理的數(shù)據(jù),組織數(shù)據(jù)形成一定的邏輯關(guān)系,使其對(duì)應(yīng)不同的數(shù)據(jù)結(jié)構(gòu)。但無論多復(fù)雜的數(shù)據(jù)結(jié)構(gòu),均可以由一些基本的數(shù)據(jù)結(jié)構(gòu)單元所組成。
以數(shù)據(jù)存儲(chǔ)位置的連貫性進(jìn)行分類,C語言中的基本數(shù)據(jù)結(jié)構(gòu)單元如圖1所示。
2.1.2 結(jié)構(gòu)化程序設(shè)計(jì)
結(jié)構(gòu)化程序設(shè)計(jì)方法指出,任何一個(gè)程序均可用三種基本控制結(jié)構(gòu)(順序、選擇、循環(huán))來構(gòu)造,其采用的原則為“自頂向下,逐步求精”,模塊化與計(jì)算思維的方法一致。在C語言中,用if語句來實(shí)現(xiàn)選擇結(jié)構(gòu),用while、do…while、for語句來實(shí)現(xiàn)循環(huán)結(jié)構(gòu)。
2.1.3 模塊化
龐大的系統(tǒng)伴隨著冗長的代碼,給閱讀、修改帶來了困難。將項(xiàng)目任務(wù)分成多個(gè)能獨(dú)立完成某項(xiàng)功能的模塊,可提供模塊間的通訊方式,使系統(tǒng)的結(jié)構(gòu)規(guī)劃更加清晰,契合培養(yǎng)計(jì)算思維的表述體系。
2.2 案例分析示例
在程序設(shè)計(jì)教學(xué)中,應(yīng)將計(jì)算思維的訓(xùn)練滲透到解題步驟中,遵循“問題分析及抽象——算法設(shè)計(jì)——程序設(shè)計(jì)——測試”過程。在該過程中,問題分析及抽象是關(guān)鍵,對(duì)問題的分解、建模將直接影響問題的可解性、高效性。下文為案例的部分解題分析,旨在體現(xiàn)計(jì)算思維的部分訓(xùn)練過程。
案例1 從鍵盤輸入一個(gè)數(shù)a,在屏幕上輸出一個(gè)由星號(hào)組成的菱形,星號(hào)之間空一個(gè)空格,最長一行星號(hào)數(shù)量為a,比如a=7,則輸出圖案如圖2所示。
解題分析:
(1)問題分析及抽象
此問題只輸出星號(hào),且每行星號(hào)數(shù)量不同??刹捎肈OS系統(tǒng)和圖形界面兩種模式在屏幕上顯示圖形。在DOS系統(tǒng)下,字符按照從上到下,從左到右的順序輸出;在圖形模式下,字符按照給定的坐標(biāo)輸出。此例采用DOS系統(tǒng)模式輸出。
(2)算法設(shè)計(jì)
此例并不做復(fù)雜的數(shù)據(jù)處理,無需采用聚類等算法,只需觀察其輸出規(guī)律,控制輸出的行數(shù)、每行的星號(hào)數(shù)及第一個(gè)星號(hào)前的空格數(shù)即可。其中輸出行數(shù)采用一個(gè)外層循環(huán)控制,輸出的每行星號(hào)數(shù)及第一個(gè)星號(hào)前的空格數(shù)分別用兩個(gè)同級(jí)的循環(huán)來控制。
其中,a表示最長行星號(hào)數(shù),即總行數(shù);i表示外層循環(huán)的控制變量,以控制輸出行數(shù);m表示每行第一個(gè)星號(hào)前的空格數(shù),初始值為a,變化規(guī)律為先遞減2,在a/2+1行后遞增2;n表示每行輸出的星號(hào)數(shù),初始值為1,變化規(guī)律為先遞增2,在a/2+1行后遞減2;j表示兩個(gè)內(nèi)層循環(huán)的循環(huán)控制變量。算法見表2所列。
表2 菱形星號(hào)圖輸出算法
算法1:菱形星號(hào)圖輸出算法
輸入:無 輸出:菱形圖
1. 輸入a
2. i=1; m=a; n=1
3. for i=1 to a
4. for j=1 to m 輸出1個(gè)空格
5. for j=1 to n 輸出”* ”
6. 如果i<=a/2+1 那么m=m-2; n=n+2
7. 否則m=m+2; n=n-2
案例2 設(shè)計(jì)一個(gè)能夠和小孩玩撲克接龍游戲的機(jī)器。游戲規(guī)則:將一副撲克平均分成兩份,每個(gè)人將牌面反扣。兩個(gè)人依次從上到下取牌放到接牌區(qū),如圖3所示。當(dāng)手上取到的牌與接牌區(qū)的任一張牌相同時(shí),兩張相同牌之間的所有牌歸出牌人,擁有牌數(shù)為零者則輸。
問題分析及抽象:
程序界面可采用圖形模式,通過檢測按鍵或鼠標(biāo)的動(dòng)作出牌。
此問題需要處理54張牌面數(shù)據(jù)。將牌面數(shù)據(jù)分成機(jī)器區(qū)、孩子區(qū)、接牌區(qū)三類。機(jī)器區(qū)和孩子區(qū)的撲克牌初始化后隨機(jī)抽取平分,每一份牌的順序與初始化的順序有關(guān),接牌區(qū)牌的順序與牌本身出現(xiàn)的順序有關(guān)。由上述描述可知,可采用三個(gè)隊(duì)列存儲(chǔ)撲克牌數(shù)據(jù),通過一維數(shù)組實(shí)現(xiàn)。程序模塊如圖4所示。
設(shè)數(shù)組a[]、b[]、c[]分別代表機(jī)器、孩子、接牌區(qū)的撲克牌。
初始化牌:54張撲克牌位置隨機(jī)排列,將前27張分給a數(shù)組,后27張分給b數(shù)組。模塊的輸入、輸出參數(shù)是兩個(gè)數(shù)組名。
出牌:對(duì)每個(gè)出牌方取當(dāng)前隊(duì)列(數(shù)組a或b)中的第一個(gè)元素。模塊的輸入?yún)?shù)是數(shù)組名,輸出參數(shù)是第1張牌。
接牌檢測:將通過出牌操作拿到的牌與數(shù)組c中的元素自后往前進(jìn)行比對(duì),若均不同則加至數(shù)組c尾部,當(dāng)有相同的牌面時(shí),將相同元素位置及其后的所有牌移動(dòng)到出牌方隊(duì)列的尾部。接牌區(qū)數(shù)組名、出牌方數(shù)組名、出牌方第1張牌是模塊的輸入?yún)?shù),無輸出參數(shù)。
3 結(jié) 語
程序設(shè)計(jì)是培養(yǎng)計(jì)算思維的重要方法,就如何使用計(jì)算機(jī)科學(xué)的基本概念、基本方法來解決問題進(jìn)行訓(xùn)練。無論采用哪種策略來教學(xué),都應(yīng)將計(jì)算思維的訓(xùn)練貫穿其中,重點(diǎn)在于問題的分解、模塊化、模塊間的通訊方式等,因此案例的選擇應(yīng)具有代表性、典型性。
當(dāng)然,計(jì)算思維的養(yǎng)成需要一段時(shí)間的積累,更需要計(jì)算思維的熟練使用,直至擁有移植此方法來處理除計(jì)算機(jī)問題之外問題的能力,因此程序設(shè)計(jì)教學(xué)任重而道遠(yuǎn)。
參考文獻(xiàn)
[1]蔣宗禮.計(jì)算思維之我見[J].中國大學(xué)教學(xué),2013(9):5-10.
[2] Seymour Papert.An Exploration in the Space of Mathematics Educations[J]. International Journal of Computers for Mathematical Learning, 1996,1(1):95-123.
[3] Jeannette M Wing. Computational Thinking[J].Communications of the ACM, 2006, 49(3):33-35.
[4]李廉.計(jì)算思維——概念與挑戰(zhàn)[J].中國大學(xué)教學(xué),2012(1):7-12.
[5]李廉.關(guān)于計(jì)算思維的特質(zhì)性[J].中國大學(xué)教學(xué),2014(11):7-14.
[6]陳國良,董榮勝.計(jì)算思維的表述體系[J].中國大學(xué)教學(xué),2013(12):22-26.
[7]九校聯(lián)盟(C9)計(jì)算機(jī)基礎(chǔ)教學(xué)發(fā)展戰(zhàn)略聯(lián)合聲明[J].中國大學(xué)教學(xué),2010(9):4.
[8]黃磊,傅籬,申壽云.基于AT89C51的C語言實(shí)驗(yàn)與實(shí)踐教學(xué)改革與探索[J].物聯(lián)網(wǎng)技術(shù),2016,6(6):119-120.