范宏宇 何 晶
(安徽機電職業技術學院,安徽 蕪湖 241000)
C語言實踐教學方法淺談
范宏宇 何 晶
(安徽機電職業技術學院,安徽 蕪湖 241000)
C語言是高等院校計算機專業的必修課程,在整個學科體系中占據重要的地位。為適應高職院校以實踐為目的的教學需要,文章提出以問題為中心,通過閱讀、理解、分析、擴展的方式,使同學們理解并掌握知識點,并能夠將C語言應用到現實問題的解決中。
C語言;實踐;教學
C語言是一門被廣泛使用的計算機程序語言。它具有語法簡潔、結構豐富、編程效率高、可移植性好等特點。在高職院校中引入C語言教學,不但能夠使學生們掌握一門基礎的編程語言,為以后其他高級編程語言打好基礎,還能夠培養和鍛煉同學們的思維能力。
高職院校C語言教學的目標是讓同學們掌握C編程語言的基礎語法和編程思想,熟悉基本算法并能夠根據問題正確選擇、組合算法;能夠獨立編寫代碼、調試程序,測試數據;掌握一定的自學能力。對高職學生而言,C語言程序設計是一門實踐性很強的課程。
在學習的過程中,C語言具有高級語言的特點,涉及到概念較多,語法規則繁雜,使用靈活,導致編程容易出錯,且不易檢驗。所以,C語言的教與學一直都是教師和學生公認的困難課程。尤其高職院校學生基礎相對較差,學習起來更加困難,學生們普遍認為C 語言枯燥難學、概念復雜、容易出錯,尤其在面對問題時無從下手,學生的畏難、厭學情緒使得教學困難重重。這些都是C 語言課程教學改革是所面臨的問題。
C語言教學的內容包括語法基礎、數據類型、流程控制、數組、函數、指針、文件等。國內經典的C語言教材都是按照以上次序進行分章,每一章節都是采用理論概念、實例講解、課后習題的結構整理。這種理論—>實例—>習題的三步教學方式很符合我們教與學的習慣,但是大量的難以理解的概念、術語、語法規則的介紹,枯燥無味的例題分析往往使剛接觸計算機程序語言的同學“不知所云”,很多同學學習后仍不能理解程序究竟為何物,甚至不明白一個程序到底幫我們解決了什么問題,更不能利用程序語言去解決其他問題,漸漸就失去了學習的興趣。
程序語言的學習和其他語言的學習一樣,例如英語,首先要掌握單詞和語法,然后靈活的使用單詞,根據語法規則組成各式各樣的語句。同樣,程序語言需要掌握關鍵字、結構語句和語法規則,學習C語言的目的就是使用C語言的幾種基本數據類型和簡潔的語法結構,去靈活運用解決各種問題。這就要求教學的重點不能都放在概念規則的講授上,應放在引導學生主動思考,解決問題上。應采用化繁為簡、先入為主的思想,設計出一個知識點精準、有實用性、易懂的程序,使同學們能夠根據已有的知識體系構建相應的認知結構,然后采用“照葫蘆畫瓢”的方法修改、編寫出相似的程序,從中體會并學習到其中的知識點和問題的解決方式,在以后遇到相似的問題,可以通過分析獨立解決。這樣,學生從中不僅能獲得駕馭程序的成就感,還能更好掌握所涉及的知識點。
在C語言程序設計教學過程中,隨著授課的深入,難度越來越大,想要讓同學理解并接受知識點,需要教學內容被呈現的過程中,同時介紹內容的框架結構和其他知識點之間的聯系,使授課的內容組織轉化成有著意義關聯的各個部分。這種結構框架從底層的單個知識點的理解,到中層的一類問題的分析和解決,以及最后整體C語言知識點的結構和框架,都需要逐層深入舉例講解。
另一方面,理論—>實例—>習題的教學結構更偏向于讓同學被動接受理論,而忽略了培養同學的主動思考和實踐的能力。要想把教學內容植入同學的知識體系,需要以實例為中心,采用引導的方式,讓同學在學習中慢慢理解與體會知識點,并通過獨立分析解決問題,理解并滲透到知識中,從而更好發揮同學的主觀能動性。要求講解中選好例題,引導同學們逐步執行以下步驟,如圖1所示:

