普通高等院校C語言程序設計課程教學問題剖析及對策研究
計算機教育
作者:黎利輝 黃海 王聯芳
摘要:針對普通高等院校C語言程序設計課程的教學,提出了三個具體的教學問題:①對於語法與算法的關係處理;②對編程實踐的引導;③教學過程中的趣味性。對這些問題分別提出了具體、有針對性的解決辦法,在實際的教學過程中采用這些方法收到了較好的效果。這些方法對普通高校C語言程序課程的教學來說具有普遍意義。
關鍵詞: C語言;語法;算法;教學;編程實踐;趣味性
中圖分類號:G424 文獻標誌碼:A 文章編號:1006-8228(2013)08-58-03
0 引言
目前幾乎所有普通高等院校(本文指一般本科院校或高職高專院校)的理工科專業都開設了C語言程序設計這門課程,在有的學校,這門又叫高級語言程序設計。在學習這門課之前,學生基本上都沒有編程知識,對他們來說這門課程學習難度較大。普通高等院校的學生學習素質整體偏低,主要表現在兩點:①學習的主動性較差;②沒有足夠的毅力來戰勝學習過程中所遇到的困難。在這樣的背景下,很多講授這門課程的教師不能因地製宜地組織教學,出現了一些問題,本文歸納了這些問題,並提出了相應的解決辦法,與各同行商榷。
1 對語法與算法的關係處理不當
C語言程序設計這門課有兩個主要教學目標:①掌握C語言的基本語法;②掌握一些基本的算法。“算法是對特定問題求解步驟的一種描述,它是指令的有限序列,其中每一條指令表示一個或多個操作”[1]。“算法是靈魂,不掌握算法就像是無米之炊。語言是工具,不掌握語言,編程就成為空中樓閣”[2]。這兩個目標都很重要,但相對來說,第一個目標難度偏低,第二個目標難度偏高。
我們對普通高等院校C語言程序設計課堂進行訪查發現,有些教師將語法和算法孤立開來進行講解,其結果是,單純地講語法,學生會覺得知識點零散,並且枯燥無味;單純地講算法,學生不知道算法如何用語言來實現。
在教學過程中,為了能體現教學的趣味性,將零散的知識點有效地組織起來,以吸引學習主動性和學習能力都不強的學生很好地參與到學習過程中來,采用的方式是以程序設計為主線,將算法和語法結合起來講授。先提出問題,再分析解決這個問題的思路與步驟,即算法分析,然後再用C語言來實現,在實現的過程中將重點語法進行講解。比如在開始講解循環這一章時,針對“輸出50000個星號”這一問題,首先進行算法分析:一條輸出語句輸出一個星號,把這個操作重複50000次,重複的操作需要利用循環來控製,這樣算法分析就到此為止。接著教師要現場編寫程序,通過具體的程序代碼,來講解for語句的語法細節:①三個表達式各自的作用及執行流程;②三個表達式省略的情況(要簡單地講解,不能讓學生陷入語法的泥潭中)。
在教學過程中,很多教師過於側重於語法細節的講授,而忽略了對學生基本算法思維的訓練。比如花很多時間來講解各種數據類型在不同的編譯環境中所占的存儲空間,其實數據類型隻需要掌握最常用的幾種,並且知道每一種數據類型的數值範圍有一定限製即可,不必深究具體的數值範圍是多少和每種編譯環境下每種數據類型各占多少個字節。一旦教師把學生的學習精力導向這些繁瑣的語法細節,就會使學生感覺這門課枯燥無味,對於普通高校的學生,這樣的授課方式會消磨他們的學習積極性。
從整體來說,語法細節的講授應當盡量弱化(弱化的程度以編程基本夠用為標準),要將主要精力放在培養學生用C語言來解決實際問題的能力上(即對算法的訓練),學生有了一定的基礎後,可以自學所需的語法細節。在語法與算法結合的教學過程中,語法與算法側重點的選擇,在不同的時期是不一樣的。如果以一個學期為周期,在學期初教師要花主要精力來引導學生熟悉C語言的語法,比如在什麼時候打逗號、分號、空格,如何進行代碼縮進等,這一過程約花四分之一個學期。學生熟悉了C語言的常見語法規律和開發環境後,教師應當有意識的側重於算法教學。如果以每一章的教學過程為周期,語法與算法的側重點也是不一樣的。在一章的教學初期,應當以語法為主,後期應當以算法為主。
2 對學生編程實踐引導不足
C語言程序設計是一門實踐性非常強的課程,對於入門者最好的學習方式就是多動手編寫程序和調試程序,可是很多教師對學生入門階段的編程實踐引導不足,主要表現在兩個方麵。
2.1 授課時過於依賴課件,現場編程示範不足