汪紅兵+姚琳+武航星+張敏
摘 要:計算思維的本質是抽象和自動化。對于C語言程序來說,抽象就是使用程序、函數(shù)、函數(shù)調用以及數(shù)據(jù)類型、常量、變量、數(shù)組和鏈表等元素描述現(xiàn)實生活中的系統(tǒng)、功能、功能調用以及單個特征或特征組合等,自動化則體現(xiàn)為函數(shù)內部的語句在EIP寄存器加法操作支持下順序自動地執(zhí)行以及函數(shù)之間的調用在內存堆棧區(qū)支持下自動地進行跳轉。最后,針對計算思維的抽象和自動化特征,給出了C語言程序設計課程在教學內容、教學方式和考核內容上的一些建議和措施。
關鍵詞:C語言程序設計;計算思維;抽象;自動化
美國卡內基·梅隆大學的周以真教授在2006年系統(tǒng)地提出了計算思維的概念[1]:計算思維指的是運用計算機科學的基礎概念進行問題求解、系統(tǒng)設計以及人類行為理解等一系列思維活動。其后,陳國良院士和李廉教授歸納出三種典型的科學思維,即以觀察和歸納為特征的實證思維,以推理和演繹為特征的邏輯思維,以抽象和自動化為特征的計算思維[2-3]。計算思維是計算機類課程的主要思維方式。
有關計算思維在程序設計類課程中的研究,已經(jīng)引起很多學者的興趣[4-6]。這些研究雖然從案例設計和項目過程等角度做了有益探索,但卻忽略了對計算思維本質的討論。C語言程序設計課程中,我們采用李廉教授的觀點,即計算思維的本質是抽象和自動化。抽象指的是使用符號系統(tǒng)對問題進行精確而嚴格的描述;自動化指的是對這些符號系統(tǒng)施加一定操作并按照某種結構自動地執(zhí)行。
一、C語言程序中的計算思維本質之一:抽象
有些C語言程序設計課程教學的一開始就提倡使用案例教學。這雖然能夠使得學生可以迅速進入實際編程環(huán)節(jié)并建立直觀感性認識,但案例教學由于往往出現(xiàn)“程序就是編程工具”的工具論現(xiàn)象,導致出現(xiàn)“只知其然,而不知其所以然”的學習后果,不利于學生的后續(xù)發(fā)展。
對于C語言程序來說,抽象指的是使用符號系統(tǒng)對求解問題進行精確而嚴格的描述,抽象的過程就是對實際系統(tǒng)建模的過程。實際上,程序是用來描述現(xiàn)實生活中某個實際存在的或不存在的系統(tǒng)。程序就是對系統(tǒng)的抽象。系統(tǒng)之所以存在,是因為系統(tǒng)具有一些關鍵特征和核心功能。程序中對系統(tǒng)特征進行抽象的就是操作對象,對系統(tǒng)功能進行抽象的就是函數(shù)。系統(tǒng)功能往往有多個且存在著復雜的調用關系。例如,求一個函數(shù)定積分的功能必然涉及求函數(shù)在某一個點的取值功能,如果該函數(shù)比較復雜且含有正弦、余弦和正切等三角函數(shù),還需要繼續(xù)調用求這些三角函數(shù)值的功能,形成多級調用;有時函數(shù)執(zhí)行過程中還需要調用本身,形成遞歸調用。
C語言程序中的操作對象分為變量和常量。常量是對系統(tǒng)中的取值不變的特征進行抽象,如圓的圓周率;而變量是對系統(tǒng)中取值可以改變的特征進行抽象,如圓的半徑。不管是哪類特征,都會有一個取值范圍以及所允許的操作。例如,對于課程成績,其取值范圍一般是從0~100,而允許對該特征進行的操作可以是加法和減法等算術操作以及大于和小于等比較運算;而對于課程名字這一特征,就不能進行加法和減法這樣的算術操作。C語言程序中用來對特征的取值范圍及允許的操作進行抽象的概念是數(shù)據(jù)類型。C語言程序中的抽象模塊如表1所示。
現(xiàn)實生活中,經(jīng)常需要描述多個相同數(shù)據(jù)類型的一個系統(tǒng)特征,如所有同學的高等數(shù)學課程的成績,可以使用一維數(shù)組來進行描述;而描述多個不同數(shù)據(jù)類型的多個系統(tǒng)特征,如學生的姓名、學生的身高和學生的年齡等,可以使用結構體來進行描述;如果要描述多個相同數(shù)據(jù)類型的多個系統(tǒng)特征,如全班所有同學的高等數(shù)學和大學英語課程的成績,則可以使用二維數(shù)組來進行描述。
表1 C語言程序中的抽象模塊
C語言程序中的元素 現(xiàn)實生活中的元素
程序 系統(tǒng)
函數(shù) 系統(tǒng)功能
函數(shù)調用 功能調用
數(shù)據(jù)類型 常量 系統(tǒng)特征
變量
一維數(shù)組 多個相同類型的一個系統(tǒng)特征
多維數(shù)組 多個相同類型的多個系統(tǒng)特征
結構體 多個不同類型的多個系統(tǒng)特征
鏈表或結構體數(shù)組 多個不同類型的多個系統(tǒng)特征的集合
二、C語言程序中的計算思維本質之二:自動化
計算思維的另一個本質是自動化。自動化指的是對符號系統(tǒng)建模的各種元素施加一些操作,并按照某種順序的或非順序的結構自動地執(zhí)行。對于C語言程序來說,自動化體現(xiàn)為函數(shù)內部的語句在EIP寄存器加法操作支持下順序自動地執(zhí)行以及函數(shù)之間的調用在內存堆棧區(qū)支持下自動地進行跳轉。EIP是32位機的指令指針寄存器,用來存放下一條要執(zhí)行的指令的地址。EIP寄存器中增加值的大小需要根據(jù)實際存儲指令的大小來確定。
對于C語言程序來說,自動化過程中執(zhí)行的對象是語句。不同類型的語句,執(zhí)行的結果和效用是不一樣的。例如,一個變量定義語句“int a”的執(zhí)行結果是在內存中分配4個字節(jié)的空間,一個返回語句“return t”的執(zhí)行結果是將程序的執(zhí)行流程返回到主調函數(shù)中。這些語句的組合構成一個個函數(shù),程序的執(zhí)行就是在某個函數(shù)之中順序自動地執(zhí)行以及在多個函數(shù)之間來回自動地跳轉。
既然程序的執(zhí)行過程是在某個函數(shù)之中順序自動地執(zhí)行以及在多個函數(shù)之間來回自動地跳轉,這種自動執(zhí)行需要有相應的計算機軟件和硬件基礎。支持程序自動執(zhí)行的軟件基礎是操作系統(tǒng),支持程序自動執(zhí)行的硬件基礎是計算機硬件結構,即馮·諾依曼原理的程序存儲思想。當用戶點擊執(zhí)行按鈕后,程序被提交給操作系統(tǒng)來執(zhí)行,可以不需要人為干預。此后,程序在操作系統(tǒng)中以進程的方式出現(xiàn)。操作系統(tǒng)協(xié)調內存、中央處理器和外存等硬件資源執(zhí)行該進程。
函數(shù)中的語句之所以能夠一個接著一個順序地執(zhí)行,主要依賴于EIP寄存器的加法操作。當一條指令執(zhí)行完成之后,EIP寄存器在原有內容的基礎上再加上當前指令所占存儲空間大小,其內容便是下一條指令的地址。如此進行下去,就可以一個一個順序地執(zhí)行函數(shù)中的語句。
程序控制之所以能夠在函數(shù)之間進行跳轉,主要依賴于操作系統(tǒng)管理的內存堆棧區(qū)。內存堆棧區(qū)是滿足“后進先出”操作約束的存儲區(qū)。當操作系統(tǒng)開始執(zhí)行用戶提交的C語言程序時,首先開始從main函數(shù)執(zhí)行,main函數(shù)的相關局部變量被壓入棧中;當執(zhí)行到被調函數(shù)時,被調函數(shù)的相關局部變量再次被壓入棧中,程序控制轉移到被調函數(shù),且操作只能對當前棧頂進行,而此時棧頂存儲的就是被調函數(shù)的相關局部變量;而當被調函數(shù)執(zhí)行結束時,被調函數(shù)的相關局部變量從棧中退出,程序控制轉移到main函數(shù)繼續(xù)執(zhí)行,此時棧頂存儲的是main函數(shù)的相關局部變量;當main函數(shù)執(zhí)行結束時,main函數(shù)的局部變量從棧中退出,整個程序執(zhí)行結束。下列程序執(zhí)行時的堆棧變化過程示意如圖1所示。
#include "stdio.h"
double s(double r)
{ return r*r; }
int main()
{ double r;
double area;
r=2.0;
area= s(r);
printf("area=%f",area);
return 0;
}
圖1 函數(shù)調用過程的堆棧變化
自動化過程實際反映了C語言程序解決實際問題的算法流程。算法是解決某一問題的執(zhí)行步驟。一般而言,使用C語言進行編程之前,需要進行相應的算法設計,即構思解決實際問題的思路和步驟。一旦這些步驟變成C語言程序語句并形成一個完整的程序,就可以提交給操作系統(tǒng)自動地執(zhí)行這些步驟,這正是計算機解決問題的高效率的體現(xiàn)。
三、以計算思維為導向的C語言程序設計課程教學
1.教學內容
針對計算思維的抽象和自動化兩大本質特征,C語言程序設計課程的教學內容需要在原有的基礎上特別強調一些針對性的觀點。例如,C語言中的各種數(shù)據(jù)類型和數(shù)據(jù)結構可以完成實際系統(tǒng)中各種不同元素的抽象,一個函數(shù)之中的順序語句自動執(zhí)行的基礎是EIP寄存器的加法操作,多個函數(shù)之間的來回自動跳轉的基礎是內存堆棧區(qū)的支持等。具體強調的觀點如表2所示。
表2 教學內容中需要強調的觀點
C語言程序設計
課程的內容 強調的觀點
C語言概述 程序是對系統(tǒng)的抽象
抽象過程就是C語言的建模過程
自動化過程反映C語言的算法流程
數(shù)據(jù)類型、表達式和語句 操作對象是對系統(tǒng)特征的抽象
語句是系統(tǒng)自動化執(zhí)行的基本對象
控制結構 控制結構是問題求解步驟的抽象
函數(shù)中順序語句自動執(zhí)行的基礎是EIP寄存器的加法操作
數(shù)組 一維數(shù)組是對多個相同類型的一個系統(tǒng)特征的抽象,多維數(shù)組是對多個相同類型的多個系統(tǒng)特征的抽象
函數(shù) 函數(shù)是對系統(tǒng)功能的抽象
函數(shù)調用是功能調用的抽象
函數(shù)之間的來回自動跳轉的基礎是內存堆棧區(qū)的支持
結構體 結構體是對多個不同類型的多個系統(tǒng)特征的抽象
指針 鏈表是多個不同類型的多個系統(tǒng)特征集合的抽象
2.教學方式
計算思維的本質是抽象和自動化。C語言程
序設計課程一般都是面向大一新生,理解抽象和自動化進而培養(yǎng)計算思維,對于還處在計算機學習起點的學生來說是比較困難的。
對于C語言程序來說,抽象過程實際就是運用C語言中各種符號對所描述系統(tǒng)的建模過程,培養(yǎng)抽象的計算思維方式就是培養(yǎng)使用C語言描述實際系統(tǒng)的思維過程。因此,可以通過啟發(fā)式教學方式引導學生思考如何使用C語言中的符號來描述系統(tǒng)。可以提出這樣的一系列問題:C語言中如何描述一個人的身高?如何綜合描述一個人的姓名、年齡和籍貫等?如何描述一個班中所有學生的高等數(shù)學成績?如何描述各路公共汽車站的網(wǎng)狀信息?通過啟發(fā)學生對這些問題的思考,讓學生所學的C語言中的各種符號不再“虛幻”,讓學生真正理解這些符號實際是一種建模元素,每種符號有著其特別的抽象描述能力。
對于C語言程序來說,理解自動化過程必須借助一些形象化的手段。例如,借助于Visual C++ 6.0平臺的單步調試功能,可以形象地演示上述C語言程序的自動化過程,如表3所示。
表3 C語言程序執(zhí)行過程中EIP和ESP寄存器內容的變化
斷點 EIP寄存器內容 ESP寄存器內容 當前棧頂函數(shù)
r=2.0;語句 00401068 0013FF24 main函數(shù)
area=s(r);語句 00401076 0013FF24 main函數(shù)
return r*r;語句 00401020 0013FF18 s函數(shù)
printf("area=%f",area);語句 00401089 0013FF24 main函數(shù)
從表3可以看出,隨著EIP寄存器內容的增加,main函數(shù)中的語句順序自動執(zhí)行,即從語句“r=2.0”到語句“area=s(r)”再到語句“printf("area=%f",area)”。ESP寄存器是另一個重要的寄存器,它始終存放棧頂?shù)牡刂?。隨著main函數(shù)對s函數(shù)的調用開始,棧頂工作函數(shù)由main函數(shù)變化為s函數(shù);當s函數(shù)調用結束后,棧頂工作函數(shù)又由s函數(shù)回到main函數(shù)。
3.考核內容
針對C語言程序設計課程的計算思維培養(yǎng)要求,考核方式上必須從以考查語言的語法知識為主轉變?yōu)橐钥疾閷W生的系統(tǒng)建模能力和算法設計能力為主。
系統(tǒng)建模能力的考查主要針對計算思維的抽象特征。例如,可以給出各種系統(tǒng)特征,考查學生使用數(shù)據(jù)類型進行描述的能力。
算法設計能力的考查主要針對計算思維的自動化特征。當然,C語言程序設計課程中涉及的都是一些如迭代、枚舉和排序等簡單算法。可將這些算法封裝成各種函數(shù)來進行調用,以考查函數(shù)中順序語句的執(zhí)行以及函數(shù)間的伴隨參數(shù)傳遞的跳轉來理解自動化過程。因此,必須以簡單算
法設計和函數(shù)調用為重點考核內容,突出對函數(shù)接口設計和算法流程設計的考核。
參考文獻:
[1] Jeannette M. Wing. Computational Thinking[J]. Communications of the ACM, 2006, 49(3):33-35.
[2] 陳國良. 計算思維[J]. 中國計算機學會通訊,2012,8(1):31-34.
[3] 李廉. 計算思維——概念與挑戰(zhàn)[J]. 中國大學教學,2012(1):7-12.
[4] 張耀文. 基于計算思維的程序設計課程案例教學法研究[J]. 重慶電子工程職業(yè)學院學報,2012,21(3):149-150.
[5] 吳紹兵. 計算思維和程序設計能力的培養(yǎng)[J]. 計算機教育,2011(16):11-14.
[6] 蘇海英. 計算思維理論指導下的程序設計教學改革實踐[J]. 現(xiàn)代計算機,2012(4): 32-34.
[資助項目:北京高等學校青年英才計劃(YETP0382);教育部高教司教改項目(2-2-ZXM-08);北京科技大學重點教改項目(JG2012Z01)]
[責任編輯:余大品]
程序控制之所以能夠在函數(shù)之間進行跳轉,主要依賴于操作系統(tǒng)管理的內存堆棧區(qū)。內存堆棧區(qū)是滿足“后進先出”操作約束的存儲區(qū)。當操作系統(tǒng)開始執(zhí)行用戶提交的C語言程序時,首先開始從main函數(shù)執(zhí)行,main函數(shù)的相關局部變量被壓入棧中;當執(zhí)行到被調函數(shù)時,被調函數(shù)的相關局部變量再次被壓入棧中,程序控制轉移到被調函數(shù),且操作只能對當前棧頂進行,而此時棧頂存儲的就是被調函數(shù)的相關局部變量;而當被調函數(shù)執(zhí)行結束時,被調函數(shù)的相關局部變量從棧中退出,程序控制轉移到main函數(shù)繼續(xù)執(zhí)行,此時棧頂存儲的是main函數(shù)的相關局部變量;當main函數(shù)執(zhí)行結束時,main函數(shù)的局部變量從棧中退出,整個程序執(zhí)行結束。下列程序執(zhí)行時的堆棧變化過程示意如圖1所示。
#include "stdio.h"
double s(double r)
{ return r*r; }
int main()
{ double r;
double area;
r=2.0;
area= s(r);
printf("area=%f",area);
return 0;
}
圖1 函數(shù)調用過程的堆棧變化
自動化過程實際反映了C語言程序解決實際問題的算法流程。算法是解決某一問題的執(zhí)行步驟。一般而言,使用C語言進行編程之前,需要進行相應的算法設計,即構思解決實際問題的思路和步驟。一旦這些步驟變成C語言程序語句并形成一個完整的程序,就可以提交給操作系統(tǒng)自動地執(zhí)行這些步驟,這正是計算機解決問題的高效率的體現(xiàn)。
三、以計算思維為導向的C語言程序設計課程教學
1.教學內容
針對計算思維的抽象和自動化兩大本質特征,C語言程序設計課程的教學內容需要在原有的基礎上特別強調一些針對性的觀點。例如,C語言中的各種數(shù)據(jù)類型和數(shù)據(jù)結構可以完成實際系統(tǒng)中各種不同元素的抽象,一個函數(shù)之中的順序語句自動執(zhí)行的基礎是EIP寄存器的加法操作,多個函數(shù)之間的來回自動跳轉的基礎是內存堆棧區(qū)的支持等。具體強調的觀點如表2所示。
表2 教學內容中需要強調的觀點
C語言程序設計
課程的內容 強調的觀點
C語言概述 程序是對系統(tǒng)的抽象
抽象過程就是C語言的建模過程
自動化過程反映C語言的算法流程
數(shù)據(jù)類型、表達式和語句 操作對象是對系統(tǒng)特征的抽象
語句是系統(tǒng)自動化執(zhí)行的基本對象
控制結構 控制結構是問題求解步驟的抽象
函數(shù)中順序語句自動執(zhí)行的基礎是EIP寄存器的加法操作
數(shù)組 一維數(shù)組是對多個相同類型的一個系統(tǒng)特征的抽象,多維數(shù)組是對多個相同類型的多個系統(tǒng)特征的抽象
函數(shù) 函數(shù)是對系統(tǒng)功能的抽象
函數(shù)調用是功能調用的抽象
函數(shù)之間的來回自動跳轉的基礎是內存堆棧區(qū)的支持
結構體 結構體是對多個不同類型的多個系統(tǒng)特征的抽象
指針 鏈表是多個不同類型的多個系統(tǒng)特征集合的抽象
2.教學方式
計算思維的本質是抽象和自動化。C語言程
序設計課程一般都是面向大一新生,理解抽象和自動化進而培養(yǎng)計算思維,對于還處在計算機學習起點的學生來說是比較困難的。
對于C語言程序來說,抽象過程實際就是運用C語言中各種符號對所描述系統(tǒng)的建模過程,培養(yǎng)抽象的計算思維方式就是培養(yǎng)使用C語言描述實際系統(tǒng)的思維過程。因此,可以通過啟發(fā)式教學方式引導學生思考如何使用C語言中的符號來描述系統(tǒng)??梢蕴岢鲞@樣的一系列問題:C語言中如何描述一個人的身高?如何綜合描述一個人的姓名、年齡和籍貫等?如何描述一個班中所有學生的高等數(shù)學成績?如何描述各路公共汽車站的網(wǎng)狀信息?通過啟發(fā)學生對這些問題的思考,讓學生所學的C語言中的各種符號不再“虛幻”,讓學生真正理解這些符號實際是一種建模元素,每種符號有著其特別的抽象描述能力。
對于C語言程序來說,理解自動化過程必須借助一些形象化的手段。例如,借助于Visual C++ 6.0平臺的單步調試功能,可以形象地演示上述C語言程序的自動化過程,如表3所示。
表3 C語言程序執(zhí)行過程中EIP和ESP寄存器內容的變化
斷點 EIP寄存器內容 ESP寄存器內容 當前棧頂函數(shù)
r=2.0;語句 00401068 0013FF24 main函數(shù)
area=s(r);語句 00401076 0013FF24 main函數(shù)
return r*r;語句 00401020 0013FF18 s函數(shù)
printf("area=%f",area);語句 00401089 0013FF24 main函數(shù)
從表3可以看出,隨著EIP寄存器內容的增加,main函數(shù)中的語句順序自動執(zhí)行,即從語句“r=2.0”到語句“area=s(r)”再到語句“printf("area=%f",area)”。ESP寄存器是另一個重要的寄存器,它始終存放棧頂?shù)牡刂贰kS著main函數(shù)對s函數(shù)的調用開始,棧頂工作函數(shù)由main函數(shù)變化為s函數(shù);當s函數(shù)調用結束后,棧頂工作函數(shù)又由s函數(shù)回到main函數(shù)。
3.考核內容
針對C語言程序設計課程的計算思維培養(yǎng)要求,考核方式上必須從以考查語言的語法知識為主轉變?yōu)橐钥疾閷W生的系統(tǒng)建模能力和算法設計能力為主。
系統(tǒng)建模能力的考查主要針對計算思維的抽象特征。例如,可以給出各種系統(tǒng)特征,考查學生使用數(shù)據(jù)類型進行描述的能力。
算法設計能力的考查主要針對計算思維的自動化特征。當然,C語言程序設計課程中涉及的都是一些如迭代、枚舉和排序等簡單算法。可將這些算法封裝成各種函數(shù)來進行調用,以考查函數(shù)中順序語句的執(zhí)行以及函數(shù)間的伴隨參數(shù)傳遞的跳轉來理解自動化過程。因此,必須以簡單算
法設計和函數(shù)調用為重點考核內容,突出對函數(shù)接口設計和算法流程設計的考核。
參考文獻:
[1] Jeannette M. Wing. Computational Thinking[J]. Communications of the ACM, 2006, 49(3):33-35.
[2] 陳國良. 計算思維[J]. 中國計算機學會通訊,2012,8(1):31-34.
[3] 李廉. 計算思維——概念與挑戰(zhàn)[J]. 中國大學教學,2012(1):7-12.
[4] 張耀文. 基于計算思維的程序設計課程案例教學法研究[J]. 重慶電子工程職業(yè)學院學報,2012,21(3):149-150.
[5] 吳紹兵. 計算思維和程序設計能力的培養(yǎng)[J]. 計算機教育,2011(16):11-14.
[6] 蘇海英. 計算思維理論指導下的程序設計教學改革實踐[J]. 現(xiàn)代計算機,2012(4): 32-34.
[資助項目:北京高等學校青年英才計劃(YETP0382);教育部高教司教改項目(2-2-ZXM-08);北京科技大學重點教改項目(JG2012Z01)]
[責任編輯:余大品]
程序控制之所以能夠在函數(shù)之間進行跳轉,主要依賴于操作系統(tǒng)管理的內存堆棧區(qū)。內存堆棧區(qū)是滿足“后進先出”操作約束的存儲區(qū)。當操作系統(tǒng)開始執(zhí)行用戶提交的C語言程序時,首先開始從main函數(shù)執(zhí)行,main函數(shù)的相關局部變量被壓入棧中;當執(zhí)行到被調函數(shù)時,被調函數(shù)的相關局部變量再次被壓入棧中,程序控制轉移到被調函數(shù),且操作只能對當前棧頂進行,而此時棧頂存儲的就是被調函數(shù)的相關局部變量;而當被調函數(shù)執(zhí)行結束時,被調函數(shù)的相關局部變量從棧中退出,程序控制轉移到main函數(shù)繼續(xù)執(zhí)行,此時棧頂存儲的是main函數(shù)的相關局部變量;當main函數(shù)執(zhí)行結束時,main函數(shù)的局部變量從棧中退出,整個程序執(zhí)行結束。下列程序執(zhí)行時的堆棧變化過程示意如圖1所示。
#include "stdio.h"
double s(double r)
{ return r*r; }
int main()
{ double r;
double area;
r=2.0;
area= s(r);
printf("area=%f",area);
return 0;
}
圖1 函數(shù)調用過程的堆棧變化
自動化過程實際反映了C語言程序解決實際問題的算法流程。算法是解決某一問題的執(zhí)行步驟。一般而言,使用C語言進行編程之前,需要進行相應的算法設計,即構思解決實際問題的思路和步驟。一旦這些步驟變成C語言程序語句并形成一個完整的程序,就可以提交給操作系統(tǒng)自動地執(zhí)行這些步驟,這正是計算機解決問題的高效率的體現(xiàn)。
三、以計算思維為導向的C語言程序設計課程教學
1.教學內容
針對計算思維的抽象和自動化兩大本質特征,C語言程序設計課程的教學內容需要在原有的基礎上特別強調一些針對性的觀點。例如,C語言中的各種數(shù)據(jù)類型和數(shù)據(jù)結構可以完成實際系統(tǒng)中各種不同元素的抽象,一個函數(shù)之中的順序語句自動執(zhí)行的基礎是EIP寄存器的加法操作,多個函數(shù)之間的來回自動跳轉的基礎是內存堆棧區(qū)的支持等。具體強調的觀點如表2所示。
表2 教學內容中需要強調的觀點
C語言程序設計
課程的內容 強調的觀點
C語言概述 程序是對系統(tǒng)的抽象
抽象過程就是C語言的建模過程
自動化過程反映C語言的算法流程
數(shù)據(jù)類型、表達式和語句 操作對象是對系統(tǒng)特征的抽象
語句是系統(tǒng)自動化執(zhí)行的基本對象
控制結構 控制結構是問題求解步驟的抽象
函數(shù)中順序語句自動執(zhí)行的基礎是EIP寄存器的加法操作
數(shù)組 一維數(shù)組是對多個相同類型的一個系統(tǒng)特征的抽象,多維數(shù)組是對多個相同類型的多個系統(tǒng)特征的抽象
函數(shù) 函數(shù)是對系統(tǒng)功能的抽象
函數(shù)調用是功能調用的抽象
函數(shù)之間的來回自動跳轉的基礎是內存堆棧區(qū)的支持
結構體 結構體是對多個不同類型的多個系統(tǒng)特征的抽象
指針 鏈表是多個不同類型的多個系統(tǒng)特征集合的抽象
2.教學方式
計算思維的本質是抽象和自動化。C語言程
序設計課程一般都是面向大一新生,理解抽象和自動化進而培養(yǎng)計算思維,對于還處在計算機學習起點的學生來說是比較困難的。
對于C語言程序來說,抽象過程實際就是運用C語言中各種符號對所描述系統(tǒng)的建模過程,培養(yǎng)抽象的計算思維方式就是培養(yǎng)使用C語言描述實際系統(tǒng)的思維過程。因此,可以通過啟發(fā)式教學方式引導學生思考如何使用C語言中的符號來描述系統(tǒng)??梢蕴岢鲞@樣的一系列問題:C語言中如何描述一個人的身高?如何綜合描述一個人的姓名、年齡和籍貫等?如何描述一個班中所有學生的高等數(shù)學成績?如何描述各路公共汽車站的網(wǎng)狀信息?通過啟發(fā)學生對這些問題的思考,讓學生所學的C語言中的各種符號不再“虛幻”,讓學生真正理解這些符號實際是一種建模元素,每種符號有著其特別的抽象描述能力。
對于C語言程序來說,理解自動化過程必須借助一些形象化的手段。例如,借助于Visual C++ 6.0平臺的單步調試功能,可以形象地演示上述C語言程序的自動化過程,如表3所示。
表3 C語言程序執(zhí)行過程中EIP和ESP寄存器內容的變化
斷點 EIP寄存器內容 ESP寄存器內容 當前棧頂函數(shù)
r=2.0;語句 00401068 0013FF24 main函數(shù)
area=s(r);語句 00401076 0013FF24 main函數(shù)
return r*r;語句 00401020 0013FF18 s函數(shù)
printf("area=%f",area);語句 00401089 0013FF24 main函數(shù)
從表3可以看出,隨著EIP寄存器內容的增加,main函數(shù)中的語句順序自動執(zhí)行,即從語句“r=2.0”到語句“area=s(r)”再到語句“printf("area=%f",area)”。ESP寄存器是另一個重要的寄存器,它始終存放棧頂?shù)牡刂?。隨著main函數(shù)對s函數(shù)的調用開始,棧頂工作函數(shù)由main函數(shù)變化為s函數(shù);當s函數(shù)調用結束后,棧頂工作函數(shù)又由s函數(shù)回到main函數(shù)。
3.考核內容
針對C語言程序設計課程的計算思維培養(yǎng)要求,考核方式上必須從以考查語言的語法知識為主轉變?yōu)橐钥疾閷W生的系統(tǒng)建模能力和算法設計能力為主。
系統(tǒng)建模能力的考查主要針對計算思維的抽象特征。例如,可以給出各種系統(tǒng)特征,考查學生使用數(shù)據(jù)類型進行描述的能力。
算法設計能力的考查主要針對計算思維的自動化特征。當然,C語言程序設計課程中涉及的都是一些如迭代、枚舉和排序等簡單算法??蓪⑦@些算法封裝成各種函數(shù)來進行調用,以考查函數(shù)中順序語句的執(zhí)行以及函數(shù)間的伴隨參數(shù)傳遞的跳轉來理解自動化過程。因此,必須以簡單算
法設計和函數(shù)調用為重點考核內容,突出對函數(shù)接口設計和算法流程設計的考核。
參考文獻:
[1] Jeannette M. Wing. Computational Thinking[J]. Communications of the ACM, 2006, 49(3):33-35.
[2] 陳國良. 計算思維[J]. 中國計算機學會通訊,2012,8(1):31-34.
[3] 李廉. 計算思維——概念與挑戰(zhàn)[J]. 中國大學教學,2012(1):7-12.
[4] 張耀文. 基于計算思維的程序設計課程案例教學法研究[J]. 重慶電子工程職業(yè)學院學報,2012,21(3):149-150.
[5] 吳紹兵. 計算思維和程序設計能力的培養(yǎng)[J]. 計算機教育,2011(16):11-14.
[6] 蘇海英. 計算思維理論指導下的程序設計教學改革實踐[J]. 現(xiàn)代計算機,2012(4): 32-34.
[資助項目:北京高等學校青年英才計劃(YETP0382);教育部高教司教改項目(2-2-ZXM-08);北京科技大學重點教改項目(JG2012Z01)]
[責任編輯:余大品]