圖1 學習問題解決方法的步驟
根據以上步驟,可以幫助同學們學習解決問題的方法。那么,如何根據知識點之間的關系、問題的類型和程序的算法,來歸類選擇實例是教學引導的重點。本文就以本課程第一個編程瓶頸,C語言循環語句的應用來說明問題。
循環程序設計章節知識點不多,但語句靈活多樣,在現實問題方面應用非常廣泛,在后期的程序設計的學習中也占有很重要的地位。在學習的過程中,如何靈活的將知識應用于問題是教學的主要目的,本章通過大量的例題解釋說明循環語句的應用,并提出解決問題的各種方案。要想靈活掌握知識點,首先要從問題上分析并分類。本章的例題根據問題的類型分為以下三類:
(1)遍歷類:用循環語句遍歷每一種可能的數值,然后判斷查找滿足要求的數據。經典例題:打印水仙花數。用for語句在100-999之間遍歷輸出滿足條件的數。遍歷類問題是循環的基本問題,也是最常用的問題,在現實中有很廣泛的應用。
(2)有序序列累加類:一組有一定序列關系的數累加求和。經典例題:1+2+3+…+99+100。累加問題一般用于計算數據。
(3)循環中斷類:在一定條件中循環并判斷,滿足條件則跳出循環語句,根據判斷循環語句的結束形式,判斷分析結果。經典例題:求100以內的素數,遍歷2-100以內的數,每一個數判斷是否能夠被除開,一旦能除開,則跳出循環。根據循環的結束形式,判斷所求數是否除開,不能被除開的數即為素數。循環中斷類問題比較難理解,但是在現實問題中應用非常廣泛。
每一種題型都采用舉例—>擴展—>分析—>解決問題,幾個步驟分析教學:
4.1 實例的選擇
為了更好的引入內容,選擇有代表性的、容易理解的、以往學習中有接觸過的例子來介紹問題。例如:累加類題目的1+2+3+...+99+100,該問題曾在第一章算法的講解中有提及;遍歷類題目打印100以內的3的倍數,可以用for語句中包含if語句簡單的實現,非常適合初學者的入門。
4.2 擴展分析
當掌握一種問題的第一個實例后,如立刻介紹該類型問題的新實例,很容易讓同學發生混淆,進而很難找到問題的核心點和關鍵點。為了讓知識點一步一步的被同學們掌握并促發同學們去主動思考和理解,我們采用延展原例題的方式,對知識點進行擴展分析。
例如:在累加問題中求1~100之和,可以用while語句實現,程序如圖2所示。

圖2 求1~100之和
文中用“序列標記”來稱呼在有有序序列中的關鍵序列,一般為等比序列或者等差序列,例如該例題為步長值為1的等差序列,在累加問題中,序列標記一般作為while的循環條件,包括循環結束條件,和變量步長值的變化。文中“累加元素”來記錄累加序列中最終被sum相加的值,在該例題中,序列標記與累加元素一直,均為從1到100步長值為1的等差序列。
修改程序的第一步程序 1~100的元素求和可擴展為求1~100之內的偶數之和,即求 10098...642 +++++ ,由于“序列標記”變為步長值為2的等差序列,“累加元素”與序列標記一直,所以只需要在圖1程序的基礎上,將i++修改成i=i+2即可,如圖3所示:

圖3 求1~100之間偶數和

圖4 求1~100之間偶數的倒數和

