時間:2023-07-18 17:24:44
開篇:寫作不僅是一種記錄,更是一種創造,它讓我們能夠捕捉那些稍縱即逝的靈感,將它們永久地定格在紙上。下面是小編精心整理的12篇程序設計的基本結構,希望這些內容能成為您創作過程中的良師益友,陪伴您不斷探索和進步。
關鍵詞:程序設計;數據結構;算法;編碼;調試
中圖分類號:G642文獻標識碼:A文章編號:1009-3044(2009)33-9490-02
The Effective Strategy of Raises the Student Programming Ability
XIAO Han-peng
(The Secondary School of Nanyang, Nanyang 473000, China)
Abstract: This paper analyzes the design disciplines in the computer programming of the status and the knowledge and ability, combined with their many years of computer science teaching practice of teaching computer programming students an effective strategy.
Key words: program design; data structure; algorithm; coding; debugging
計算機科學是一種創造性思維活動,其教育必須面向設計。計算機的本質是“程序的機器”, 只有懂得程序設計,才能懂得計算機,真正了解計算機是怎樣工作的。培養學生程序設計能力對計算機專業的學生來說不僅是培養職業技能的需要,也是培養大學生創造性思維的重要途徑。學習程序設計語言可以培養學生運用算法來解決實際問題的能力,這種解決問題的方式是計算機所獨有的,也只有通過對計算機的程序設計語言和程序設計方法的學習才有可能獲得這種解決問題的能力。
1 程序設計在計算機學科中的地位
程序設計是利用某種計算機語言,編制完成某一特定功能的程序的過程,是涉及描述、開發及有效實現求解的一系列活動,是利用計算機實現自動化的重要手段。
計算機學科主要是系統地研究信息描述和變換的算法過程,包括它們的理論、分析、設計、效率、實現和應用。可以這樣說,一切算法的基本問題是“什么能被自動化”以及“如何有效地自動化”。這個自動化的過程就是程序設計的過程。
程序設計語言是人們學習計算機的最基本的工具,也是人們學習計算機基礎與應用知識的基本課程。通過學習,使學生掌握程序設計的基本概念、基本知識和基本方法,養成良好的程序設計風格,得到一定的程序設計訓練,具備初步編寫程序解決實際問題的能力。程序設計也正是有形表達抽象思維的方法,在程序設計過程中貫穿閱讀判斷、分析思考、工具利用、抽象表達、綜合創造等多項技能,是理論、抽象、設計和應用的綜合能力培養過程。因此程序設計是計算機學科教學的重要內容之一,對計算機專業人才素質的培養至關重要。
2 程序設計的知識和能力構成
根據循序漸進的原則,與程序設計有關的教學內容主要有:計算機基礎知識和操作、程序設計語言和基本的程序設計方法、最基本的數據結構及其基本算法、常用的算法設計方法等。在學習這些知識的同時,必須與能力的訓練有機地結合起來。程序設計能力表現在以下幾個方面:
1)自然語言能力。要有較強的運用自然語言描述現實事物的能力,只有運用背景知識正確且清晰地陳述問題及其求解目標,才能確定程序的功能。
2)數學描述能力。程序設計是為了告訴計算機做什么和如何做。這就需要利用定義、定理、公式、函數等數學工具把問題形式化,建立數學模型。
3)數據結構設計能力。選擇合理的存儲結構,在計算機中表示數學模型,是程序設計的一個重要方面。
4)算法構造能力。好的程序由精心構造的、好的算法構成。給出問題求解的離散化計算過程,是程序設計中最具有創造性的工作。
5)程序編碼能力。用某種程序設計語言表達算法,盡管這種能力往往被認為技術含量不高,但也需要對程序設計語言的熟練掌握和對算法設計的深刻理解。
6)程序調試能力。程序調試能力是一種專業綜合技能,需要對程序設計語言和程序結構有深刻的理解,需要熟練的操作技能,需要會設置測試數據和設置程序斷點,這些都有待于學生在實踐中逐步積累經驗。
可以說,程序設計能力的高低很大程度上反映在駕馭自然語言、數學語言和計算機語言的能力上。這3種語言是人們畢生有用的3種通用智能工具。前兩者是后者的基礎,良好的英語和數學訓練是學好程序設計語言和培養程序設計能力的重要基礎。
3 培養程序設計能力的有效策略
知識的價值在于運用,知識的運用需要技能,而技能的形成則依賴訓練。程序設計知識的學習和能力的培養需要各方面的知識基礎,它是一個系統的教育訓練過程,需要多個教學環節的緊密配合才能完成。
1)明確教學要求
程序設計語言課程一般是為應用性教學而設置的,因此,課程的教學不僅僅是傳授知識,而且應該強調應用性,應該以培養學生的能力為主。程序設計語言的內容比較豐富,在教學中如果面面俱到,必會耗費較多課時,而且教學效果不一定好。因為過分強調程序設計語言的系統性和完整性就可能會轉移學生對課程重點的注意力,關鍵在于教會學生如何正確運用程序設計語言編寫程序,訓練實用編程能力。所以必須突出重點,突出應用性,側重教思想,即把程序設計語言的基本思想、基本環境、基本概念、基本知識和基本方法教給學生,使他們在學習中對硬件、軟件環境、程序設計的基本思想和基本技巧,所學程序設計語言的基本概念和使用方法以及編程技術有一個比較全面的感性認識,從而提高解決實際問題的能力。
2)打好數學基礎。嚴格的數學訓練是程序設計能力的基礎,學習和加強排列與組合、數列、數學歸納法等離散系統的數學方法對提高程序設計能力尤為重要。問題描述和建立數學模型是程序設計的前奏,數學歸納法、窮舉法、構造證明法等證明技巧是算法設計方法的基礎。
3)強化英語水平。程序設計語言的符號系統以英語為基礎,程序設計文檔語言首選英語。英文資料是計算機最新和最大的技術資料來源,英語水平是我國軟件產業發展和參與國際競爭的制約因素。
4)重視閱讀訓練。從某種意義上來說,程序設計是用程序設計語言和方法進行的一種寫作。可以想象,如果學生沒有閱讀過一份完整、規范、有實用價值的標準程序,即使記住了有關語言的語法規則,也不可能寫出像樣的程序。所以,大量閱讀、分析、修改和擴充典型的算法和程序,是提高程序寫作能力的有效途徑。而這個重要學習環節往往未得到應有的重視,缺乏配套的程序設計閱讀分析教材。教師應經常指導學生閱讀程序,理解程序,提高學生分析程序的能力。
5)注重算法設計,突出數據結構內容。瑞士科學家、PASCAL語言和MODULA-2語言的發明者沃思(Wirth)教授提出了著名的公式:程序=算法+數據結構。這個公式表達了程序的實質,說明對于一個程序設計問題來講,算法與程序設計是緊密聯系的,絕不能脫離數據結構去講解算法設計。程序設計語言的教學應該結合數據結構的基本內容。對于同一個計算問題,選用不同的數據結構,其算法大不一樣,算法的優劣程度也不同。因此,要教會學生對不同的問題選擇合適的數據結構。在整個程序設計課程中,必須強調算法設計方法,通過不斷的算法設計訓練,使學生切實掌握迭代、枚舉、遞歸、分類等常用算法設計方法。
6)更新教學內容。計算機學科是一門綜合性學科,而且程序設計語言的應用領域在不斷擴大和發展。因此,在教學中應結合專業的特點和教學的要求,將軟件工程的思想方法貫穿于整個教學過程,介紹程序設計語言的最新發展和應用,重視面向對象程序設計方法的引入,搞好教材內容的更新。如圖形程序設計、下拉式或彈出式菜單、計算機病毒防治等等。這樣不僅能把最新的知識和最新發展動態充實到教學上來,大大豐富了教學內容,而且使學生加深對程序設計語言的理解和掌握,保持對信息技術和專業的興趣,及時跟上信息技術日新月異的發展趨勢,在今后工作中保持領先地位。
7)采用先進教學手段。用傳統的課堂教學方法講授動態的算法和數據結構是十分低效的,像排序、遞歸等抽象動態的內容講解就常常是費力不討好。應該根據課程特點,采用先進的現代教學方法,如直觀教學方法:利用掛圖、教具等講解,以及計算機輔助教學(CAI)和計算機輔助學習(Computer Aided Learning,簡稱CAL)進行教學,通常開發利用與課程內容與教學特點相適應的多媒體課件進行教學。它們是講解算法和進行程序設計訓練的最佳教學平臺,既能增加學習的趣味性,又可利用圖形的直觀性幫助抽象和動態過程的理解。
8)加強實踐環節,強化創造性思維能力培養。在教學中,常常聽到學生提出這樣的問題:“程序設計語言有什么用?”,有的學生還反映:“程序設計語言并不難學,就是不知道如何應用?”一些學生學到了一定的科學知識,但上機動手水平低。這種現象與普遍忽視實踐環節有關。為了扭轉這一局面,在整個教學過程中,必須強調實踐環節的重要性,充分安排上機實踐時間,加強系統訓練和實踐能力的培養,強化創造性思維能力培養。根據課程特點,在教學中,采用案例驅動教學,進行興趣引導;在實踐中,可以精心組織一系列由易到難、由淺入深、配套銜接、結合學科學習、有一定設計技巧的程序設計作業,最后再安排一次綜合性強、有一定難度的課程設計實踐,對學生進行項目訓練,提高學生應用能力。通過上機作業和課程設計的完成,使學生獨立思考,各顯才干,總結經驗,培養他們的動手能力和編程能力,以及分析問題和解決問題的能力。
4 結論
總之,培養學生計算機程序設計能力的方法和途徑很多,但是編程序不難,編好程序不易。作為教師,必須從培養學生編程思維的角度出發,按照以上策略認真進行編程知識的教學和技能的培養,加強實踐,提高學生科學思維的能力,真正學會程序設計的真本領。
參考文獻:
[1] ,王楠.淺談程序設計語言課程教學方法[J].吉林大學學報(信息科學版),2005(S2).
[2] 徐進華.提高學生程序設計能力的幾個措施[J].計算機時代,2005(11).
[3] 李凌.淺談高級語言程序設計課堂教學方法[J].淮北職業技術學院學報,2005(04).
摘要:本文根據高職學生特點,從實際教學經驗出發,分析了高職院校C 語言程序設計教學現狀,并簡單講述了C 語言主要知識點,并提出適合高職學生學習的方法。
關鍵詞 :C 程序高職院校
《C 語言程序設計》是高職院校計算機及電子信息相關專業的重要專業基礎課。該課程主要培養學生模塊化程序設計的邏輯思維能力,使學生掌握程序設計的一般方法和技巧,并鍛煉學生的思維能力和創新意識。
1 C 語言程序設計教學現狀
C 語言是理想的結構化語言,描述能力強。C 語言的教學要求教師具備良好的教學能力和清晰的程序設計思想,也要求學生有一定的邏輯設計能力。一般高職院校的C 語言設置在一年級開設,學生剛剛進入大學,還沒有從高中生的身份完全轉變過來。雖然在高中階段學習了計算機應用基礎課程,但是他們完全沒有程序設計的概念,經過一段時間的學習,覺得這門課很難學、學不會。經過兩個學期的C 語言教學,從實際教學經歷來看,主要的制約因素有以下四個:第一、學生剛進入大學,剛接觸編程語言,對計算機原理理解不深,對編程更是不了解,不具備語言編寫能力。第二、高職學生文化基礎比較差,尤其是數學基礎差,導致學生邏輯思維能力差,而C 語言的學習對這方面能力又有較高的要求,所以對于稍微復雜一點的程序學生就覺得難以理解。第三、英語基礎差,很多高職學生對英語望而生畏,而計算機語言基本都是用英語來實現的,C語言亦是。很多學生看到程序中的英語單詞就頭疼,從心理上就覺得自己學不會C 語言,也就放棄了。第四、很多學生,在上課的時候能聽懂了,但是上機的時候頭腦一片空白,不知從哪里入手編寫程序。部分能夠寫出程序的,也是按照教材或老師所講的例子進行編寫,一旦題目要求有變化,便不會做了。
2 C 語言教學規范
有一簡單C 程序如下:
int main()
{
int a,b,m;
int max(int x,int y);
printf(" 請輸入兩個數值:\n");
scanf("%d,%d",&a,&b);
m=max(a,b);
printf(" 兩個數中較大的為%d\n",m);
return 0;
}
int max(int x,int y)
{
int z;
if(x>y)
z=x;
else
z=y;
return z;
}
該程序的功能是通過鍵盤輸入兩個數值,經過程序的運行,將其中較大的數值進行輸出。該程序簡單,易于理解,但是包含C 語言中很多必須掌握的知識點。簡單介紹如下:
2.1 C 語言程序的結構通過上面簡單例子可以看出,一個C 語言程序的結構有以下特點:①一個程序由一個或多個源程序文件組成。②函數是C 程序的主要組成部分。程序的全部工作幾乎都是由各個函數分別完成的,函數是C 程序的基本單位。在設計良好的程序中,每個函數都用來實現一個或幾個特定的功能。③一個函數包含兩個部分。函數首部和函數體兩個部分構成。基本形式如下:函數類型和函數名(參數類型、參數名稱……)。函數體包含聲明部分和執行部分。聲明部分,定義本函數中所用到的變量。執行部分,指定函數中所進行的操作。④程序總是從main 函數開始執行的。⑤C 程序中對計算機的操作是由函數總的語句完成的。C 程序的書寫格式比較自由,一條語句可以分寫在多行,也可以將多條語句寫在一行。但一般習慣每行只寫一條語句。⑥所有的C 語句的最后必須要有一個分號。⑦C 語言本身不提供輸入輸出語句。輸入和輸出操作是由庫函數scanf 和printf 等函數來完成的。
2.2 掌握C 語言的基本結構大部分的語言都是由順序結構、選擇結構和循環結構三種基本結構構成的,而C語言也不例外。
2.2.1 順序結構。在順序結構中,各語句是按自上而下的順序執行的,執行完上一個語句就自動執行下一個語句,是無條件的,不必做任何判斷,是最簡單的程序結構。
2.2.2 選擇結構。在現實生活中需要進行判斷和選擇的情況很多。比如,從A 城市出發上高速公路,到一個岔口,有兩個方向,一個去B 城市方向,一個去C 城市方向。
駕車者到此需要自己根據自己的目的地進行判斷,選擇其中一個路徑。在日常生活或工作中,類似這樣需要判斷的情況很多。比如:如果考試不及格,要補考;70 歲以上的老人,乘公交免票等等。
程序中,選擇結構是一種重要的程序結構。本文前面的例子中就用到了選擇結構,如果x>y,較大值為x,否則為y。該函數中,采用了if 語句中,雙分支選擇結構。在C語言中有兩種選擇語句:①if 語句;②switch 語句。
①if 語句形式有三種形式
·if(表達式)語句
·if(表達式)語句1
else 語句2
·if(表達式) 語句1
else if(表達式2)語句2
else if(表達式3) 語句3
:
else if(表達式m) 語句m
else 語句m+1
②switch 語句一般形式
switch(表達式)
{
case:常量表達式1:語句1
case:常量表達式2:語句2
: : :
case:常量表達式n:語句n
default:語句n+1
}
2.2.3 循環結構。在日常生活中或是在程序所處理的問題中常常遇到需要重復處理的問題。比如:要向計算機輸入全班50 個學生的成績等。在C 語言中,需要多次重復執行一個或多個任務的問題可以用循環來處理。循環結構有while、do…while 和for 語句來實現。
while 語句:
while(表達式)語句
do…while 語句:
do 語句while(表達式);
for 語句:
for(表達式1;表達式2;表達式3)語句
3 怎樣學習C 程序設計
根據C 語言程序設計課程特點,結合今年來的從教經驗,綜合高職學生特點,C 語言程序設計教學應注意以下幾個方面:
①要著眼于培養能力。C 語言程序設計是一門操作性很強的課程,在教學過程中應該注意培養學生分析問題、構造算法、編程和調試程序的能力。②要把重點放在解題的思路上。初學者不要在語法細節上死記硬背。一開始學習只要能看懂程序,能夠編寫簡單的程序,然后逐步深入。
語法細節可以在后續的學習及長期的時間中掌握。③掌握基本要求,注意打好基礎。在學校學習程序設計,主要學習程序設計的方法,進行程序設計的基本訓練,為進一步學習打下良好的基礎。④重視上機實踐環節。該類課程學的好與壞,不是看你“知不知道”,而是“會不會做”。對程序而言,光靠聽課和看書是學不好的,除了學習本課程要掌握的概念,還要動手編寫程序,上機調試程序。⑤要學會舉一反三。學習程序設計,關鍵是學習程序設計的思路和方法。
學會一種計算機編程語言,在學習另外一種編程語言時應該不會太困難。各種計算機編程語言,其基本規律是一樣的,在學習時一定要學活用活,舉一反三,掌握規律,在后期學習時就:
[1]曹莎莎.C 語言教學研究與思考[J].價值工程,2012(01).
[2]雍全明.C 語言教學改革探索與實踐[J].新余高專學報,2005(02).
摘 要 循環結構是結構化程序設計中的三種基本結構之一,也是程序設計的基礎。但是,對于初學者來說,循環結構與人類日常的思維習慣不同,較難掌握。本文用幾個例子闡述了在《c語言程序設計》課程中循環結構的教學方法,這些方法在日常授課中取得了較好的效果。 關鍵詞 c語言;結構化程序設計;循環結構;效率 1 引言 順序、分支、循環是結構化程序設計的三種基本結構,所以在高級語言程序設計課程中,掌握這三種結構是學好程序設計的基礎。而循環結構是這三者中最復雜的一種結構,幾乎所有的程序都離不開循環結構。在c語言中,循環結構主要是由for和while、do-while語句實現的,其中for語句的應用更為普遍一些。for語句的用法對于有程序設計經驗的學生來說輕而易舉,但是對于那些沒有經驗的初學者來說,難度卻不小。本文從初學者的角度,闡述了c語言中循環結構幾種典型應用的實現方法。 2 用循環結構輸出幾何圖形 輸出簡單的幾何圖形(如圖1),是循環結構的典型應用之一。對于這一類型的題目,初學者往往直接采用一條或若干條輸出語句printf完成,這樣雖然可以完成題目要求,但是很顯然缺乏靈活性,不符合程序設計的思想。按照正常的程序設計思想,應該先分析圖形的構成,找出其中的規律:如圖1(a)中的實心三角形,每一行由若干個空格、星號和一個回車換行符構成,將行號、空格數和星號數分別設為i、m和n,則可以形成下表:
表1 實心三角形的構成表
行號i 空格數m 星號數n 1 4 1 2 3 3 3 2 5 4 1 7 5 0 9 分析表1,可以得出行號i與空格數m、星號數n如下的數學關系: m=5-i,n=2×i-1 則實心三角形的構成規律可以描述為:第i行由(5-i)個空格和(2×i-1)個星號和一個回車符構成。把行號i作為for語句的循環變量,輸出圖形程序的主要部分見程序段1。 采用上面的方法,可以使學生很容易編寫出類似的程序,其中的關鍵在于讓學生找出圖形中行號與每一行的空格數以及星號數的關系(對于圖1(b)、(c)需要把圖形分成幾個部分,再分析其中的構成規律),這需要學生數學方面的知識,非編程本身的范疇了。 for(i=1;i<=5;i++) { /*輸出(5-i)個空格;*/ for(m=1;m<=5-i;m++) printf(“ ”); /*輸出(2*i-1)個星號;*/ for(n=1;n<=2*i-1;n++) printf(“*”); /*輸出回車符;*/ printf(“\n”); } 程序段1 實心三角形的主要程序
3 數組中循環結構的應用
在c語言中,for語句經常與數組相結合,用于實現數組元素的賦值、輸入與輸出。對于初學者來說,更習慣于用順序結構的語句來實現(如圖2左)。我們將圖2左的幾條語句作比較,可以看出在這5條語句中,不同的只有數組下標,那么就可以將這5條語句合并成一條for語句,將數組下標換成for語句的循環變量i,而i的值從0增加到4。按照for語句的基本語法規則可以很容易的寫出圖2右的for語句。
同樣,對于下面這個輸出二維數組元素的例子,也可以用上述辦法實現,不過轉換過程比上例要復雜一些:經過對比圖3左側方框中順序結構的12條語句,可以發現也是只有數組下標在變化,但是由于是二維數組,行下標和列下標同時都在變化,很顯然不能直接用一條簡單的for語句來實現(不是絕對不可以實現,后面將會看到)。但是我們可以把這12條語句細分一下,3條語句為一組,而在同一組中的語句只有列下標在變化,這時可以采用上例中的方法,將列下標都用循環變量j來代替,得到圖3右上的形式。再次對比圖3右上的4條for語句,不同的是行下標,同樣用新的循環變量i來代替,合并后得到圖3右下最終二重for循環的語句。
在上例中,常規的思路都采用二重for循環與二維數組相結合來實現對數組元素的訪問,實際上也可以使用一重for循環來實現:無論如何變化,我們可以先確定的是,輸出語句printf肯定要執行12次,如果用一重for循環,那么循環變量i的值就要從0遞增到11。再分析數組行下標m和列下標n與循環變量i之間的關系,很顯然:i=m*3+n,按照整數除法的思想,行下標m恰好是循環變量i整除3后的商,而列下標n恰好是循環變量i整除3后的余數,即:
m=i/3,n=i%3 從而可以寫出下面的for語句: for(i=0;i<12;i++) printf(“%d”,a[i/3][i%3]); 4 循環結構中的效率問題 對于程序設計的初學者來說,往往以完成題目要求的功能為目的,程序的執行效率是最容易忽略的一個問題。在循環結構中,具體表現為循環體的執行次數。例如,一個經典的素數判定問題。在數學中素數如下定義:素數即指那些大于1,且除了1和它本身外,不能被其它任何數整除的數。根據這一定義,初學者很容易編寫出如下程序段2的程序: int isprime(int n) { int i; for(i=2;i<n;i++) if(n%i==0) return 0; return 1; } 程序段2 判斷素數的程序段 上面的程序,完全可以實現題目要求的功能,初學者往往滿足于此。但是當對for循環的執行次數進行分析時,我們發現:當n不是素數時,沒有任何問題;而當n是素數時,循環體就要執行(n-2)次,而實際上是不需要這么多次的。根據數學的知識,可以將次數降為n/2或n的算術平方根,這樣可以大大減少循環體的執行次數,提高程序的效率。
程序的執行效率是編程中時刻需要考慮的問題,也是程序設計中的基本要求。這需要許多算法方面的知識,對于初學者來說,要求可能過高,但是我們在講授過程中要注意向學生灌輸這種思想,從學習之初就要打下良好的基礎,尤其是類似上面例子中這樣顯而易見的情況,可以提醒學生在編制完一道程序以后,檢驗一下,是否還有可優化的地方,這對以后進一步高級編程的學習都是必要的。 5 結束語 以上這些,都是本人在授課過程中的一些體會,可能比較膚淺,但是從初學者的角度來看,卻是必要的。如何讓一名初學者盡快擺脫日常的思維定式,更加透徹地理解和掌握程序設計中的基本思想,領會程序設計的精髓,是高級語言程序設計這門課程在講授過程中,應該時刻注意的問題。希望本文能在這方面起到一點作用,同時望廣大同仁多多指教。 參考文獻 [1] 譚浩強. c 語言程序設計(第二版)[m]. 北京:清華大學出版社,1999 [2] 蘇運霖譯. 計算機程序設計藝術第1 卷 基本算法[m]. 北京:國防工業出版社,2002
關鍵詞:計算思維;Visual Basic 程序設計;教學
中圖分類號:TP393文獻標識碼:A文章編號:1009-3044(2011)25-6266-03
The Application of Computational Thinking in Visual Basic Programming Teaching
JIA Ru, HAO Chang-sheng, PEI Yi-fei
(The Engineering and Training Center, Inner Mongolia University of Science & Technology,Baotou 014010, China)
Abstract: Computational thinking is widely becoming a hot spot in computer education nowaday.In order to cultivate and train the college students' ability of computational thinking & the computational ability better, computational thinking is applied in Visual Basic Programming Teaching.It is a new teaching reform which will provide a good example for the teaching of other computer education.
Key words: computational thinking; visual basic programming; teaching
目前,計算思維的培養成為國際和國內計算機教育界關注的熱點。在我國,2010年《九校聯盟(C9)計算機基礎教學發展戰略聯合聲明》的核心要點也強調“需要把培養學生的‘計算思維’能力作為計算機基礎教學的核心任務”。而且從國家層面上講,大學計算機基礎教育這門課程的定位就是基礎課程,也就是與數學、物理同地位的基礎課程[1]。既然它是基礎課程,課程的教學方法和教學理念就應該像數學與物理一樣,將學科的基本理論、基本思維講給學生。計算和計算思維是計算機基礎課程的基本理論和基本思維,科學家已將計算思維和理論思維、實驗思維并列為人類三大科學思維[2] ,為此,就應該將計算思維的基本概念和基本理論講授給學生。因此,在大學計算機基礎教育中強調和深化“計算思維”的培養,既有助于計算機基礎教育學科的健康、持續發展,又有助于國家戰略型人才的培養。
“Visual Basic程序設計”是大學計算機基礎課程的重要分支,也是許多高校非計算機專業進行計算機基礎教育的重要課程之一,該課程的目標:學習問題求解的思路和方法即算法,理解計算機是如何具體實現算法即如何有效利用計算機編程,最終通過該課程的學習提高廣大學生的計算機操作使用能力、應用開發能力、研究創新能力以及計算思維和計算能力。也就是說,培養和訓練大學生計算思維不僅是計算機基礎教育的現實要求,更是Visual Basic程序設計的課程要求。
1 計算思維
國際上廣泛認同計算思維的定義來自美國卡內基?梅隆大學周以真(Jeannette Wing)教授。周教授認為,計算思維(Computational Thinking)是運用計算機科學的基礎概念(即思想和方法)進行問題求解、系統設計,以及人類行為理解的涵蓋計算機科學之廣度的一系列思維活動,它不僅屬于計算機科學家,它應當是每一個人的基本技能[3]。計算思維是建立在計算過程的能力和限制之上,由人由機器執行。計算方法和模型使我們敢于去處理那些原本無法由個人獨立完成的問題求解和系統設計[4]。計算思維的本質就是抽象和自動化,即如何按照計算機求解問題的基本方法去考慮問題的求解,以便構建出相應的算法和基本程序。
計算思維是一種具有普遍性的科學思維方法,依據周教授的觀點,它包含如下主要內容:
1) 通過簡約、嵌入、轉化和仿真等方法,把一個看來困難的問題重新闡述成一個我們知道問題怎樣解決的思維方法;
2) 是一種遞歸思維,是一種并行處理,是一種把代碼譯成數據又能把數據譯成代碼,是一種基于多維推廣的類型檢查方法;
3) 是一種采用抽象和分解來控制龐雜的任務或進行巨大的任務系統設計的方法,是一種基于關注點分解的方法(Seperation of Concerns,簡稱SoC方法);
4) 是一種選擇合適的方法陳述一個問題,或對一個問題的相關方面建模使其易于處理的思維方法;
5) 是按照預防、保護及通過冗余、容錯、糾錯的方式,并從最壞情況進行系統恢復的一種思維方法;
6) 是利用啟發式推理尋求解答,也即在不確定情況下的規劃、學習和調度的思維方法;
7) 是利用海量數據來加快計算,在時間和空間之間,在處理能力和存儲容量之間進行折衷的思維方法。
2 以“計算思維”為線索展開“Visual Basic程序設計”教學
思維方法比知識本身更重要。既然計算思維是一種問題求解的基本思維方法,作為從事計算機基礎教學的一線教師就應該切實地在日常教學中潛移默化地訓練和培養學生的計算思維能力,提高他們的計算思維素養,進而培養和鍛煉他們的創新能力。
2.1 以“計算思維”為線索展開“Visual Basic程序設計基礎”教學
Visual Basic程序設計基礎就是Visual Basic語言。正像自然語言的產生是人類社會活動發展的客觀要求和必然結果,同樣,計算機語言的產生和發展則是人類使用計算機的客觀要求和必然結果。從計算機語言的基本語法到其整體結構,都滲透著許多計算思維。因此,以“計算思維”為線索展開“Visual Basic程序設計基礎”教學就是:在講解相關知識點的同時也要講授其中所反映的計算思維,通過思維強化知識,通過知識培養思維;這樣,既有利于語言本身的學習,又有助于學生計算思維能力的培養。
例如,人們利用計算機就是為了處理信息數據,而不同類型的信息數據,其表達方式不盡相同,其處理方式也會有所不同,那么,計算機是如何實現信息數據的表示、存儲和處理?這其中蘊含的計算思維又是什么?首先,根據馮?諾依曼計算機體系結構:從軟件方面考慮,可通過聲明或定義不同類型數據以表示不同類型的信息;從硬件方面考慮,可通過存儲元件可實現信息數據的存儲,不同類型的數據占用不同長度的存儲單元。可僅僅完成信息數據的表示和存儲是遠遠不夠的,如何真正實現數據處理?由此便產生了計算機語言,即利用計算機語言編寫的數據處理程序指揮CPU(中央處理器)完成相應的數據處理。這個通過人、機共同努力完成的“問題求解”過程,就是一個計算思維的實現過程,如圖1所示。
顯然,實現這樣一個信息處理的計算思維,是需要計算機語言的技術支持:即數據表示(數據類型)、數據存儲(變(常)量)和數據處理(表達式和控制結構),并由此引出Visual Basic語言基礎知識的學習。
2.1.1 數據表達
數據表示――數據類型
例如,根據現實生活中不同的信息數據如文本型、數值型、邏輯型、日期型、貨幣型等,Visual Basic語言便提供了相應的數據類型:String型(字符型)用于表示文字信息,所占用的內存空間最多可達20億字節;Numeric型(數值型)用于表示數值信息,表示范圍越大、精度越高的數據類型所占用的存儲空間也越大,如Byte型(字節型)、Integer型(整型)、Long型(長整型)、Single型(單精度型)和Double型(雙精度型)、Currency型(貨幣型)6種基本類型,它們所表示的數據范圍和精度依次增大;Boolean型(邏輯型)用于表示邏輯判斷的信息,如對/錯、是/否、真/假等,占用2個字節的存儲空間;Date型(日期型)用于表示日期、時間信息,一般占用8個字節的存儲空間;Variant型(變體型)是一種特殊的數據類型,可用于表示任何信息,占用的存儲空間靈活;Object型(對象型)用于表示任何類型的對象,一般占用4個字節的存儲空間。
數據存儲――變(常)量
這些不同類型的數據在計算機具體處理時,一般都被放在一定的內存單元中,但為了進一步高效地使用系統資源快捷地處理這些數據,用戶需要指定這些內存單元,于是Visual Basic給我們提供了變(常)量,即用戶通過聲明或定義相應數據類型的內存單元的符號地址,CPU就可根據這些符號地址準確地存取數據,進而進行相應的運算。
2.1.2 數據處理
簡單的數據處理――表達式
Visual Basic在充分利用CPU運算功能的基礎上,提供了針對不同類型數據采用不同的計算方式――表達式,它是一種最基本的數據計算方法,主要有算術表達式(完成數值型數據的計算)、字符串表達式(完成字符型數據的計算)、關系表達式(完成數據的比較計算)、邏輯表達式(完成邏輯型數據的計算),并由此實現對數據的初級、簡單處理。
復雜的數據處理――控制表達
在日常的信息數據處理過程中,常常需要根據不同條件,實現對數據靈活多樣的處理,顯然,基本表達式難以直接實現,于是基于這一客觀需要,計算機語言便產生了控制表達,即根據條件完成相應的計算,如語句級控制(如分支、循環)和模塊級控制(如函數)[5]。
語句級控制的結構有條件語句控制和循環語句控制。條件語句控制結構主要有:If條件分支和Select條件分支,循環語句控制結構主要有:For條件循環和Do條件循環。
模塊級控制,對于Visual Basic語言而言,就是過程級控制。Visual Basic將一個工程分為多個模塊(也稱文件),每個模塊中的代碼又分為相互獨立的多個過程(Procedure)。過程就是具有一定語法格式、完成一個相對獨立任務的語句段。在同一個工程中的各過程在代碼上相互獨立,但功能上相互聯系。過程級控制的結構主要有兩種:系統內部過程(內部函數過程、事件過程)和自定義過程(用戶根據自己需求設計的過程)。
2.2 以“計算思維”為線索展開“Visual Basic程序設計”教學
簡單的計算機語言支持,可以完成簡單的數據處理,但對于復雜、大量的數據處理,則需要一定的處理方法,這便是程序設計方法。當前,影響最大、使用最廣泛的程序設計方法主要有兩種:面向過程程序設計方法也稱結構化的程序設計方法(Structured Programming)和面向對象程序設計方法(Object Oriented Programming)。Visual Basic語言既可以實現面向對象也可以實現面向過程的程序設計。面向過程程序設計是一種傳統的程序設計方法,面向對象程序設計方法是一種全新的、當前比較流行的程序設計方法,但不管是哪種程序設計方法都是值得學習和借鑒、并能有效解決實際問題的計算思維方式。以“計算思維”為線索展開這部分內容的教學就是將程序設計實現問題求解所體現的計算思維講授給學生,即“方法”隨著“思維”的講解而展開,“思維”隨著“方法”的貫通而形成,“能力”隨著“思維”的理解和訓練而提高,最終使學生真正掌握基于計算技術/計算機的問題求解思路和方法,并逐步培養他們相應的計算思維和計算素養,提高他們的計算能力,進而為他們日后所從事的研究和工作開拓思路、大膽創新奠定基礎。
2.2.1 面向過程的設計方法
面向過程的設計方法所強調的計算思維:程序功能的實現主要由過程(或函數)完成實現。在程序中接收或者定義各種數據,然后通過過程(或函數)對數據進行操作,最后將結果輸出或返回。面向過程設計方法的特點是將數據結構和過程(或函數)作為兩個實體對待,程序設計范型的主要特征:
程序=數據結構+算法
程序中數據結構和過程的分離,造成了程序的可重用性差,程序維護代價高,因此,面向過程的設計方法更適用于功能和數據結構及其關系都不復雜的問題求解。
Visual Basic系統提供了豐富的內部函數、事件過程,而且用戶還可根據需要自定義實現一定功能的過程(也稱子過程或函數)。無論是系統提供的還是用戶自定義的各子程序之間可以彼此獨立,亦可相互聯系、相互調用,形成了結構化明顯的程序結構,其中充分體現了結構化的計算思想:
1) 自頂向下、逐步求精
在進行程序設計時,先把對問題的處理(算法)粗分成幾個步驟,叫模塊。然后對每個模塊再細化為幾個小模塊,每個小模塊再細分為若干個更小的子模塊,直到每個小模塊功能直接用語言來實現為止。這種逐步細化的計算思維方式,使得程序結構清晰,便于日后維護和修改。
2) 模塊化
整個程序就是由幾個大模塊構成,各個大模塊又是由功能相對獨立的模塊組成,每個模塊只能有一個入口和一個出口與外界聯系。這種清晰的程序結構,既便于機器實現功能,又便于設計者的設計,同時還便于程序的調試、修改和維護。
3) 三種基本結構
整個程序中的大小模塊僅由順序、選擇和循環三種基本控制結構組成。這三種基本控制結構都是單入口和單出口,它們可以任意組合、嵌套,可構造各種功能復雜的大結構,且又能保證每個模塊結構清晰、層次分明,致使整個程序結構也很清晰。清晰的結構提供了清晰的問題求解方案。
2.2.2 面向對象程序設計方法
面向對象程序設計方法體現的計算思維:通過操作對象完成需要的功能,對象包括各種數據和方法,方法就是對數據進行操作,然后將得到的結果輸出或返回。面向對象程序設計是一種圍繞真實世界的概念來組織模型,它采用對象來描述問題空間的實體,強調從問題域的概念到軟件程序和界面的直接映射,因此,它更接近于人的自然思維[6]。面向對象程序設計這種新型程序設計范型的主要特征是:
程序=對象+消息
其中,對象是程序的基本元素,傳遞消息是基本操作。具體體現在這些方面:程序一般由類的定義和類的使用兩部分組成,在主程序中定義各對象并規定它們之間傳遞消息的規律;程序中的一切操作都是通過向對象發送消息來實現,對象接收到消息后,啟動有關方法完成相應操作;類由繼承關系產生相互間聯系。一個程序中涉及到的類,可由程序設計者自己定義,也可使用現成的類(包括類庫中的類或他人已建好的類),盡量使用現成的類是面向對象程序設計范型所倡導的思維方式。
面向對象程序設計方法一般包含如下四個基本步驟:
1) 系統調查和需求分析
2) 面向對象分析OOA(Object Oriented Analyzing)
3) 面向對象設計OOD(Object Oriented Designing)
4) 面向對象實現OOP(Object Oriented Programming)
在這樣的理論框架[7]指導下,在具體教學中,將面向對象程序設計的計算思維的核心概括為:一個中心即以對象為中心、兩個基本點即前臺設計和后臺設計,這里的前臺主要指用戶界面,后臺主要是程序代碼,但無論是前臺還是后臺都是圍繞對象展開,并由此幫助學生逐步構建面向對象程序設計方法的計算思維,進而用之解決具體實際問題,尤其是在開發功能較為復雜的大型系統,面向對象程序設計方法將是一種簡潔方便、高效的求解方案,不僅如此,還應啟發和鼓勵學生并創造性地運用這種面向對象的計算思維解決現實生活中的多種問題。
3 總結
以“計算思維”為線索展開“Visual Basic程序設計”教學,就是將程序設計中所體現和涉及的計算思維,通過日常教學予以精講、明講、透講,然后再啟發學生利用這些計算思維自主解決實際問題,幫助他們從中領悟“什么是計算思維?如何應用計算思維解決問題”,并在解決問題中自主建構自己的計算思維、鍛煉自己的計算能力,進而為他們將來的研究、工作和學習中具有創新思維和創新能力夯實基礎。
當然,以“計算思維”為線索展開“Visual Basic程序設計”教學,作為一種教學改革和教學嘗試,需要進一步完善,特別是,隨著對“計算思維”理論知識與實踐知識認識的深化,將會更好地指導教學實踐,真正培養學生的計算思維和計算素養,提高他們的計算能力。
參考文獻:
[1] 陳國良, 董榮勝. 計算思維與大學計算機基礎[J]. 中國大學教學, 2011(1):7-11.
[2] 朱亞宗. 論計算思維[J]. 計算機科學, 2009,36(4):53-55.
[3] Jeannette putational Thinking[J]. Comminications of the ACM,2006,49(3):35.
[4] 董榮勝. 計算思維與計算機導論[J]. 計算機科學, 2009,36(4):50-52.
[5] 何欽銘, 顏暉, 等. “程序設計基礎”課程教學實施方案[J]. 中國大學教學, 2010(5):62-65.
2010年,四川省正式實施新課程改革。高中信息技術課程分為必修和選修兩個部分,選修模塊有三個。由于剛開始實施新課改,許多學校對于選修模塊還不熟悉,筆者在查閱大量資料,并借鑒其他省市的課改經驗后,發現有很多學校選修《算法與程序設計》,于是對此模塊進行了深入學習,認真分析教材,從多方面了解教材。《算法與程序設計》內容枯燥、嚴謹,學生又缺乏相關的知識背景,在高中階段開展難度大,教學課時不夠,學生易產生畏維情緒,筆者認為可從知識結構上重組教材、分散難點,從激發學生學習興趣出發,以有趣的實例結合理論,講練結合。經過一年的實踐,教學效果顯著,所任教班級均取得了優異的成績。
筆者選用的是廣東教育出版社出版的《算法與程序設計》,下面將與大家一起探討對開展本模塊的認識以及對教材內容的研究。
一、本模塊學習目的
1.1使學生在原有基礎上進一步體驗算法思想,了解算法和程序設計在解決問題過程中的地位和作用;
1.2能從簡單問題出發,設計解決問題的算法;
1.3能初步使用一種程序設計語言編制程序實現算法解決問題。
二、本模塊設計思路
“算法與程序設計” 以“問題解決和程序設計”為主線,對“3個主題”內容重新建構,以“分析問題-確定算法-編寫程序-調試程序”的邏輯線索呈現學習內容。學習算法與程序設計是為了讓學生理解問題解決過程中采用的思想和方法,掌握常用的算法,建構問題與算法之間的關系,歸納算法思想與程序設計方法的一般規律。
三、本模塊開設的意義
新課改關注的是技術能力與人文素養的雙重建構,既是信息素養培養的繼續,又是支持個性發展的平臺。對于《算法與程序設計》選修課程,個人認為是非常重要的選修課程。印度軟件產業成功的秘密就在于印度的IT職業教育培養了大批高質量軟件人才。振興中國軟件產業需要培養大量的IT人才,程序設計教學就是為培養這樣的人才打下良好的基礎,也是學生創新能力培養的重要途徑之一。
四、本模塊的優勢與劣勢
優勢:對機器和軟硬件的要求不高,知識體系比較系統成熟,教學和考核目標比較明確。
劣勢:對學生信息素養和信息技術的基礎知識的要求較高,對學生的數學素養和邏輯思維能力要求也較高,容易使學生產生畏難和恐懼心理,對教師的要求也相應較高。由于算法及編程知識相對枯燥且學生接受能力有差別,不易引發其學習興趣,這就對教學的推進產生一定困難。
五、本模塊的教學把握
在高中階段學習程序設計畢竟不同于專業訓練,并且程序設計語言的變化也非常快,因此我們只要掌握程序設計的基本知識與一般規律。在教學中要注意持續保持學生的學習興趣和積極性,教學設計和舉例都盡可能結合學生學習和生活中遇到的和熟悉的問題,也可以多聯系一些數學和其它學科方面的知識,培養學生理論結合實踐的能力和綜合應用能力。
當然,我們更要注意發現和培養對程序設計有特殊才能的學生,給他們提供充分的發展空間。
六、本模塊的知識結構及教學過程
本模塊由3個主題組成,結構如下:
6.1計算機解決問題的基本過程
6.1.1 內容標準
(1) 結合實例,經歷分析問題、確定算法、編程求解等用計算機解決問題的基本過程,認識算法和程序設計在其中的地位和作用。 (2) 經歷用自然語言、流程圖或偽代碼等方法描述算法的過程。(3) 在使用計算機解決實際問題的過程中,通過觀看演示、模仿、探究、實踐等環節,了解順序、選擇、循環三種基本結構及其重要作用,掌握計算機程序的基本概念,能解釋計算機程序執行的基本過程。(4)了解程序設計語言、編輯程序、編譯程序、連接程序以及程序開發環境等基本知識。
6.1.2 課時安排
6.1.3 教學建議
教材第一章算法概念抽象難懂,過多的課堂講解會起反作用,因為學生一旦聽不懂或覺得太枯燥,就可能抑制他們對這門課的學習興趣。在教學中可采用“游戲導入”方法,可以選“猜數游戲”作為切入點,對游戲與教學進行有益的嘗試。以教電腦玩“猜數游戲”作為主線,通過生生之間、人機之間相互玩猜數游戲的活動,將計算機擬人化,激發學生學習程序設計的興趣。
6.3 算法例舉
6.3.1 內容標準
(1)解析法與問題解決
(2)窮舉法與問題解決
(3)查找、排序與問題解決
關鍵詞: 《C語言程序設計》 程序案例 計算思維 流程圖
1.引言
《C語言程序設計》課程的實踐性是很強的,理論聯系實際是這門課的特點,怎樣利用所學理論知識解決實際問題是學習這門課的重點,也是難點。多年的教學實踐表明,在教學過程中使用計算思維的方法解決問題,對培養學生的綜合應用能力是有益的,通過使用流程圖描述算法,學生將更好地理解和掌握結構化程序設計方法。
2.教學中充分調動學生學習的積極性
學生只有對C語言程序有濃厚的興趣,才會積極和創造性地學習。可從以下幾個方面探討:
(1)強調學生學習C語言的重要性。突出教學重點,使學生明確學習任務。在首次課堂教學中,教師一定要向學生講解清楚C語言課程的教學目標(為什么學習編程或程序設計)。對于C語言程序設計課程的教學目標,可有如下三方面的講解,學習基本的編程知識、培養求解問題的能力和具備一定的創新素質。知識的傳授和學習應融入問題求解中;問題求解能力是創新的基礎。
(2)結合《C語言全國計算機等級考試》的試題庫進行教學,學生學習起來更有動力。試題庫包括筆試試題庫和上機試題庫。試題庫按章節分類,題目類型以程序設計為主。筆試題型有單項選擇、程序分析、程序填空、程序改錯和程序設計,上機題型有程序改錯、程序填空和程序設計。
(3)利用Visual c++6.0工具進行C語言程序教學,培養學生的學習興趣。VC是一種基于Windows操作系統的可視化集成開發環境,是廣泛使用的一種開發工具。VC程序的兩種模式是WINAPI方式和MFC方式。應用這兩種模式能夠有效提高教學質量,激發學生的學習興趣。
3.教學內容的設置
上課內容安排不盡合理,對于實踐教學環節重視不夠,難以提高學生的積極性。教師應理論聯系實際,注重編程實現的示范性,讓學生清楚地看到教師編寫代碼和程序調試的過程和運行結果。上課安排內容應包括兩部分:一部分為學習基本知識,對基礎知識的理解和掌握。另一部分是理論聯系實際,對實際案例問題的分析引導學生,并且案例留有思考空間,使學生舉一反三,培養學生創造性思考的能力。比如在第一次課告訴學生C語言的十四種語句,既讓學生對C語言有全面的認識,又消除學生對C語言的畏難情緒。C語言的語句概括起來只有十四種,即定義變量語句、賦值語句、返回語句、函數聲明語句、函數調用語句、分支(選擇)語句(共三種分支語句)、循環語句(共三種循環語句)、break語句、Conitnue語句和復合語句。所有的C程序,都是由其中的某些語句組成的。在具體介紹這些語句的時候,一定要完整清楚地列出各種語句的語法格式。以后講C程序的時候,會提問學生這個程序中包含哪些C語句,學生比較容易看明白C程序的語句組成,幫助學生很快讀懂程序,有利于改正學生編寫程序時的常見語法錯誤。
4.實驗指導書建設
學習C語言的很多學生都認為概念易懂,程序難寫,其實主要是缺乏足夠的實踐和練習。依據主教材結構和實際需要,上機課結合課本《C語言程序設計上機指導》進行相關和有趣的案例的程序運行。學生分析算法、畫出流程圖到寫出程序,并親自運行出結果,會給學生很大的成就感。要將計算思維的方法應用到程序設計,設計各種算法以實現功能,并拓寬思路,掌握C語言的概念和編程方法。
5.案例設計與計算思維相結合
學習C語言,目的不是僅僅懂得一門程序設計語言,更重要的是讓學生的編程思維得到鍛煉和提高。C語言學習分成以下三個循序漸進的部分:第一部分是入門,主要介紹C語言程序的基本結構、數據的表達方式、基本表達式語句、C語言程序的運行方式等。這部分可以設計由簡單表達式語句組成的按順序執行的程序。第二部分是程序的基本結構,主要介紹程序設計的簡單算法表示方法,分支結構和循環結構。這部分能用計算思維的方法,設計簡單的算法,根據算法編寫程序,掌握思考問題和解決問題的方法。第三部分是程序設計方法和手段的提高,主要介紹程序的模塊化實現方法和更多的程序設計方法。這部分能采用計算思維的方式掌握模塊化的程序設計方法,對問題進行分解,靈活地使用指針、結構、文件、位運算等方法編寫程序。
6.案例設計實例
編寫程序計算學生年齡的遞歸函數:已知第一位學生年齡最小為10歲,其余學生一個比一個大2歲,求第5位學生的年齡。分析得到的遞歸公式如下:
age=10(n=1)age(n-1)+2(n>1)
在遞歸公式中,使用數字1為回歸的條件,使用IFELSE語句決定是遞推還是回歸。
根據問題得出流程圖和程序為:
只有寫出遞歸算法的數學公式,才能編寫出遞歸函數,從而很容易根據遞歸問題描述寫出遞歸公式,進而寫出遞歸程序。
7.結語
“基于問題求解的C語言”教學模式,隨著我國計算機技術的應用和發展,為了適應社會的需求,培養學生解決問題的能力,增強學生自主能動性和動手操作能力,讓學生成為社會的技能型人才,都是有益的。實踐證明,借助流程圖表達算法,能讓學生更好地理解結構化程序設計的思想,更好地掌握C程序設計的核心方法。
參考文獻:
[1]李麗娟.C語言程序設計教程實驗指導與習題解答[M].北京:人民郵電出版社,2013.
[2]譚浩強.C程序設計[M].北京:清華大學出版社,1999.
[3]魏書堤,趙輝煌,鄧紅衛.基于計算思維的C語言教學案例設計[J].當代教育理論與實踐,2014(3).
[4]但志平,汪東,王安慧,任小燕.地方高校C語言教學改革的探討與分析[J].教育教學論壇,2014.5.
關鍵詞:高級程序設計;專業課程;教學
中圖分類號:G642 文獻標識碼:B
“高級程序設計”是一門重要的計算機專業課程,目的是通過對面向對象程序設計思想的把握,培養學生掌握用計算機分析問題、解決問題的思維方式。但是由于該課程內容非常抽象,且實踐性特別強,對于初學者來說難度較大。同時由于課時限制,Console控制臺環境下的簡單實例難以體現出面向對象的優勢,基于語法的講解讓人感到乏味,許多學生覺得程序設計本身枯燥、難懂,高深莫測。以至于課程結束時,大部分同學對語法實現沒有問題,但面對實際問題卻不知道如何下手。如何在短時間內建立學生的興趣,培養解決實際問題的能力,是工科教學中永恒的話題。
計算機的課程體系本身是一個整體,所有課程的結合都是為了理解并充分利用計算機這一現代化工具。在教學中,將各門課程分開是為了簡化,但在理解時仍應將相關概念、應用領域相結合。在教學中我們發現,學生們剛開始接觸程序設計時,對變量定義、指針分配、數組訪問等的理解就比較困難。他們知道用變量來存取數據,但很少關心這個數據究竟存放在內存的什么地方,為什么指針必須先初始化才能使用。這時,不妨給學生講授一些內存訪問的基本知識,讓他們建立起變量、指針與地址的對應關系。現在的問題是,教師對于程序設計多是從語法上加以講解,對于程序的運行效率、應用領域、編程風格極少涉及,許多概念都是在后續專業課的學習后才逐步理解,這給程序設計的初學者帶來了很大的障礙。如果在教學中以面向對象的應用為基礎,以程序設計為主線,在重點介紹程序設計方法的同時將各門專業課知識融入其中,將會使學生從程序設計應用的視角來理解這些專業概念,從而在解決實際問題時靈活應用;消除對程序設計課程的枯燥感,達到事半功倍的效果。
1 “高級程序設計”的課程定位
隨著電子技術和芯片設計工藝的發展,計算機硬件一直按照摩爾定律發展,每18個月翻一番,處理速度越來越快,價格成本越來越低,從價值不菲、主要用于科學研究的大型計算機到現在人們日常工作生活中隨處可見的個人PC。程序設計的目的就是為了充分利用這一現代化的工具,可靠、高效地完成任務,因此程序設計其實是一種人機交互的方式,簡言之,就是用計算機能夠“理解”的語言,告訴它去執行某項任務。當然,這個“理解”需要編譯器的支持,將高級程序設計的語法描述進行編譯、連接等,變成計算機硬件能夠執行的機器碼,具體編譯的細節在編譯原理課程中有重點的介紹。
程序設計是一種語言表達,目的是為了人與計算機之間的溝通。因此程序設計通常有兩方面的特點:對于程序設計者,希望能夠精練、高效地說明問題;對于計算機,希望語言描述準確,不會出現二義性。通過程序設計解決一個具體問題時,大致需要經過下列步驟:首先從具體問題中抽象出一個適當的數學模型,然后設計出解此數學模型的算法(Algorithm),該算法與數據結構密切相關,最后編寫程序、進行測試、調整優化直至得到最終解答。尋求數學模型的實質是分析問題,從中提取操作的對象,并找出這些操作對象之間的關系,然后用數學的語言加以描述。
另外,用程序設計解決問題時,需要充分、高效地利用現有的計算機資源。對于匯編語言程序設計來說,通常直接編寫底層的硬件驅動及管理程序訪問資源;對于C+ +面向對象的程序設計來說,通常立足于計算機硬件、操作系統的基礎之上,在編寫用戶應用程序,如常用的各類工具軟件、Office系列等時,通常借助操作系統提供的API(application programming interface)函數來訪問資源,如用Create Window()來創建一個窗口,用getchar()來獲取鍵盤上的一個按鍵值等。操作系統的作用是管理全部的硬件資源、軟件資源及數據資源,并提供相關的API函數為程序設計者調用。
2操作系統:計算機資源的管家
計算機可以管理哪些資源呢?操作系統告訴我們,總共要管理4種資源:(1)CPU資源:進程管理,處理機調度;(2)內存資源:存儲管理;(3)I/O接口資源:外部設備管理;(4)文件資源:文件管理。如果需要訪問計算機資源,通常利用操作系統所提供的豐富的API函數來實現,而無需寫驅動程序直接對資源進行訪問,應用程序對操作系統的函數調用過程如圖1 所示。
箭頭①表示操作系統能夠管理系統資源,控制輸入輸出設備的工作,如文件存取、輸出顯示、聲卡發聲等;箭頭②表示操作系統能夠感知輸入設備的狀態變化,如鼠標移動、鍵盤按下,并且能夠感知鼠標移動的方向,具體按下的鍵值。設計應用程序需要利用輸入輸出設備或其他計算機資源時,并不是由應用程序直接訪問,而是借助操作系統。箭頭③表示程序設計時可以通知操作系統執行某個具體的動作,如操作系統能夠控制聲卡發出聲音,但它并不知道應該何時發出何種聲音,需要通過程序設計告知操作系統。箭頭④表示操作系統能夠將輸入設備或其他資源的變化傳遞給應用程序。如用戶在某個程序活動時按了一下鍵盤,操作系統能夠馬上感知這一事件,但并不決定如何作出反應,而是將這一事件轉交給應用程序,由應用程序決定執行何種反應。
理解了操作系統和應用程序的關系后,對于面向對象程序設計中如何調用現有計算機資源或創建新的應用,就有了十分明晰的思路。
3算法:程序設計的靈魂
在程序設計中,運行效率通常是一個決定性的指標,而程序運行是否高效,很大程度上取決于能否編寫出高效的算法。比如在游戲世界中,一只妖怪盯上了目標,并且它足夠聰明,會選擇一條最短路徑向目標殺過去。為什么這只妖怪那么聰明?這就是尋找最短路徑算法的魔力。
算法是指完成某個特定任務所需要的具體步驟和方法。在程序設計領域,算法表現為一系列解決問題的清晰指令,對一定規范的輸入,能夠在有限時間內獲得所要求的輸出,中國古代的珠算口決及其執行規則就是算法的雛形。算法是計算機處理信息的本質,因為程序就是用算法告訴計算機按照確切的步驟執行指定的任務,如計算職工的薪水或打印學生的成績單等。程序設計中的算法應用通常分成三個階段:分析問題、設計算法和實現算法。
算法設計的基本方法有遞推法、遞歸法、窮舉法、分治法、迭代法等。目前被設計出來而且應用廣泛的算法有很多,如演化算法、蟻群算法、貪婪算法、遺傳算法和一些常用的排序算法等,每一種算法都對應著多種不同的應用。如在同一個動畫頁面中,近處的對象會擋住遠處的對象,可以通過對不同的對象進行坐標排序,然后按由遠到近的順序排放而實現。常用的排序算法有四種:選擇排序、插入排序、冒泡排序和快速排序。下面是N個元素的冒泡算法C++程序實現。
template < class T >
void bub_sort( T a[], int n )
{
int i,j,last;
i = n - 1;
while( i > 0 )
{
last = 0;
for( j = 0; j < i; j++ )
{
if( a[j+1] < a[j] )
{
T temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
last = j;
}
}
i = last;
}
}
算法中將每個元素想象成一個泡泡,從最底部的元素開始,將各相鄰的元素進行比較,若下面的元素大于上面的元素時,則把它們的值進行交換,即較大的元素“往上冒泡”。如此循環N-1次,即可實現從大到小的排序。
當然,算法只是解決某類問題的步驟或方法,同一個算法可用不同的程序設計語言實現,而且能夠根據不同的應用目標加以約束和優化。算法設計與數據結構密切相關,算法無不依附于具體的數據結構,數據結構直接關系到算法的選擇和效率,在面向對象的程序設計中,二者是一個整體,不可分割。
4數據結構:數據資源的管家
數據結構是計算機存儲、組織數據的方式。討論數據結構必須同時討論在該類數據上執行的算法才有意義,通常情況下,精心選擇的數據結構可以帶來最優效率的算法。不同種類的數據結構適合于不同種類的應用,而部分甚至專門用于特定的作業任務。在程序設計中,根據不同的應用需要,可以選擇不同的數據結構。
如果有一堆相似數據需要管理,通常會選擇線性表。如單位人員的記錄、游戲世界里的道具包。線性表一般分為數組與鏈表兩類。數組里的元素以連續的內存空間存放,因此可以用內存地址檢索到對應的數據元素,訪問元素很方便。但如果要進行插入/刪除數據元素,就要做一些內存移動,效率比較低。而鏈表的數據元素存放在任意的物理內存位置,相鄰的元素以指針作為“鏈扣”串連起來,可以更高效的插入/刪除數據元素。
隊列和堆棧可能是使用頻率最高的數據結構。隊列是一種“先進先出(first-in first-out, FIFO)”的數據結構。就好像是在銀行里排隊,排在前面的先服務。因此順序執行的任務可以從一端依次壓進任務隊列里,要做任務時依次從另一端取出,哪個任務先接到就先做哪個任務。也許有些任務報酬更高,如果最求報酬最大化,就需要使用優先級隊列。在插入元素時,優先級高的元素插入隊列前面,把任務的報酬設成優先級數據就可以了。
堆棧是一種“先進后出”的數據結構。就好像是疊盤子,疊在最上面的盤子最先拿來使用。比如Word中的“撤消”按鈕,使用戶在編輯誤操作時不必驚慌,因為“撤消”功能可以撤消之前的操作。只要把用戶的操作壓入棧里,撤消操作就是從棧中彈出最近發生的操作,可以很方便地實現這個功能。
此外,樹型結構和圖形結構也是比較常用的、非線性的數據結構。樹的實現與應用比線性數據結構復雜,但其應用很廣泛,如Windows操作系統的文件管理。圖形結構可以用于地圖數據的管理等。
5數據庫:智能化的大倉庫
在程序設計當中,具有各種數據結構的變量或對象是不可缺少的元素。如果數據量比較小,直接使用內存變量或文件存儲就可以了,但在當前信息化的環境中,數據量通常是海量的,為了加快對數據的操作與訪問,同時保護數據的安全性,必須借助專門的工具,這就是數據庫。嚴格地說,數據庫是按照數據結構組織、存儲和管理數據的倉庫。
例如,在企事業單位的日常管理工作中,常常要把本單位職工的基本情況(職工號、姓名、年齡、性別、籍貫、工資、簡歷等)存放在表中,這張表就是數據庫的一個基本元素,可以通過不同的“視角”加以查看。如果建立了包含相關信息的多個表,我們就擁有了一個“數據倉庫”。在應用程序的設計中,可以模擬現實世界,為不同的人員劃分相應的權限,使他們可以根據需要隨時在權限范圍內處理數據,如查詢某職工的基本情況,添加新進的職工信息等。此外,在財務管理、生產管理中、倉庫管理時,也可以建立眾多的數據庫,以實現財務、倉庫、生產的自動化管理。
6結語
計算機的課程體系是實現完整應用的一個整體,獨立的程序設計教學會使學生對許多概念的理解發生混淆,造成實際應用的偏差。本文論述了將相關的專業課程概念融入C++程序設計的教學過程中,增強學生對程序設計概念的理解,并根據需要靈活應用。當然,面向對象的程序設計也是一門實踐性很強的課程,學生對所有概念的理解及應用必須通過上機操作,在程序設計中不斷磨練才能提高。
參考文獻:
[1] 劉建華. 計算機語言類課程教學模式初探[J]. 高教論壇,2005,2(1):91-93.
[2] 鄭莉,董淵,張瑞豐. C++語言程序設計[M]. 北京:清華大學出版社,2005.
[3] 陳渝譯. 操作系統:精髓與設計原理[M]. 北京:電子工業出版社,2006.
[4] 王曉東. 算法設計與分析[M]. 北京:清華大學出版社,2008.
關鍵詞:拓展式教學;計算機語言課程;教學研究
中圖分類號:G424 文獻標識碼:A文章編號:1009-3044(2011)31-
Discussion on Extensive Teaching Method of Computer Language Course
CHEN Guo-chao
(Sichuan Institute of Technology, Zigong 643000, China)
Abstract: In the teaching of computer language courses for the student not majoring computer, the author breaks the limit of textbook and begins with the study of the computer software for the perspective of the system resources. The essay, combined with the author's teaching practices for years, discusses the purpose, the significance and specific implementation scheme of the method for computer language extensive teaching.
Key words: extensive teaching; computer language course; teaching and research
拓展式教學是對教學內容、形式、方法等進行延伸挖掘并揭示其本質,透徹研究問題,使學生能夠靈活變通、準確地進行理解、鞏固教學內容。這種突破教材約束的教學方式,有助于激發學生學習的主動性,培養學生的創造性思維能力,促使學生敢于探索問題并解決問題。
計算機語言課程是高校非計算機專業本科生的必修課程,多數學生學習計算機語言比較吃力,在課程后期少數學生無法跟上老師的教學進度。在計算機語言教學過程中,經過長期的實踐和摸索,引入了拓展式教學方法,取得了良好的教學效果。
學生在學習計算機高級語言之前雖然已經學過計算機基礎知識,但許多學生對計算機知識的理解僅僅停留在概念上,沒有應用于實踐,對計算機系統的認識沒有質的提高。學生在計算機語言的學習中,通過教師的拓展式教學,可以加深對計算機基本概念、專用術語的理解,提高對計算機體系結構的認識水平,并在編程中付諸于實踐。
計算機語言課程中的難點和重點是:內存變量、數組、指針、程序設計和算法等,下面就這個方面探討拓展式教學方法。
1 由內存儲器結構拓展到內存變量和指針
在計算機高級語言教材中,涉及內存變量和指針的章節很少提及內存儲器結構。教師應突破教材的限制,在引入內存變量和指針之前,先講解計算機內存儲器的相關知識,隨后由計算機內存儲結構拓展到內存變量和指針。
講解內存儲器的組織結構,用如圖1所示的簡圖來說明。每個矩形格就是一個存儲單元,每個存儲單元在計算機高級語言中稱為一個內存變量。存儲單元是臨時存儲數據的空間,數據存入哪個存儲單元或從哪個存儲單元取出數據,必須明確存儲單元的地址,而2000H,2001H就是存儲單元的地址。在計算機高級語言程序設計中,無需明確具體的存儲地址,存儲單元的地址只需用符號來表示,這就是內存變量名,內存變量名需要程序設計者來定義。
圖1 內存儲器結構簡圖
在計算機高級語言中,將地址形象化地稱為“指針”,一個變量的地址稱為該變量的“指針”。存儲數據的單元就是變量,存儲地址的單元就是指針變量。
內存變量和指針的使用貫穿于計算機高級語言程序設計的始終,對內存變量和指針認識模糊或認識不深入,在以后的程序設計中就不能合理使用,從而影響程序設計的學習。教師通過教學內容的拓展,把抽象的變量和物理存儲器聯系起來,幫助學生看清了內存變量和指針的本質,加深了對內存儲器結構的認識。
2 由“存儲程序”原理拓展到程序設計
由于計算機高級語言源程序是基于計算機硬件執行的,在計算機高級語言程序設計教學過程中,教師要突出和強調“存儲程序”原理的講解。
“存儲程序”原理可以借助微型計算機結構簡圖來說明,如圖2所示。程序運行之前,首先把程序調入內存儲器,然后在系統的控制下,從內存儲器中逐條取出指令加以分析,并執行指令規定的操作,使計算機按程序流程運行直至結束,從而實現自動化的連續工作。
圖2 微型計算機結構簡圖
基于“存儲程序”原理的拓展,教師講解編程計算cgc3.tif時,讓學生明白:計算機處理數據是分步驟完成的,本例計算100個數的累加和,需要計算100次,可用循環語句來實現。
通過科學、合理的教學內容拓展,學生能夠準確地理解教學內容,逐漸地養成計算機的思維習慣,學會用算法分析問題、解決問題。同時,學生加深了對馮?諾依曼體系結構的理解,對計算機體系結構的認識上升到一個新高度,為以后合理、高效地使用計算機解決本專業的問題打下良好的基礎。
3 從硬件資源的高度認識程序設計
大多數學生編寫程序只追求任務的實現,忽略程序運行的效率。教師講解程序設計時,引入“計算機硬件資源”等教學內容,引導學生不但要學會編寫程序,而且在滿足正確性、可靠性、健壯性等質量因素的前提下設法提高程序的效率。
最主要的計算機硬件資源是計算資源和存儲資源,計算資源就是CPU(中央處理器),存儲資源包括內存儲器和外存儲器。高效的程序是指程序運行時盡可能少占用CPU的時間,減少無謂的時間消耗,讓計算資源可以被更多的任務利用,提高計算資源的利用率。
例如,編程計算 (n是正整數)。許多學生編程時,使用循環語句來實現,但是,當n的值很大時,會耗費CPU的大量時間。如果把計算式修改成
,則。通過這個例子,讓學生明白最好不要把所有計算任務都交給計算機完成,有些計算任務需要程序員提前處理,讓出更多寶貴的計算機資源給計算機用戶。
通過“計算機硬件資源”的拓展,借助于計算機高級語言教學平臺,實現計算機基礎知識和上機實踐的有機結合,培養學生不但具有基本的編程能力,而且樹立高屋建瓴、系統全局的思想,為計算機在本專業中的應用提供指導。
4 總結
高校開設計算機高級語言課程的目的:培養學生掌握編程的基本知識、初步的程序設計能力和基本的程序調試技能。教師在教學過程中,不要局限于教材的限制,通過教學內容的拓展,講解和程序設計相關的基本知識、基本理論,不但有助于激發學生學習高級語言的熱情,而且有利于學生深入理解計算機體系結構,提升對計算機的認識高度。
參考文獻:
[1] 張曉萌.關于結構力學拓展式課堂教學的思考[J].科教文匯,2009(23).
[2] 薛永寧.高職院校《數據庫原理與應用》教學拓展探討[J].硅谷,2009(24).
關鍵詞:算法;結構化程序設計;模塊化教學;任務化
中圖分類號:G712 文獻標識碼:B 收稿日期:2015-12-29
一、教學現狀
“C語言程序設計基礎”整個課程分為基礎知識和程序設計兩個大的模塊:基礎知識屬于純理論部分,主要介紹C語言的使用規則以及語法;程序設計部分需要通過實訓的模塊化教學來講解。C語言知識點很多,很瑣碎,用模塊化理念來開展教學,學生會感到知識點集中并且思路清晰。
二、模塊展示
整個課程是以模塊化設計為中心,將原來較為復雜的問題化簡為一系列簡單模塊的設計,也就是將―個大的計算任務劃分為一個個比較小的任務。在教學中,要注重把教學重心放在解決問題的算法分析上,培養學生分析與解決問題的能力,也注重培養學生養成規范代碼行文。
1.基礎篇
首先是引入,在這里運行幾個有趣的小程序以提高學生的興趣;其次要告訴學生C語言這門課程的重要性,即其為后續課程Java的基礎。在這個模塊主要是語法規則的講授,多采用案例和計算方法講授運算符和表達式,用貼近生活的案例來引出算法的應用。在學生具備一定的程序設計能力的基礎上,有意識地在程序中有意識的錯誤設置,強調調試程序的重要性,讓學生充分體驗與掌握調試程序的方法,逐步提高學生獨立調試程序,并在調試過程中發現問題、解決問題的能力。
2.結構化程序設計篇
對程序設計的三大結構――順序結構、選擇結構、循環結構分模塊講授,每一個模塊講授完成,就配合做該模塊的練習題,并且進行必要的程序設計。整個實踐過程由淺入深、由簡單到復雜。在Visual Studio C++環境下,舉出幾個簡單的小程序例子演示給學生看,并逐一講解,引導學生自己去發現程序中存在的缺陷以及改進的方式。從熟悉C語言源程序到可執行文件的整個操作流程,讓學生仿照所列舉的幾個程序模仿著編一個小程序。學生在正確完成程序設計算法的過程中,不但體會到了成就感,也豐富了自己的知識。
3.數據對象構造
講授完經典三大結構以后,就對數組、函數、指針三個模塊進行講授。講授數組模塊的過程先給出若干程序案例,分析實現功能的算法,講授時以讀程序為主。解決的方法可能不唯一,如果能啟發學生多角度、多側面去尋求解決問題的辦法,則可激發學生思考的積極性,提高其學習興致。在C語言中一題多解的情況有很多,有意識地引導學生采用新思路和新方法解題,以培養學生在編程中的求異思維,而不是死記硬背,墨守成規。習題課采用讀程序與編寫程序相結合的方法,讓學生熟悉數組的使用和算法實現的相關知識。
函數模塊的講授以自定義函數為重點,講授其定義使用的語法,要求學生會編寫簡單的自定義函數。
指針模塊對程序設計沒有過多要求,只要求讀程序。講授最基本的指針定義和使用。重點突出指針在數組指向的時候的應用。
最后一個模塊就是文件,主要講授文件的打開和訪問方式即可。并且案例化講授使用文件的代碼使用方法即可,對學生的編寫不作要求。
三、探索結論
對于高職新生,實現C語言教學的基礎化、實用化就可,不需要講授過多復雜和難以理解并且實用性不強的功能。有些知識點只需要理解,有些知識點必須掌握,按照模塊化基礎教學方案,學生思路清晰,易于掌握。C語言程序設計的教學要講究方法,通過這門課的學習,不僅要讓學生掌握語言的基本規則,而且要切實培養學生分析問題、解決問題的能力,最終使學生明白,語法是有限的,可解決的問題是無限的。只有在分析實際向題的基礎上,以清晰的思路去設計算法,才能舉一反三,以不變應萬變。程序設計的任務不只是編寫出一個能得到正確結果的程序,還應考慮程序的質量。
參考文獻:
[1] 張正瓊,黃文勝.C語言程序設計基礎教程[M].重慶:重慶大學出版社,2014.
【關鍵詞】教學;程序設計;計算思維
2010年“第六屆大學計算機課程報告論壇”中,陳國良院士指出,計算思維能力是大學計算機基礎課程教育過程中一個重要的培養目標。人類科學發展的三大支柱是理論科學、實驗科學和計算科學,與之相對應的是人們認識世界、改造世界的三種思維方式,即理論思維、實驗思維和計算思維[1]。
程序設計基礎課程是高校非計算機專業必修的公共課,教學目標是培訓學員的基本編程能力、邏輯思維能力和抽象思維能力。當前程序設計基礎的教學中存在如下兩個主要問題:第一,學員的計算機理論知識儲備不夠,沒有成體系的專業知識結構,因此,學員對計算機的“思維方式”與傳統解題方式的區別難以理解,接受較慢。第二,在實踐中出現“重結果、輕過程”,“重編碼,輕算法”的現象。學員往往把學習重心放到基礎語法的學習上,全神貫注于看到程序“運行結果”,不注重從宏觀的角度總結問題,也不注重求解的構建過程,忽略了思維方式的鍛煉。因此,在教學中的首要問題應該是培養學員的程序設計和計算思維能力。
1.計算思維
目前國際上廣泛認同的計算思維定義來自美國卡內基?梅隆大學的周以真(J.M.Wing)教授,周教授于2006年提出:計算思維是運用計算機科學的基礎概念進行問題求解、系統設計和人類行為理解,它是涵蓋計算機科學之廣度的一系列思維活動[2]。計算思維的本質是抽象(abstraction)和自動化(automation)[3]。抽象是通過簡化、轉換、遞歸、嵌入等方法,將一個復雜問題轉換成許多簡單的子問題并進行求解的過程,這是所有科學發現的必然過程;自動化是充分利用計算機運算能力來實現問題求解,以彌補人的計算缺陷,這將豐富計算機的應用范圍。因此計算思維是一種形式規整、問題求解和人機共存的思維。
需要指出的是:計算思維不是俠義的計算,而是運用計算機基本概念去求解問題、設計系統和理解人類的行為[2]。
2.以計算思維為導向的程序設計課程教學
思維方法比知識本身更重要,作為從事計算機基礎教學的一線教師,應該在日常教學中潛移默化地訓練和培養學員的計算思維能力,提高他們的計算思維素養,從而進一步培養和鍛煉學員的創新能力。
教師對學員進行直接教學指導產生應該保證基于計算思維,然后再運用其它教學手段和方法來輔助和引導學員進行知識點的構建和學習問題的思考與解決。通過計算思維的一系列方法――遞歸,關注點分析,抽象和分解,保護、冗余、容錯、糾錯和恢復,利用啟發式推理來尋求解答,在不確定情況下的規劃、學習和調度等,達到引出問題,深入探究、找尋答案,討論交流、得出結論,反思自評、內化知識的目的。當學員掌握了知識點的同時也掌握計算思維方法之后,再通過已獲得的知識和方法自主建構學習的知識和學習的框架,相互間交流協作,同時運用計算思維方法達到遷移拓展科學知識的目的。在這整個學習過程中,所有的學習過程都通過一系列基于計算思維的學習方法展開。
程序設計基礎課程是理論與實踐并重的課程,在實際教學過程中兩部分的教學都必須以面向計算機思維為導向,否則該課程的教育就是不完善不成功的。
3.基于計算思維的案例分析
將計算思維與程序設計課程教學的結合主要體現在兩個方面:首先要保證在整個教學過程中要貫穿抽象和自動化這兩個核心思想,其次要根據講授的具體知識點恰當地引入計算思維中所有的其他基本概念和思維方法。
傳統教學一般是先講解本次課所學語法的基本結構,接著講解具體的例子,最后總結、布置作業的過程。從計算思維的角度出發,教學內容采用“問題導入語法、語法引入應用、應用面向實踐”的方式,突出知識點與技術點的關聯性,注重內容在應用上的層次性。
以循環結構為例,該結構要求程序根據對某個特定條件的判斷來決定是否重復多次進行某一特定的相同操作。教學可分以下幾步進行:
①初始時結合學員日常生活舉例:列隊報數,沒有報到隊尾時每名學員要在前一名學員數字上加1后大聲報出,使整個教學顯得過渡自然,給同學們展示了現在所學的知識已經實實在在存在于我們的日常生活中,不僅可以拉近與他們的距離,更重要是讓他們覺得所講授的內容比較簡單,為后續教學活動的開展埋下了伏筆。
②采用抽象的方法,提煉出循環結構的基本結構,然后再引入學員中學就已熟悉的等比數列;接著把等比數列前n項求和的算術問題轉換成對應的循環結構,這樣不露聲色把數學的思想灌輸給學員。
③在學員已經基本掌握的基礎上,再增加一次實踐的機會,給出現實生活中一個例子:如求班級平均分問題;鼓勵學員積極思考,同時引入計算思維的約簡、嵌入、轉化等方法,把復雜的問題轉分解易于解決的問題并加以實現。
④再進一步拓展,從問題入手,例如:九九乘法口訣表,引入多層循環嵌套結構,著重分析基本結構與多層循環嵌套結構的異同和適用的范圍,使整個知識點鏈自然形成。
在整個教學過程中,運用問題誘發學員使用抽象的思想和方法,學習用抽象方法去表達自己的想法并建模,能夠透過現象看本質,通過持續的訓練達到完全掌握抽象這個工具。
4.結語
計算思維目前是程序設計類課程教學關注的熱點。最終目的是提高學生的程序設計能力和分析解決問題的能力。因此,我們要充分認識到計算思維的重要性。在教學的實施過程中要突出運用計算機知識解決問題的思想,培養并訓練學生運用計算思維去思考并解決問題。
參考文獻
[1]陳國良.計算思維與大學計算機基礎教育[R].濟南:第六屆大學計算機課程報告論壇,2010.
[2]Jeannette M putational Thinking[J].Communications of ACM,2006,49(3):33-35.
[3]董榮勝,古天龍.計算思維與計算機方法論[J].計算機科學,2009(1):1-4.
[4]賈茹,郝長勝,裴衣非.VB程序設計課程的計算思維教學實踐[J].電腦知識與技術,2011(25):6266-6268.
[5]吳紹兵.計算思維和程序設計能力的培養[J].計算機教育,2011(16):11-4.
[6]周顯春,劉東山.基于計算思維能力培養的程序設計課程教學研究[J].電腦知識與技術,2012(35):8475-8477.
作者簡介:
杜曉靜(1975―),女,鎮江船艇學院講師,研究方向:網絡安全。
關鍵詞:實驗導學;計算思維;程序設計
中圖分類號:G642 文獻標識碼:B
1引言
程序設計課程的教學已逐漸舍棄傳統的“填鴨式”教學模式,由“知識傳授型”向“能力訓練型”轉化。教學要以學以致用為目的,以培養學生的學習能力、思維能力和自我約束能力為重點,構建以“學生為中心”的教學模式。筆者集多年程序設計課程教學體驗,以C語言程序設計為例,構建“實驗導學型”課堂教學模式,探尋以計算思維訓練為核心的自我體驗式教學方法和策略。在傳授基礎知識的同時,調動學生的學習興趣,培養學生分析問題、思考問題和解決問題的能力,使學生由被動接受知識變為主動獲取知識,以更好地適應社會對人才的需求。
2從計算思維到程序設計
J.M.Wing教授在《Computational Thinking(計算思維)》一文中指出:計算思維是建立在計算過程的能力和限制之上的,不管這些過程是由人還是由機器執行的。計算方法和模型給了我們勇氣去處理那些原本無法由任何個人獨自完成的問題求解和系統設計。計算思維涉及運用計算機科學的基礎概念去求解問題、設計系統和理解人類的行為,它涵蓋了反映計算機科學之廣泛性的一系列思維活動。
從計算機的發展和普及來看,計算機已經成為適合于每一個人的“一種普遍的認識和一類普適的技能”。這在一定程度上意味著計算機科學從前沿高端到基礎普及的轉型,因此,計算思維也被視為是每個人應當具備的基本技能。而對程序設計課程而言,編程能力是計算思維和技能化知識的綜合體現,如何培養學生的計算思維能力,是課程教學改革的一項重要內容。
計算機最初是作為一種計算工具問世的,計算機高級語言的理論基礎和基本方法都源于數學,而程序設計是求解一系列具體的問題的方法和過程。因此,在程序設計課程的教學設計和實施過程中,必須明確以培養和提高學生的計算思維能力為最終目的,而具體的程序設計只是實現這個目的―種手段。
3基于計算思維訓練的“實驗導學型”教學模式的構建
近年來,由于C程序設計課程教學的總學時數削減為64學時(理論學時與實驗學時比為3∶1),實驗學時明顯不足,不利于實際編程能力的系統訓練與提高。改變傳統的課堂教學模式,從單純性的課堂理論教學轉入互動式機房實踐教學,以“自主體驗”的方式展開課堂教學內容,可以利用有限的學時,使學生充分領會程序設計的基本思想與方法,提升運用計算機求解實際問題的能力。因此,我們在課堂教學環節中集中體現“以學生為中心”的教學理念,以計算思維訓練為目的,精講多練;利用機房環境營造自主體驗式教學氛圍;以案例為線索,采用“講練結合,邊講邊練”的教學手段,融合知識重點,構建四種體驗型實驗導學內容。
3.1模仿型實驗
模仿型實驗是學習者采用“臨摹”手段來體驗編寫程序的過程。俗語說:像不像,三分樣。對于學寫程序而言,可以像小時學寫字時的“描紅”一樣,首先將現有的案例程序讀懂,然后嘗試著寫出類似的程序。通過模仿型實驗的訓練,達到初步認識程序的目的。
模仿型實驗的構建原則是:以“案例”介紹基本語句和語法,經過舉一反三的練習學習編程的方法和技巧,學會用程序設計思維方式分析和解決問題。構建模仿型實驗主要針對簡單程序的體驗學習。模仿型實驗示例如表1所示。
3.2驗證型實驗
對于程序設計的初學者來說,驗證型實驗是一種最直接、最有效的體驗方式。當學生還對程序“懵懂不清”的時候,為他們開啟程序設計的大門。通過驗證型實驗的訓練,學生盡快學會并建立起程序設計的思維方式,了解編程基本思路和方法,掌握基本語句的使用及程序的執行過程。
驗證型實驗的構建原則是:根據案例提出的問題,通過分析問題提出解決方案,并給出全部程序代碼及測試數據,由學生對程序運行編譯運行,觀察并驗正運行結果。構建驗證型實驗主要針對基本語法、語句及程序基本結構的進行體驗學習。
以下是驗證型實驗的一個實例:計數問題。
在解決某個具體問題時,要綜合運用程序設計中的三種基本結構,特別是循環與分支結構的組合搭建。例如:設計驗證實驗,從鍵盤輸入若干個學生成績,分別統計不同分數段(即:90~100、80~89、70~79、60~69、0~59)的人數。通過本實驗,在掌握程序結構與基本語句的同時,學會使用“循環結構中含分支”的常見解題方法及程序結構,測試數據與運行結果如圖1所示。驗證程序的代碼如下:
#include
void main()
{
int sc;
int a=0,b=0,c=0,d=0,e=0;
printf("Input score,with -1 to End:");
scanf("%d",&sc); // 讀入第一個成績
while(sc!=-1) // 成績sc不為-1時,執行循環
{
switch(sc/10) // 提取十位上的數值
{ // 分別統計各分數段的人數
case 10:
case 9: a++; break;
case 8: b++; break;
case 7: c++; break;
case 6: d++; break;
case 5:
case 4:
case 3:
case 2:
case 1:
case 0: e++; break;
default: printf("Input Error!\n");
}
scanf("%d",&sc); // 讀入下一個成績
}
printf("90~100:%4d\n",a);
printf("80~89 :%4d\n",b);
printf("70~79 :%4d\n",c);
printf("60~69 :%4d\n",d);
printf("0~50:%4d\n",e);
}
3.3改裝型實驗
改裝型實驗是學習者獨自解決實際問題的開始。學生對較復雜的問題進行解析,將已學的知識、算法和技能進行重新組合,尋求解決問題的具體方法。通過改裝型實驗的訓練,學生在鞏固已學的知識的同時提高了綜合應用知識的技能。
改裝型實驗的構建原則是:針對“案例”提出的問題分析并提出解題方案,引導學生用已掌握的算法和技巧為較復雜的問題搭建出解題方案。改裝型實驗主要是針對常用算法和復雜程序的體驗學習。
以下是改裝型實驗的一個實例:批量數據的處理問題。
對批量數據的處理通常采用數組存儲的形式,除了輸入和輸出外,對數組中數據的操作還包括:在指定位置處插入或刪除、查找指定的數據,按次序排列等常用操作。例如:設計改裝型實驗,在數組中查找指定的數據,并對查找到的數據進行刪除處理。提出解題方案:先用“查找”算法找到指定數據所處的位置,若找到,則執行“刪除”算法,若未找到,顯示“數據未找到!”的回饋信息。通過本實驗,學生將掌握數組的基本操作和對批量數據的綜合處理方法。
3.4獨創型實驗
獨創型實驗是構建“學思統一”思維教學空間的關鍵環節。要培養聰明的學習者,就要給學生提供足夠的思維空間,設法激勵和引導學生自主思維,并加強綜合訓練,擴展學生思維發展的學習空間。
獨創型實驗的構建原則是:提出實際問題及具體要求,引導學生正確地思考,并通過對問題的分析和討論設計出恰當的數據結構及解題算法,最后獨立完成編碼及程序的調試。
以下是獨創型實驗的一個實例:中值濾波器模擬處理問題。
中值濾波是圖像處理技術之一,即根據輸入圖像中對應像素鄰域內灰度的“中值”確定輸出圖像對應像素的灰度值。具體操作步驟是:
(1) 設定一個n×n的模板,讓其在圖像中漫游,并將模板中心與圖中的某個像素位置重合
(2) 讀取模板下所對應的像素灰度值,并將這些灰度值從小到大排成一列
(3) 找出排在中間的灰度值,稱為“中值”
(4) 將“中值”賦給對應于模板中心位置的像素
解決此問題時,采用二維數組描述圖像的像素灰度值。對于數組中的每個元素(灰度值),按n×n模板提取鄰域內的元素值(灰度值),經排序確定“中值”,修正元素值,完成濾波處理。通過本實驗,學生可以充分理解二維數組的結構特點以及它在實際問題中的應用。
4結束語
程序設計是實現計算思維的―種手段,程序設計課程的教學重點是幫助學生獲得解決問題的途徑與經驗。實驗導學型課堂教學模式體現了“以學生為中心”的教學理念,自我體驗式的學習氛圍有助于引導學生正確的思維,使學生由被動接受知識變為主動獲取知識,自我發展,成為一個聰明的學習者。在教學中,教師應加強對計算思維能力的培養,使學生學會用程序設計的方式進行思考,給學生提供足夠的思維空間,設法激勵與引導學生去思維,主動去獲取和建構知識,使學習變得輕松、高效,教學效果得到真正提高。
參考文獻:
[1] 王飛躍.從計算思維到計算文化[J].中國計算機學會通訊,2007,3(11).
關鍵詞:C語言;數據結構;課程整合;信息
中圖分類號:G642
文獻標識碼:B
文章編號:1002-2422(2010)06-0090-03
1 課程整合的必要性
首先,從信息管理與信息系統專業的研究內容與構成分布特征來看,專業主要研究信息系統開發與設計的理論、原理、原則和方法。解決信息的獲取、加工、檢索、控制和利用等一系列重要問題,為科學研究和管理決策提供高質量的信息服務。專業是信息管理與計算機技術、系統科學、管理學、經濟學等相結合的交叉學科專業,在課程設置方面突出信息管理與信息系統內容。同時,加大計算機技術和商務課程的力度,增加了市場營銷、電子商務等方面的課程。可見,信管專業的學習任務十分繁重。
其次,從“C語言”與“數據結構”兩門課程的學習情況來看,很多學生對這兩門課程的掌握情況不理想。有如下原因:
(1)C語言是學生接觸的第一門程序設計語言,學生的學習精力大多在基本概念及簡單程序的編寫上面,而對數組、函數、指針、結構體的學習深度不夠,這使得學生對復雜問題的處理上缺乏相應的能力。而數據結構的學習必須以數組、指針、結構體等數據類型為基礎,C語言學習環節的薄弱導致數據結構的學習上不能得心應手。
(2)由于C語言與數據結構被安排在兩個學期學習,大多數同學在學習數據結構時,C語言的相關理論被忘記殆盡,學生在學習過程中不得不重新花費相當的精力去復習c語言的內容,這使得數據結構的學習效果大打折扣。
(3)在學習數據結構時,學生往往掌握了算法,但是最終不能將算法轉換成程序,究其原因,是由于C語言的實踐環節薄弱造成的。
最后,C語言中的程序相對來說比較簡單,學生在編寫時往往會覺得困惑:編寫這樣的程序有什么意義?這導致學生的學習熱情不高。而數據結構所涉及的程序往往會解決一些復雜的現實問題,這樣學生就可以親身感受到這門課程的現實魅力,提高學習積極性。
2 課程整合的思路
2.1 課程內容整合設計
“C語言”與“數據結構”課程整合后,由于數據結構以C語言為基礎,因此,對于初次接觸程序設計語言的學生來說,學習的內容應以C語言為綱,將數據結構的內容穿插其中,在學習C語言語法基礎的同時,融入一些復雜數據類型及其操作的實現方法。當然,由于課時的限制,數據結構的內容應以“必需、夠用”為度,適當刪減其中的章節,合理安排教學內容,做到“有理、有利、有節”。
主要的課程內容安排如下:
(1)C語言常用數據類型:包括常量、變量、運算符和表達式,以及變量的指針和指針變量的用法。
(2)順序結構程序設計:預處理命令和常用輸入輸出函數的用法。
(3)選擇結構程序設計:if語句與switch語句的用法。
(4)循環結構程序設計:while循環、do-while循環、for循環、break和continue語句的用法。
(5)模塊化程序設計基礎:函數的定義與調用、函數的嵌套與遞歸調用、變量的作用域與存儲類型、函數與指針。
(6)結構體與共用體:結構體變量、結構體變量的指針、結構體數據作函數的參數、鏈表、共用體類型、枚舉類型、typedef定義數據類型。
(7)數組與廣義表:一維數組、二維數組、數組與指針、數組的壓縮存儲、順序表的表示和實現、廣義表的表示和實現。
(8)棧與隊列:棧的表示和實現、隊列的表示和實現。
(9)字符串:字符數組、字符串與指針、字符串處理函數、字符串的存儲表示方法、模式匹配算法及程序實現。
(10)樹與二叉樹:二叉樹的性質、存儲、與遍歷、樹與森林、赫夫曼樹以及現實問題的引入與求解。
(11)圖:圖的存儲、遍歷、圖的連通性、拓撲排序、關鍵路徑、最短路徑的求解。
(12)查找與排序算法:靜態查找、動態查找、哈希表、插入排序、快速排序、選擇排序。
(13)文件:文件的打開與關閉、文件的讀寫等。
課程內容設計參考文獻[2][3]進行設計,對以往C語言教程的結構進行重新組織,將指針糅合在各章節中,將數據結構的知識點與C語言基礎有機結合,注重知識點前后銜接。經過課程的整合,使所有知識成一體系,學生的學習更加系統、全面。但是該課程也有一個典型的缺陷:知識覆蓋面廣。如果學生的學習積極性和主動性沒有被充分調動起來,這門課的學習將會陷于混亂。因此,整合后的課程對授課教師與學生都將是一個新的挑戰。
2.2 實驗課程設計
“C語言”與“數據結構”都是實踐性非常強的課程,在開展理論授課的同時,還必須安排合理的上機實踐。實驗課程的任務是使學生能使用所學的程序設計與數據結構的基本知識和算法解決一定的問題,使學生在程序設計中能構造各種數據結構和綜合使用各種算法,提高學生解決實際問題的能力。
為了提高實驗教學的效果,實驗課程的設置應與理論授課配套,且必須有充足的課時,具體課時的分配也是參考課程的重點難點來制定的,實踐的內容與理論課保持同步,使理論教學與實驗教學緊密結合,內容的安排也應該做到循序漸進、由淺入深。這樣利于學生鞏固所學知識。
根據整合后的課程教學目標、課程的特色及學生的認知過程,對實驗課程采用“分層次思想”來設置實驗內容:
(1)知識的認知,理解C程序語法知識。
(2)知識的運用,能解決簡單的問題。
(3)應用知識解決實際問題。
因此,實驗的形式可以分為四類:認知型實驗、知識應用型實驗、程序設計型實驗、綜合案例型實驗。認知型實驗,主要用于加深基礎知識的理解,包括c程序的結構、基本語法、語句以及c程序的調試方法等,通過給出現有程序進行調試的方式來展開;知識應用型實驗是在認知實驗的基礎上,提高學生閱讀程序、調試程序的能力,主要形式是對現有程序進行閱讀,理解語句的功能,并設置一些錯誤以待學生調試解決;程序設計型實驗是用于培養學生編程的能力,通過給出一些題目,讓學生自己編程并在計算機上實現;綜合案例型實驗是提高學生應用C語言與數據結構的知識解決實際問題的能力,例如可選擇學生感興趣的游戲來實現:比如俄羅斯方塊、貪吃蛇、走迷宮、五子棋,或者是與信管專業相關的管理信息系統的設計:倉儲管理系統、通訊錄系統等。
3 教學方法設計
“C語言”與“數據結構”的整合設計以C語言為主線,將各種類型的數據結構糅合其中,將C語言與數據結構有機地結合在一起。“學生能更好地掌握最常用的數據結構,理解數據結構內在的邏輯關系,理解數據與關系在計算 機中的存儲表示以及用C語言描述這些數據結構的運算和實際的執行算法”。
3.1 激發學生興趣
興趣是最好的老師,該課程的教學過程中應時刻重視學生興趣的培養。為了不讓學生從一開始就產生畏難情緒,第一堂課就變得非常關鍵。因此,第一節課的授課重點應在于告訴學生現實中的問題用C語言與數據結構解決的實例,比如對弈問題、迷宮游戲、俄羅斯方塊等,以此來激發學生的好奇心理。同時,還應該從后續課程和考研的角度來介紹該課程的重要性。在授課過程中,教師應時刻關注學生的學習激情,實時插入一些用已學知識解決現實問題的案例,并引導學生解決。
3.2 案例教學
案例教學的目的是為了啟發學生的思維,拓寬知識領域,激發學生的學習興趣。課程中可設計以下案例來充實課堂教學內容:
(1)將C程序的三種基本結構結合起來,以舉例的形式講解三種基本結構在字符處理、多項式求和、選數、迭代、隨機數處理等多方面的具體應用。
(2)引入經典問題來研究算法,比如漢諾塔問題采用遞歸算法,二維幻方問題采用蠻力法,棋盤覆蓋問題采用分治法,n皇后問題用回溯法,背包問題用貪心法等。
(3)通過引入約瑟夫環、一元多項式求和、走迷宮等案例來加深對鏈表與棧的理解,樹的應用可引入赫夫曼編IN/譯碼的應用實例,圖中引入求最短路徑的實用程序。
3.3 引導式教學
“C語言與數據結構”課程的難點在于算法的最終實現,在授課過程中,對于每個問題通常采用五個步驟來解決:引入問題分析問題框架構造算法設計程序設計。首先通過問題引入讓學生明確研究的任務:然后讓學生討論問題的解決思路,制定具體的實現策略;第三,為程序劃分模塊,構造程序的框架;第四,對程序實現的關鍵步驟設計算法,要求在教師的引導下,與學生共同完成;最后,在前面的框架中將算法轉換成C程序。實踐證明,采用該五步引導法能很好地吸引學生的注意力,教學效果良好。
3.4 網絡輔助教學
借助已有的網絡教學平臺、BBS等進行網絡互動交流,在教師的指導下,根據學習的要點利用網絡調用信息資料,或者探討某一問題。教師應在網絡上提供豐富的實例供學生參考,學生也可將自己的成果上傳共享。網絡輔助教學為提高學生創新能力、實踐能力、學習積極性提供可能。
4 結束語
整合之后的課程以C語言程序設計為主線,將數據結構及算法實現糅合在其中,根據需要對課程內容進行調整,使得各知識點前后自然銜接。整合后的課程注重理論與實踐的有機結合,注重學生編程能力的培養。通過培養學生的興趣,提高了學生學習積極性和主動性。
參考文獻
[1]謝莉莉,李勤,傅春,等.“C語言與數據結構”課程的教學改革實踐[J].北京:計算機教育,2009(7).
[3]顧元剛.C語言程序設計教程[M].北京:機械工業出版社,2004-06.