李社蕾
三亞學院理工學院 海南三亞 572022
C語言是一門非常重要的計算機基礎課程,它既具有低級語言的特點,又具有高級語言的優(yōu)點。而且C語言程序設計也是C++語言程序設計、數(shù)據(jù)結構等計算機專業(yè)課程的前導課程。現(xiàn)在許多高等院校將C語言作為理工科學生的第一門程序設計語言課程開設。C語言教學大都側重于語法學習,教學的組織形式多是講解語法,通過例題驗證語法,最終的目的是掌握語法知識點。這樣培養(yǎng)出來的學生只會讀程序,不會寫程序。
任何一種語言,都有一套定義語言的規(guī)則,這套規(guī)則稱為該語言的語法。學習語言時,學習語法是其中較簡單的內容,而學習怎樣最充分地使用語言才是真正的任務。C語言教學的重點,就應該是培養(yǎng)學生的編程思想和運用計算機解決實際問題的能力。
任務驅動式教學法,是德國職業(yè)教育在20世紀80年代大力推行的一種“行為引導式的教學形式”。這種以任務為主體、以職業(yè)行為為引導的教學方法,學生在教師的幫助下,緊緊圍繞一個共同的任務活動中心,在強烈的問題動機的驅動下,通過對學習資源的積極主動應用,進行自主探索和互動寫作的學習,并在完成既定任務的同時,自覺產(chǎn)生一種學習實踐活動,帶著真實的任務在探索中學習。運用任務驅動教學法教學,任務的設計尤其重要,是任務驅動教學法研究的重要內容。本文研究任務驅動教學法在C語言中的應用,重點就是研究其中的任務設計。
C語言作為入門語言,對于首次接觸計算機語言的學生來說,一切都是陌生的。大部分學生會感覺到C語言這門課和以前學習的內容脫節(jié)了,所有的概念都是新的,找不到一點兒自己熟悉的東西,感覺什么都不懂,對學好這門課沒有信心。為此,本文設計任務的出發(fā)點在于設計的任務盡量接近學生,甚至是學生熟悉的內容,對不同的章節(jié)內容設計不同的任務。
計算機有兩大功能:高速運算和海量存儲。C語言的教學目的,就應該是培養(yǎng)學生運用計算機的這兩大優(yōu)勢,通過C語言編程來解決實際問題的能力。
首先介紹計算機的工作過程。學生通過了解計算機的工作工程,可以幫助他們思考如何根據(jù)計算機的工作方式來控制計算機,如何通過計算機語言控制計算機解決實際生活中的問題?!榜T·諾依曼”結構的計算機工作過程如圖1所示。
在了解計算機的工作過程的基礎上,提出具體的問題,尋求用C語言解決問題的方法和過程。根據(jù)解決問題類型的不同,將C語言內容分為七大部分,對每一部分分別設計相應的任務,循序漸進,逐步培養(yǎng)學生的編程思想和編程能力。
圖1 “馮·諾依曼”結構的工作原理圖
任務:設計一個最簡單的任務來用C語言解決,如求表達式“3×4+9÷3”的值。
學生一看這個表達式,很興奮,這太簡單了,小學生都會算,答案脫口而出;但當數(shù)值變大時,運算起來就有些麻煩了。用C語言來解決這個問題,學生的興趣就被提起來了。首先介紹C語言的框架(聲明部分、函數(shù)定義部分),然后引入常量、變量、運算符、表達式、數(shù)據(jù)類型、輸入輸出函數(shù)及順序程序結構等相關語法內容的講解,同時通過設計大量例題,利用這些語法知識點來編寫程序,分析解決問題的思路。
任務1:已知下面分段函數(shù),輸入任意x的值,求y的值。用C語言編程實現(xiàn)。
看到這樣一個分段函數(shù),首先分析解決這類問題的思路,發(fā)現(xiàn)用前面的知識無法解決問題;然后引入選擇結構,引入if語句和關系運算符、關系表達式、邏輯運算符和邏輯表達式的講解;最后通過設計例子(比如:判斷一個三位數(shù)是不是水仙花數(shù),求三個數(shù)中的最大數(shù)或最小數(shù)等)進行訓練。
任務2:任意從鍵盤上輸入一個百分制成績score,按下列原則輸出其等級:score≥90,等級為A;80≤score<90,等級為B;70≤score<80,等級為C;60≤score<70,等級為D;score<60,等級為E。
這個問題完全可以使用if…else…語句的嵌套來實現(xiàn),但顯然實現(xiàn)起來很羅嗦。為解決這樣的問題,引出switch語句的講解,然后列舉生活中能夠應用switch結構的實例進行訓練。
任務1:求解“1+2+3+4+…+100”,“1*2*3*4+…*100”。
這樣的問題用前面學過的內容解決,要寫兩個很長的表達式,在這個問題的基礎上引出for、while和do…while的講解。通過設計大量的例子,如兔子問題、猴子吃桃問題等,反復訓練。
任務2:求“1到100之間的素數(shù)”。
編寫程序,并分析程序的執(zhí)行效率,分析編寫程序應考慮的兩個重要因素:時間復雜度和空間復雜度。引出break和continue的使用。
任務:根據(jù)一個學生N門課的成績,計算他的平均成績;一個班50名學生,每位學生有N門課成績,計算本班級某一門課的平均成績;對學生成績從大到小排序。
用前面學過的內容解決該問題,需要分別定義N個變量和50*N個變量,顯然不是解決問題的好方法。分析問題的特點,引出對數(shù)組這一構造數(shù)據(jù)類型的學習。引入解決排序問題的方法,通過冒泡排序和選擇排序等排序方法的介紹,掌握解決排序問題的方法。
圖2 C程序的結構框架
任務1:編程求解表達式“1!+2!+……+100!”的值。
任務2:設計程序求一個班學生的各科成績的平均分、最高分和最低分的差。
用前面學習的方法解決此問題,出現(xiàn)大量的重復代碼。為了精簡程序,減小編程工作量,引出函數(shù)的概念,其中包括函數(shù)的定義、組成部分、函數(shù)的聲明、函數(shù)的調用、嵌套調用和遞歸調用等內容,進而引入模塊化設計的思想。
引出C程序的結構框架,如圖2所示。學習C程序的結構框架對于學習C語言非常重要,它使得學生對C語言有一個整體的認識。C程序的結構框架指出C語言是如何構成的,以及怎樣圍繞問題構成C程序。
任務:在程序里表示一個學生(學號、姓名、年齡、性別……),怎么表示?
char number[10];
char name[12];
unsigned int age;
char sex;
想表示多個人呢?定義多個數(shù)組?例如:一個班的學生,每個學生(學號、姓名、年齡和數(shù)學成績、英語成績)打印指定學號或姓名的同學的各科成績。
分析這一問題,考慮用數(shù)組來解決,但數(shù)組中的數(shù)據(jù)有一個重要特點,就是類型相同;現(xiàn)在學生的各項信息,類型不同,考慮定義多個數(shù)組;這樣各數(shù)組相互獨立,一個學生的信息被分散在多個數(shù)組中,使用起來非常不方便,從而引出結構體和共用體來解決,同時引入順序查找和折半查找等方法。分析存儲方式,可以采用數(shù)組;利用數(shù)組存儲遇到一個問題,如果這個信息需要不斷更新,不斷地插入和刪除學生的情況下,就遇到問題,這樣就引入動態(tài)存儲,引入指針數(shù)據(jù)類型。分別使用順序存儲和鏈式存儲編寫出程序,體會兩種存儲方式各自的優(yōu)缺點,根據(jù)具體問題的需要選擇存儲結構。
任務:考慮一個分院或者一個學校的學生信息的存儲和處理問題。
這種情況下,因為信息量太大,內存的容量有限,從而引出與文件操作相關內容的講解,將信息存儲在硬盤上。
總之,C語言課程各部分的教學過程應從任務設計入手,提出問題,分析怎么解決問題,進而引出語法知識點。一方面通過合理的任務設計,將C語言的語法知識點緊密聯(lián)系在一起,用貼近實踐的方式讓學生學會C語言理論知識;另一方面,針對特定任務分析問題、提出思路、編程實現(xiàn)的過程,也正是培養(yǎng)學生的編程思想的過程。教學觀念和教學思想不斷改革,才能符合教學發(fā)展的要求,這樣培養(yǎng)的學生才能滿足社會的需要。在C語言的教學中雖存在很多問題,但也不斷涌現(xiàn)出更多更好的解決辦法,要用不斷創(chuàng)新的眼光去發(fā)現(xiàn)。
[1]盧素魁,唐文彥.從學習C語言看學習程序設計的方法[J].河北大學成人教育學院學報,2000(6):53-54.
[2]譚浩強.C程序設計[M].3版.北京:清華大學出版社,2005.
[3]陳奮.提高C語言教學質量初探[J].廈門教育學院學報,2005,8(2):71-72.
[4]項響琴.淺談程序設計語言C的教學改革[J].電腦知識與技術,2008(11):1166-1168.
[5]納普爾.高等教育與終身學習[M].上海:華東師范大學出版社,2003.