圖5 求1~100之間偶數的加減運算
在這個逐步延展深入的過程中,同學們能夠一步一步的去解決,盡管每一次改動很小,但是潛移默化的幫助同學們理解并實現了復雜的累加計算。
4.3 分類總結
隨著程序需求的細微的變化,可以讓學生在原有模型的基礎上,慢慢的改動并領會新程序。為了使知識點更清晰的被同學們掌握,需要教師引導同學們分析幾種程序的編寫方法。例如前面的有序序列累加問題的特點如下:
(1)求和序列一般存在某種基礎序列關系,上文中稱之為“序列標記”,例如等比序列或等差序列,一次作為while循環開始和結束的依據,并作為循環變化的依據,如 i++等操作。
(2)每次相加的元素,上文中稱之為“累加元素”,是在“序列標記”基礎上進行的一系列的變化,可能是倒數、正負、相加、相減等操作。
一般解決這類問題,要觀察序列的變化規律,然后按照如下步驟:
(1)初始定義必須要變量,其中包括 sum求和“序列標記”變量 i;以及根據程序需要定義的特殊變量,例如在正負值的變換中,定義整型變量flag存儲符號變化。
(2)使用“序列標記”變量實現循環的起點和終點;
(3)次循環用sum加本次循環的“累加元素”;
(4)改變存儲有序序列值的 “序列標記”變量,使其通過累加或者乘法等操作滿足下一次循環的需要。
通過這種引領式的分析分類,可以將這類問題的特征和解決方法一一展現,讓同學們可以在遇到此類問題時,擺脫無處下手的困境。
4.4 問題擴展
學習 C語言的最終目的是用程序語言解決現實中的問題,這就需要授課的內容在原有問題基礎上向現實問題擴展。例如,在循環中斷問題中,實例是打印100以的內素數,該例題盡管能良好的說明這類問題的特征,但是求素數本身在現實生活中并沒有實際意義,這就需要教師提供更現實的問題來補充說明,以加深和擴展該類問題的理解和應用。
在實例的選擇上,一般選擇比較常見,且比較容易實現的問題。例如生活中經常會遇到密碼登陸的問題,就是循環中斷方法在生活中的經典應用。一般在登錄一些軟件或者網頁中,需要輸入用戶密碼,三次以內輸入正確則可以正確登陸,一旦三次密碼輸入錯誤,則登錄失敗。
我們可以設置三層循環,用count計數器來實現循環次數,每次循環都判斷輸入密碼是否正確,一旦正確則跳出循環,否則繼續循環,直到計數器滿3跳出循環。在循環結束后判斷計數器的值來判斷是否在三次以內輸入正確的密碼。
這種問題的提出和解決,更能激發同學的學習興趣,并能在解決問題的過程中舉一反三,在以后遇到類似的問題,可以獨立去解決。從而達到教學的根本目的。
教學是一門藝術,它是教師綜合素質的體現。為了讓 C語言的教學以實踐為方法和目的,要求教師從問題本身出發,引導同學們理論聯系實踐,掌握歸納問題、分析問題、解決問題的方法。以分析解決問題為手段,以激發同學們面對知識學習的獨立性,積極性,潛能為目的,讓同學們接納并掌握這門語言,必能取得良好的教學成果。
[1] 譚浩強.C程序設計[M].北京:清華大學出版社,2002,6.
[2] (美)Stephen Prata. C Primer Plus(第五版)[M] .北京:人民郵電出版社,2005,2
[3] 李靜雯.關于提高 C 語言教學質量的探討[J].計算機教育,2007,(4):1149-1150.
A brief discussion on the teaching of C programming practice
The C language ,occupying an important position in the discipline system ,is a compulsory courses for computer major in the institutions of higher learning. In order to meet the teaching specification which takes practic e as its purpose, this paper centers around the problem bythe way of reading, understanding and analyzing, making s tudents understand and grasp the knowledge points and applying C language to the settlement of practical problems.
C language; Practice; Teaching
G712
A
1008-1151(2012)06-0188-03
2012-04-14
范宏宇(1981-),女,內蒙古人,安徽機電職業技術學院信息工程系助教。