《計算機程序設計教學中的抽象思維能力培養(yǎng)》由會員分享,可在線閱讀,更多相關(guān)《計算機程序設計教學中的抽象思維能力培養(yǎng)(3頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、計 算 機 教 育
Computer Education
第 3 期
2012 年 2 月 10 日
27
中圖分類號:G642
文章編號:1672-5913(2012)03-0027-03
計算機程序設計教學中的抽象思維能力培養(yǎng)
劉衛(wèi)國,施榮華
(中南大學 信息科學與工程學院,湖南 長沙 410083)
摘 要:提高學生的程序設計能力是計算機程序設計教學需要解決的關(guān)鍵問題。本文結(jié)合教學實踐,
指出學生的抽象思維能力薄弱是重要的制約因素,從教學方法角度提出培養(yǎng)學生抽象思維能力的途徑
和方法。
關(guān)鍵詞:程序設計;抽象思維;能力
計算機程序設計的教學關(guān)鍵是培養(yǎng)學
2、生的程
序設計能力。我們在教學過程中發(fā)現(xiàn),學生的抽 象思維能力薄弱是制約程序能力培養(yǎng)的重要因素。 這里的抽象思維能力可以理解為如何從計算機的 基本工作原理出發(fā),將具體的解題步驟抽象為一 般的解題程序,或者可稱為計算機化的思維。
人們分析和解決問題的思維活動轉(zhuǎn)化成計算機程
序的過程 [1]。這就決定了在進行程序設計時的思 維方式應該是計算機化的思維,即從計算機工作 的角度來設計操作步驟,使問題一步一步地得到 解決。
2
程序設計難在哪里——直觀到抽象的
1
程序設計的本質(zhì)——“教會”計算機
跨越
如何解決問題
程序設計教學中碰到的普遍現(xiàn)象,是在講
授某一個程序的設計思路(算
3、法)時,學生往往 聽得懂,但合上書本,要自己來寫程序時就犯 難了,除了記憶性地羅列一些語句外,難以形 成明確的編程思路、編出正確的程序,不知從 何下手。但如果能將問題分解,采用各個擊破的 方式,學生就容易理解。這說明學生習慣于直
計算機是在程序的控制下自動工作的,完成
各種不同的任務,需要不同的程序。但計算機本 身不能形成解決實際問題的程序,而必須由人來 編寫。在使用計算機求解問題時,必須從計算機 工作原理的角度,將實際問題的求解過程用計算 機所能理解的程序語言表達成程序,最終計算機 執(zhí)行程序并在程序的控制之下完成解題任務。從 這個意義上說,程序設計的本質(zhì)就是“教會”計 算機如何解決問題。
4、
程序設計的關(guān)鍵是設計算法。算法是為解決 問題而采用的方法和步驟,如果從計算機完成任 務的角度,一個計算機程序就是利用程序設計語 言對算法的一種實現(xiàn)。本質(zhì)上講,程序設計是將
觀形象思維,面臨的主要困難在于直觀到抽象、
特殊到一般的跨越,所以程序設計教學中如何
實現(xiàn)直觀思維到抽象思維的轉(zhuǎn)變是需要解決的 關(guān)鍵問題。
程序設計反映了利用計算機解決問題的全 過程,在這個過程中離不開抽象思維 [2]。當用計 算機對問題進行求解時,首先要對問題進行詳
計 算 機 教 育
Computer Education
28
2012
細分析,明確問題的要求,然后要抽象成適合
在計算機中表示
5、的數(shù)據(jù)結(jié)構(gòu)和形式化的數(shù)學模 型,最后把問題的數(shù)學模型或處理需求轉(zhuǎn)化為 有效的算法,并編碼實現(xiàn),從而得到問題的結(jié) 果,這就是計算機的問題求解機制。在這個機制 中,面臨的主要問題就是對問題進行抽象和形 式化,并構(gòu)建算法 [3-4],這是一個科學抽象過程, 所以抽象思維是程序設計的基礎。從提高學生的 程序設計能力上講,對學生抽象思維能力的培 養(yǎng)十分重要。
兩個數(shù)兩兩進行比較,使小的在前,大的在后。
先考慮第 1 輪比較:x[1] 與 x[2] 比較,如果 x[1] 大于 x[2],則將 x[1] 與 x[2] 互換,否則不交 換。然后,將 x[2] 與 x[3] 比較,如果 x[2] 大于 x[
6、3],則將 x[2] 與 x[3] 互換。如此重復,最后將 x[n-1] 與 x[n] 比較,如果 x[n-1] 大于 x[n],則將 x[n-1] 與 x[n] 互換,否則不互換,這樣第 1 輪比
較 n-1 次以后,x[n] 中必定是 n 個數(shù)中的最大數(shù)。
再考慮第 2 輪比較:將 x[1] 到 x[n-1] 相鄰的
兩個數(shù)兩兩比較,比較 n-2 次以后,x[n-1] 中必
定是剩下的 n-1 個數(shù)中最大的,n 個數(shù)中第二大的。
3
教會學生如何編程序——抽象思維能力
如此重復,最后進行第 n-1 輪比較:x[1] 與
培養(yǎng)
x[2] 比較,把 x[1] 與 x[2] 中
7、較大者移入 x[2] 中,
x[1] 是最小的數(shù)。最后 x 數(shù)組按從小到大順序
排序。
最后歸納總結(jié)如下:用雙重循環(huán)來組織排 序,外循環(huán)控制比較的輪數(shù),n 個數(shù)排序需比較 n-1 輪,設循環(huán)變量 i,i 從 1 變化到 n-1。內(nèi)循環(huán) 控制每輪比較的次數(shù),第 i 輪比較 n-i 次,設循 環(huán)變量 j,j 從 1 變化到 n-i。每次比較的兩個元 素分別為 x[j] 與 x[j+1]。
又如,程序設計中有一類數(shù)字問題。數(shù)字 問題的提法往往是求某一范圍內(nèi)符合某種條件的 數(shù)。這一類問題的算法設計思路如下。
針對程序設計的難點,教學中應充分考慮初
學者的認知特點,從初學者的角度來理解學生的
8、 學習心態(tài),幫助學生理清思路,展現(xiàn)程序設計的 過程,從而幫助學生建立程序設計的清晰思路。
1)采用自頂向下、逐步求精的結(jié)構(gòu)化方法, 將復雜問題進行分解,幫助建立明確的程序設計 思路。
結(jié)構(gòu)化方法是一種重要的程序設計方法, 即便在面向?qū)ο笤O計中,它仍是類的內(nèi)部代碼 設計應遵循的重要方法。結(jié)構(gòu)化方法中“自頂向 下,逐步求精”的過程就是將問題求解由抽象逐 步具體化的過程,這種方法符合人們解決復雜 問題的普遍規(guī)律,對初學者建立明確的程序設 計思路很有幫助,因此程序設計教學也應充分 利用這一方法。
先看將 n 個數(shù)排序的問題,可以分為如下 3
個步驟。
① 將需要排序的 n 個數(shù)存放到一個數(shù)組
9、中
(設 x 數(shù)組)。
② 將 x 數(shù)組中的元素從小到大排序,即 x[1]
最小、x[2] 次之……x[n] 最大。
③ 將排序后的 x 數(shù)組輸出。 其中第②步是關(guān)鍵。 以冒泡排序法為例,其基本思路是將相鄰的
① 考慮判斷一個數(shù)是否滿足條件的算法。
有時可以直接用一個關(guān)系表達式或邏輯表達式來
判斷,如判斷奇數(shù)、偶數(shù)。但更多的情況無法直 接用一個條件表達式來判斷,這時可根據(jù)定義利 用一個循環(huán)結(jié)構(gòu)進行判斷,例如判斷一個數(shù)是否 為素數(shù)。
② 在指定范圍內(nèi)重復執(zhí)行“判斷一個數(shù)是 否滿足條件”的程序段,從而求得指定范圍內(nèi)全 部符合條件的數(shù)。這里用的策略是窮舉。
2)從直觀入手,幫助構(gòu)造
10、復雜的程序結(jié)構(gòu)
(循環(huán)結(jié)構(gòu)),理解計算機解題的特點。 學生的思維能力在很大程度上與其感性經(jīng)驗
相聯(lián)系,他們習慣于直觀、具體的思維方式,所
人才培養(yǎng)
29
第 3 期
以在程序設計教學中要采用形象直觀的方法,充
分利用學生已具備的知識,誘發(fā)形象思維向邏輯 思維的躍變。
例如,循環(huán)結(jié)構(gòu)是一種重要的程序結(jié)構(gòu),也 最能體現(xiàn)計算機解題的特點,但學生往往在構(gòu)造 循環(huán)結(jié)構(gòu)時有困難,主要表現(xiàn)為不清楚循環(huán)體要 包括哪些語句、如何設置循環(huán)的條件、如何設置 循環(huán)變量的初值,等等。如何幫助學生構(gòu)造復雜 的循環(huán)結(jié)構(gòu)是教學的重要內(nèi)容,為了體現(xiàn)循環(huán)結(jié) 構(gòu)的形成過程,可以把問題先用直觀的順序結(jié)構(gòu) 一步
11、一步表示出來,然后再幫助學生尋找規(guī)律, 找出重復執(zhí)行的語句,這些重復執(zhí)行的語句就是 循環(huán)體。這方面的例子是很多的 [5]。
也可以利用數(shù)學中的直觀概念,適時過渡到 循環(huán)結(jié)構(gòu)。例如,累加與累乘問題是最典型、最 基本的一類算法,實際應用中很多問題都可以歸 結(jié)為累加與累乘問題。下面看累加問題。
累加的數(shù)學遞推式如下。
S0 = 0
Si = Si-1+X(i i = 1,2,3,…)
其含義是第 i 次的累加和 S 等于第 i-1 次時 的累加和 S 加上第 i 次時的累加項 X。從循環(huán)的 角度講,即是本次循環(huán)的 S 值等于上一次循環(huán)時 的 S 值加上本次循環(huán)的 X 值,這可用下列
12、賦值 語句來實現(xiàn):
S=S+X
顯然,上述賦值語句重復執(zhí)行若干次后,S
的值即若干個數(shù)之和。
特例 1 當 Xi 恒為 1 時,即 Si = Si-1+1,S 用
于計數(shù)。
特例 2 當 X0 = 0,且 Xi = Xi-1+1(i = 1,2,
3,…,N)時,S 為 1 + 2 + 3 +…+ N 的值。
累乘問題的道理是一樣的。 遞推問題常用迭代方法來處理,即賦值語句
S=S+X 或 P=P*X 循環(huán)執(zhí)行若干次。相應的算法 設計思路如下。
① 寫出循環(huán)體中需要重復執(zhí)行的部分。這 一部分要確定兩個內(nèi)容,一是求每次要累加或累 乘的數(shù),二是迭代關(guān)系 S=S+X 或
13、P=P*X。
② 確定終止循環(huán)的方式。一般有事先知道
循環(huán)次數(shù)的計數(shù)循環(huán)和事先不知道循環(huán)次數(shù)的條 件循環(huán)兩種方式,依具體情況而定。計數(shù)循環(huán)可 用一個變量來計數(shù),當達到一定循環(huán)次數(shù)后即退 出循環(huán)。條件循環(huán)可根據(jù)具體情況確定一個循環(huán) 的條件,當循環(huán)條件不滿足時即退出循環(huán)。
③ 確定循環(huán)初始值,即第一次循環(huán)時迭代 變量的值。
④ 重新檢查,以保證算法正確無誤。
4 結(jié)語
“授之以魚,不如授之以漁”。程序設計教學
不能僅僅羅列現(xiàn)成的程序,而要從初學者的學習
心理和思維習慣出發(fā),站在計算機解題的角度,
努力呈現(xiàn)程序的構(gòu)造過程。在這個過程中,培養(yǎng)
學生的抽象思維能力十分重要。
參考文
14、獻:
崔進平. 論程序設計教學與創(chuàng)新能力培養(yǎng)[J]. 山東教育學院學報, 2004(1): 37-40.
張樹粹, 張玉林, 譚征, 等. 高級語言程序設計與計算思維能力培養(yǎng)[C]. 全國第五次程序設計語言發(fā)展與教學學術(shù)會議、第三 屆全國Web信息系統(tǒng)及其應用學術(shù)會議暨全國首屆語義Web與本體論學術(shù)研討會, 2006.
阮一文, 姚朝灼. 論程序設計語言教學與思維方法的培養(yǎng)[J]. 高等理科教育, 2006(6): 76-79.
高敬陽, 朱群雄, 山嵐, 等. 貫穿在系列課程中的程序設計能力的培養(yǎng)[J]. 中國大學教學, 2008(11): 47-48.
王力. 程序設計教學中的幾個關(guān)鍵問題研究[J]. 計算機科學, 2008, 35(4A): 361-362.
[1]
[2]
[3]
[4] [5]
(編輯:姚彥如)