李鑫 謝健
摘要“C程序設計”是計算機類專業新生最早接觸的專業基礎課之一,是否能以一種恰當的方式將學生引入全新的專業知識領域,對本門課程乃至后續的專業課程都至關重要。本文根據作者的教學實踐經驗,以學生的基本情況分析為依據,結合C程序設計課程的知識特征,提出一種基于數學函數的引導式教學探索,以期實現新生從中學到大學的順利過渡,激發其專業學習的興趣。
關鍵詞 C程序設計 本科教學 遞進式教學
中圖分類號:G642 文獻標識碼:A DOI:10.16400/j.cnki.kjdkx.2016.07.018
0引言
對于計算機類專業的新生而言,“C程序設計”是最早接觸的專業基礎課之一,學生對該專業課程的學習具有標桿性作用,對其后續專業課程的學習產生具有重要的影響,對學生的專業能力的培養至關重要。然而,由于部分新生在中學階段對計算機專業知識的了解過于欠缺,若按照傳統教材的模式開展教學,計算機專業術語及程序設計語言的概念細節將會導致與中學知識儲備的脫節,影響學生學習興趣與動力。
本文擬從學生基礎出發,探索基于中學函數概念的漸進式程序設計教學,引導學生逐漸向大學計算機專業的學習方式與認知方式轉化。
此外,內存分配是C程序設計相關內容的本質核心,例如變量、數據類型、函數、數組、指針、結構體等。在充分了解內存分配本質的基礎上,對上述知識點的學習大有裨益,且有利于培養分析程序動態執行的能力。
作者基于自我學習經歷以及對大一新生的C程序設計課程教學經驗,分析新生面臨的若干問題,思考中學知識儲備與大學教學方式的差異與關系,針對C程序設計的特點,提出基于數學函數的引導式教學;并圍繞內存分配這一核心知識,探索基于內存解析的闡釋性教學過程。
1學生基本情況分析
對于剛入校的新生而言,經歷了瘋狂的高考和長假,對大學階段的專業學習仍是比較懵懂的,這集中體現在如下幾個方面。
(1)思想方面:新生剛剛經歷了緊張的高考以及愜意的長假,入學時仍有部分同學難以集中精力專注于學習中。若在初學的專業課上缺少恰當的過渡和引導,一開始便如同天書一般,可能會滋生學生的厭學情緒,影響后續專業課程的學習成效。
(2)學習方式方面:新生在中學階段的學習,以學習經典知識為主,主要是教師的講述式傳授并輔以大量的練習,對知識背后的原理較少關注。然而,這種方式并不適用于大學階段的專業學習。大學的專業學習需要深挖知識背后的原理,并自主學習廣泛的知識。因此,“C程序設計”課程應著重解釋程序設計語言的機制原理,并引導學生自主開展實踐,在實踐中進行探索和思考。
(3)基礎知識儲備方面:客觀來講,雖然現在的信息化水平快速提升,中學生的計算機技能水平也逐年提高。然而,由于高考的壓力和地區發展的差異,仍有相當比例的新生沒有掌握基本的計算機基礎知識,抑或只是熟悉了基本的計算機應用操作,對計算機專業性的結構與描述仍很欠缺。在中學的知識體系中,與“C程序設計”課程最相關的概念當屬中學數學里的函數概念,且函數是中學數學中最重要的內容,新生對此必不陌生。因此,以中學數學中的函數概念為起始點,逐漸引導學生熟悉計算機(類)專業術語,程序設計的專業術語與過程,并完成對計算機專業認知的轉化。
基于上述學生基本情況分析,在尊重客觀事實的基礎上,開展基于函數概念的引導式教學,降低新生對新知識的理解難度,推動新生專業學習的過渡;開展圍繞以內存分配為核心的程序設計語言機理分析,講述程序及程序設計的(部分)執行本質,提高新生對計算機運行原理的基本認識以及專業認知。
2基于數學函數的引導式教學
在“C程序設計”課程中,函數作為一種功能抽象的手段,與中學數學中的函數概念有相通之處。數學函數中,函數名、自變量、應變量是其基本要素,本文擬采用如下方式開展進行引導式教學:(1)以數學函數的基本概念為基礎,講授程序(main函數)的功能;并在數學函數單一輸出的基礎上進行擴展,泛化函數“輸出”(返回值)的概念。以“將一個程序看作一個函數”的方式實現從數學函數到程序設計函數概念的過渡,并介紹程序的基本結構。(2)以數學函數中的函數名、自變量為基礎,講解函數名、變量名的命名及其規則,并逐漸擴展為一般標識符的命名及其規則,初步引入語法的概念。(3)以函數的具體展開形式為基礎,引出過程式程序設計以及順序結構的基本概念。(4)以數學函數中自變量的定義域概念為基礎,引出數據類型的概念。(5)以一元數學函數和多元數學函數的概念為基礎,講授函數參數及函數定義的知識。(6)以數學函數的抽象表示與自變量取值為基礎,引出函數調用的概念。(7)以數學函數的復合運算為基礎,引出函數嵌套與遞歸調用的知識。(8)以數學函數中函數的分段定義為基礎,引出條件選擇控制語句的知識;并由此擴充為程序的選擇結構以及循環結構。
基于上述知識的介紹,使得學生初步具備了程序設計的基本知識,并促使其向專業階段的學習過渡,為更復雜的數組操作、指針操作等內容提供支撐。
3基于內存分析的闡釋性教學
內存分配是程序設計中變量、數組、函數、指針等內容背后的核心本質。為了加強學生對程序設計本質的理解,有必要闡述清楚內存分配的基本概念與基本形式。(1)首先簡述典型的計算機馮·諾伊曼結構,突出內存的功能及其重要性,并闡述輸入/輸出的概念,為后續講解文件操作進行鋪墊。(2)以數字在計算機中的存儲與運算為基礎,講解計算機基本的工作方式以及二進制形式的數據表示與存儲。(3)以變量的存儲為切入點,將變量的定義、初始化、值更改與內存的分配、初始化、更新相結合;并以變量的賦值為例,講述變量問的值傳遞以及內存空間分配的本質。(4)結合數學函數的概念,講述函數的聲明、定義和調用等操作,闡述函數參數在內存中的存儲以及變量生存期和作用域的概念,講解函數參數值傳遞的內存本質。(5)針對數組概念的講授,闡述內存連續分配的含義,結合數組訪問的方式,解釋數據越界訪問的原理。(6)針對指針的概念,明確指針作為一種數據類型,其自身的指針變量具有特定的內存空間,并區分指針變量的內存空間與所指向內存空間的差異和關系。
4課程規劃
在實際教學過程中,應以程序設計自身的邏輯為主線,將上述兩方面內容有機地融合到課程講授中。此外,實踐是程序設計課程的重要構成部分,應盡早讓學生上機實踐,但又必須讓學生先具備基本的程序設計知識。以筆者承擔的40學時C程序設計理論課為例,擬將課程設計如下:
(1)課程概述(2學時)。以調整學生的學習心態為目的。通過調研學生對計算機專業知識的了解。(2)從數學到計算機(4學時)。以經典的馮·諾依曼結構為出發點,講解計算機的基本工作原理以及內存的功能和重要性。以數學中的十進制加法運算為例,講述數據(數字)在計算機中的存儲方式、運算方式,從而形成對二進制的認知,以及機器語言的基本概念和背后蘊含的原理。(3)C程序設計速覽(2學時)。以數學中的函數概念為出發點,將程序類比成函數,講解基本的輸入、輸出、返回值等概念;以自變量及其定義域為基礎,簡述變量的定義、變量類型等概念:以函數的展開形式為基礎,講述程序設計基本的順序結構及過程式程序設計的基本概念。此后,學生應具備基本的上機實踐能力,初始階段的上機實踐當以模仿為主,并逐步自我探索。(4)基本語法(4學時)。以上一章節為基礎,系統講述C語言程序設計中的基本語法,包括標識符命名規則、變量、數據類型、運算符、表達式、語句等。并以變量的內存分配為例,講述變量類型與內存分配的關系,賦值語句及其內存更新的關系。(5)控制語句(4學時)。以數學函數中的分段函數為基礎,講解條件選擇語句的含義與功能,并引入程序設計的選擇結構。以數學中的求和運算為例,引出循環語句并講述其功能,闡釋控制結構的含義。(6)函數(4學時)。如上所述,結合數學函數的基本概念,解析函數名、函數參數、參數類型、返回值、函數調用等基本概念。(7)后續知識點:數組、指針、自定義、文件讀寫操作等。
5小結
本文針對大一新生在心理、基礎知識儲備、學習方式等方面情況,提出了一種基于數學函數的引導式教學思路,筆者將結合實際教學,進一步完善并優化這一教學方法。