摘 要:C語言是當今廣泛流行的高級程序設計語言,目前已成為國內高校計算機和相關專業的基礎課程。論文就《C 語言程序設計》課程教學中存在的問題,結合多年的教學實踐以及軟件設計行業的現狀,從教學方式、教學過程、計算機等級考試、實踐教學等幾個方面提出了建議,實踐證明對提高C語言課程的教學效果有很大的益處。
關鍵詞:C語言;教學過程;等級考試;上機實踐
中圖分類號:G642 文獻標識碼:A 文章編號:1002-7661(2012)22-019-03
引言
C語言作為當今最為流行的程序設計語言之一,不但已經成為計算機專業的必修課程, 而且也越來越多地成為非計算機專業的學習課程。它對學生學習軟件設計的其他課程以及提高解決實際問題的能力起著重要的作用。C語言是一門實踐性很強的程序設計語言,同時也是一門較難靈活掌握的程序設計語言。對于任課老師而言,要想幫助學生在有限的教學時間內,扎實地掌握C 語言的基礎知識,從而具備一定的閱讀程序、設計程序的能力,分析問題、解決問題的能力以及邏輯思維的能力并能在實踐中加以靈活運用,以適應軟件行業的發展對人才的培養要求, 并非是一件簡單容易的事情。
通過多年的教學,發現大多數老師通常是先給出一般的語法格式, 然后逐步講解語法要點,然后再舉例說明。很多教師往往舉一反三地對使用語法、語句進行深入的教學。而對算法教學卻偏少、不重視。這導致學生在學習上也有了誤區,有好些同學花大量精力做諸如等級考試的選擇題、填空題。帶給學生們更多的是關于語言語法的熟悉和了解,但對真正的目的——編程卻沒有什么幫助。這種方法實在不可取,教學生語法的最終目的是他們自己會用來編程,不是為了記住而記住,否則會使學生跌入枯燥無味的深淵,逐漸對該課程失去興趣。應提供給學生大量練習的機會,多做編程題,而事實上專門針對編程題的書卻很少, 這也導致了學生上機寫程序時無從下手,或者一下手就漏洞百出,編出來的程序慘不忍睹。
歸結起來,目前C語言教學中主要存在以下幾個方面的問題:(1)教學模式單一,教學方式死板,教師對C語言的理論教學仍采用傳統的教學模式,過于注重語句、語法等細節的教學,沒有把程序設計思想放在首位;(2)實踐內容薄弱,基本上都是立足于C語言本身的一些語法規則,沒有把編程思想和程序測試放在首位,無法達到培養學生程序設計和調試能力的目的。(3)三本院校的學生基礎普遍較差,數學與英語基礎更是如此,在碰到程序邏輯思維分析、程序代碼編寫及調試的過程中,往往會感到困難,這些問題是三本院校C語言教學中的共性問題。針對這些問題。要根據學生的實際情況,開展教學改革,細化教學中的步驟。論文針對教學過程、教學方法、實踐環節等方面的改革進行探討,以提高C語言課程教學質量,培養和提高學生分析問題、解決問題的能力。結合多年的教學實踐以及軟件設計行業的現狀,以下幾點對提高C語言課程的教學效果有很大的益處。
一、以簡單形象的內容作為課程的引入,上好第一堂課
俗話說,良好的開頭是成功的一半,在教育教學過程中也一樣[1]。然而,許多教師照本宣科,根據教材的編寫順序,開篇大量講授的是C語言的歷史、特點以及初學者難以理解的編程算法等內容。可是這樣的講授順序,已經抹殺了大多數學生對C語言的學習興趣和熱情,無形中增加了C語言教學的難度。建議在上第一堂課的時候就要將學生注意力提上來,因為大多數的高等院校都是大一就開設C語言,他們會用電腦,會打游戲,但編程對他們來說虛幻莫測,所以老師首先就應該消除他們的恐懼心理,建議老師用淺顯的語句來介紹C語言,你可以打比方:“C語言它是一種語言,跟我們的英語一樣,我們經常用英語寫作文,記述一件事情,C語言也一樣,它記述的也是過程,只不過它記述的計算過程。”C語言總共只有32個關鍵字,但功能強大,經久不衰,歷經數十年仍是主流高級開發語言,學習了C語言等于就為學生開啟了程序語言的大門,這時候學生感覺豁然開朗。其次,老師可以舉一兩個例子,通過多媒體演示出來,這樣學生不會再覺得C語言虛無縹緲,有了這些鋪墊,后續的語法、程序講解要容易得多。
二、根據學生的學習情況,由淺入深安排教學過程
在C語言教與學過程中,應以學生作為主體,深入了解學生的學習心理,及其對新知識新內容接受的過程。由淺入深循序漸進的安排課程、展開教學。在C語言課程中數據結構、運算符及表達式的相關內容最為基礎,也是非常重要,這部分內容掌握不好后續就很難進行。大多數老師在這部分的教學中,總是先行講授符合由淺入深的教學要求[2]。但是,沒有任何編程基礎,又不做任何簡單程序鋪墊的情況下,單純的講授數據類型、運算符及表達式等內容,很容易讓學生覺得知識性太強,內容太多太雜,枯燥無味,不好記憶,難以應用,加上這部分內容一般都安排靠前,弄不好很容易讓學生喪失興趣,興趣沒有了,后續的教學很難進行下去。
通過筆者多年的教學研究發現,該部分內容作為輔助教學的內容出現更為合適。在授課過程中,這部分內容先不作為主體內容進行講授,而是通過舉例程序當中所出現的數據類型、運算符及表達式等相關內容進行詳細的說明,并在閱讀程序時,引導學生自行查閱教材的相關內容,最后課程結束前進行詳細的對比總結。這樣,不僅能夠加強記憶,而且還培養了學生自我學習、解決問題的能力。
三、循序漸進以等級考試為中心開展教學
對于非計算機專業的學生來講,計算機等級既是要求,又可以用來衡量個人計算機的學習程度,在絕大多數高等院校更是授予學生學士學位的基本條件,可以想見,C語言的學習跟學生是息息相關的,由此也帶給了學生在學習C語言的過程中非常現實的出發點——通過計算機二級,了解了學生的期望之后,對于任課教師,在教學當中就應該以此作為根本目的,在講授了基礎知識之后,不妨多舉一些等級考試的原題作為例題來講解。
眾所周知,在C語言當中for循環語句功能非常強大,for語句除了能取代while語句跟 do…while語句之外,在循環嵌套當中for語句有它的獨到之處,例如試打印輸出以下圖形(2012年6月計算機等級考試試題):
1 2 3 4 5 4 3 2 1
1 2 3 4 3 2 1
1 2 3 2 1
1 2 1
1
剛開始三種循環語句學完的時候,學生根本不知道如何下手,但是將等級考試原題對學生誘惑巨大,建議老師采用循序漸進的方法來講,至少安排3個以上類似例題由淺及深來完成。
例1用for循環輸出1、2、……10
#include
void main()
{ int i;
for(i=1;i<=10;i++)
printf(\"%2d\",i);}
這里可以使用for語句的基本應用,輸出10個數,我們可以采用for語句來實現,更大再大也同樣for語句可以做到。在這里引導學生運用for語句可是實現一些有規律的數字的輸出。接下來再舉一例。
例2 打印輸出以下圖形:
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
在例1之后給出例2,在這里老師提出問題:“例2跟前面例題有什么相同以及不同?”,將學生的學習興趣提起來,接著提問“如何來解決?”,在例2中要打印這個三角形由數字組成,每行的數字又是一個遞增的數列,這跟例1是一樣的,應該也可以用for語句來解決,那么怎樣讓這樣的數列生成5行呢?由此順理成章的提出for語句的嵌套使用。用一個for語句控制輸出的行,行號從1到5,而每一行的數字就是從1到行號,到此給出程序:
#include
void main()
{ int i, j;
for(i=1;i<=5;i++)
{ for(j=1;j<=i;j++)
printf(\"%3d\",j);
printf(\"\\"); }
在學生有了for語句嵌套運用的了解之后,老師再結合等級考試原題來加深,這是至關重要的一個環節,更能激起學生的學生興趣,
例3:試打印輸出以下圖形:(2012年6月計算機等級考試試題)
1 2 3 4 5 4 3 2 1
1 2 3 4 3 2 1
1 2 3 2 1
1 2 1
1
那么例3又跟例2有什么不同以及相同呢?我們可以看到整體同樣也是5行,但是每一行不單是遞增或者遞減,而是先遞增后遞減,其次每行的輸出跟例2是倒過來的,中間的數字是從5到1,分析以上這些之后,老師提出同樣采用for語句的嵌套來實現,定義個外層的for語句來控制行的輸出,只不過在這里行號要從5到1,內層for語句以行號為坐標,對于每一行的輸出,其實我們可以分解為3個部分,如果我們要得到這樣一個形狀,內層的第一個for語句輸出空格,第二個for語句輸出遞增數列,第三個for語句輸出遞減數列,最后換行。程序如下:
#include
void main()
{ int i,j,k,m;
for(i=5;i>=1;i--)
{ for(j=1;j<=5-i;j++)
for(k=1;k<=i;k++)
printf(\"%2d\",k);
for(m=i-1;m>=1;m--)
printf(\"%2d\",m);
printf(\"\\");}
以等級考試為導向,采用這種循序漸進的方法,學生容易接受,而且能最大程度的激發學生學習興趣。這主要是針對等級考試的編程部分,在其他語法講解的過程,同樣也可以穿插等級考試的考題,處處給學生以啟發。
四、多階段逐漸強化上機實踐
要學好c程序設計不僅要掌握好理論知識,實驗教學更不容忽視[3]。通過上機實驗,不僅可幫助學生消化和鞏固課堂所學知識,也可幫助學生驗證學習中疑難問題,更重要的是可激發和提高學生學習c程序設計的興趣。為了提高上機的質量,必須克服上機的盲目性,提高教學效果,充分發揮學生學習的主觀能動性。
要做好實踐這一環節,首先就必須讓學生有足夠多的上機時間,其次講求由淺入深,逐步引導學生自主編程,由此建議將學生上機劃分為3個階段:1)環境熟悉期。主要是讓學生熟練掌握C語言的編譯和運行環境,現在實驗室主流的是Microsoft Visual C++ 6.0平臺跟Turbo CC++ 3.0平臺,讓學生熟悉這兩個平臺,并初步具備基本的程序調試能力,這一時期可以安排一到兩次課;2)語法訓練期。主要是通過簡單程序的調試運行,從程序的結果中掌握語法的使用,這期建議安排3次課左右;3)提高期。主要鍛煉自主解決問題的方法和過程,能進行初步的算法設計和實現。這是見成效的階段,檢驗學生C語言能力是否逐步在提高。為了以上三個環節能順利進行。教改中可采取的主要措施有:1)紀律嚴明。嚴格考勤,建立人與機器的固定對應的關系,隨時隨機查看學生編程的情況,每次上機進行登記,并作為實驗最終成績的參考;2)上機指導。在學生上機期間,如果有問題老師要及時給學生以指導,故要求老師跟學生緊密聯系,為學生服好務;3)考核環節。每次上機前都詳細規定了詳細的實踐任務和檢查內容,為了防治學生之間互相拷貝,檢查時不僅看程序運行的結果,更重要的是看解決問題的思路和具體的程序設計細節。根據程序運行和學生回答問題的情況,將上機成績劃分為優、良、中、及格、不及格五等。
結束語
在C語言程序設計教學中,我們要不再局限于單純介紹C 語言基本語法,而要本著面向未來的精神,把C語言作為一種實踐工具,以程序設計方法為主線,以語法和結構為核心,以能力培養和提高學習興趣為目標,注重理論與實踐的結合、先進性與基礎性的統一,變應試為應用。
參考文獻
[1] 蔡曉麗,陳舜青. 丁志云.計算機c語言實驗教學改革探討[j].電腦知識與技術,2010(5):4191-4192.
[2] 周欣欣. 程序設計類課程教學改革探索與實踐.科技信息[j],2012(2).
[3] 余冬梅. 基于c語言的計算機語言類課程的教學方法研究與實踐.現代計算機[j],2020(8):67-69.