范宏宇 何 晶
(安徽機電職業(yè)技術(shù)學院,安徽 蕪湖 241000)
C語言實踐教學方法淺談
范宏宇 何 晶
(安徽機電職業(yè)技術(shù)學院,安徽 蕪湖 241000)
C語言是高等院校計算機專業(yè)的必修課程,在整個學科體系中占據(jù)重要的地位。為適應(yīng)高職院校以實踐為目的的教學需要,文章提出以問題為中心,通過閱讀、理解、分析、擴展的方式,使同學們理解并掌握知識點,并能夠?qū)語言應(yīng)用到現(xiàn)實問題的解決中。
C語言;實踐;教學
C語言是一門被廣泛使用的計算機程序語言。它具有語法簡潔、結(jié)構(gòu)豐富、編程效率高、可移植性好等特點。在高職院校中引入C語言教學,不但能夠使學生們掌握一門基礎(chǔ)的編程語言,為以后其他高級編程語言打好基礎(chǔ),還能夠培養(yǎng)和鍛煉同學們的思維能力。
高職院校C語言教學的目標是讓同學們掌握C編程語言的基礎(chǔ)語法和編程思想,熟悉基本算法并能夠根據(jù)問題正確選擇、組合算法;能夠獨立編寫代碼、調(diào)試程序,測試數(shù)據(jù);掌握一定的自學能力。對高職學生而言,C語言程序設(shè)計是一門實踐性很強的課程。
在學習的過程中,C語言具有高級語言的特點,涉及到概念較多,語法規(guī)則繁雜,使用靈活,導致編程容易出錯,且不易檢驗。所以,C語言的教與學一直都是教師和學生公認的困難課程。尤其高職院校學生基礎(chǔ)相對較差,學習起來更加困難,學生們普遍認為C 語言枯燥難學、概念復雜、容易出錯,尤其在面對問題時無從下手,學生的畏難、厭學情緒使得教學困難重重。這些都是C 語言課程教學改革是所面臨的問題。
C語言教學的內(nèi)容包括語法基礎(chǔ)、數(shù)據(jù)類型、流程控制、數(shù)組、函數(shù)、指針、文件等。國內(nèi)經(jīng)典的C語言教材都是按照以上次序進行分章,每一章節(jié)都是采用理論概念、實例講解、課后習題的結(jié)構(gòu)整理。這種理論—>實例—>習題的三步教學方式很符合我們教與學的習慣,但是大量的難以理解的概念、術(shù)語、語法規(guī)則的介紹,枯燥無味的例題分析往往使剛接觸計算機程序語言的同學“不知所云”,很多同學學習后仍不能理解程序究竟為何物,甚至不明白一個程序到底幫我們解決了什么問題,更不能利用程序語言去解決其他問題,漸漸就失去了學習的興趣。
程序語言的學習和其他語言的學習一樣,例如英語,首先要掌握單詞和語法,然后靈活的使用單詞,根據(jù)語法規(guī)則組成各式各樣的語句。同樣,程序語言需要掌握關(guān)鍵字、結(jié)構(gòu)語句和語法規(guī)則,學習C語言的目的就是使用C語言的幾種基本數(shù)據(jù)類型和簡潔的語法結(jié)構(gòu),去靈活運用解決各種問題。這就要求教學的重點不能都放在概念規(guī)則的講授上,應(yīng)放在引導學生主動思考,解決問題上。應(yīng)采用化繁為簡、先入為主的思想,設(shè)計出一個知識點精準、有實用性、易懂的程序,使同學們能夠根據(jù)已有的知識體系構(gòu)建相應(yīng)的認知結(jié)構(gòu),然后采用“照葫蘆畫瓢”的方法修改、編寫出相似的程序,從中體會并學習到其中的知識點和問題的解決方式,在以后遇到相似的問題,可以通過分析獨立解決。這樣,學生從中不僅能獲得駕馭程序的成就感,還能更好掌握所涉及的知識點。
在C語言程序設(shè)計教學過程中,隨著授課的深入,難度越來越大,想要讓同學理解并接受知識點,需要教學內(nèi)容被呈現(xiàn)的過程中,同時介紹內(nèi)容的框架結(jié)構(gòu)和其他知識點之間的聯(lián)系,使授課的內(nèi)容組織轉(zhuǎn)化成有著意義關(guān)聯(lián)的各個部分。這種結(jié)構(gòu)框架從底層的單個知識點的理解,到中層的一類問題的分析和解決,以及最后整體C語言知識點的結(jié)構(gòu)和框架,都需要逐層深入舉例講解。
另一方面,理論—>實例—>習題的教學結(jié)構(gòu)更偏向于讓同學被動接受理論,而忽略了培養(yǎng)同學的主動思考和實踐的能力。要想把教學內(nèi)容植入同學的知識體系,需要以實例為中心,采用引導的方式,讓同學在學習中慢慢理解與體會知識點,并通過獨立分析解決問題,理解并滲透到知識中,從而更好發(fā)揮同學的主觀能動性。要求講解中選好例題,引導同學們逐步執(zhí)行以下步驟,如圖1所示:
圖1 學習問題解決方法的步驟
根據(jù)以上步驟,可以幫助同學們學習解決問題的方法。那么,如何根據(jù)知識點之間的關(guān)系、問題的類型和程序的算法,來歸類選擇實例是教學引導的重點。本文就以本課程第一個編程瓶頸,C語言循環(huán)語句的應(yīng)用來說明問題。
循環(huán)程序設(shè)計章節(jié)知識點不多,但語句靈活多樣,在現(xiàn)實問題方面應(yīng)用非常廣泛,在后期的程序設(shè)計的學習中也占有很重要的地位。在學習的過程中,如何靈活的將知識應(yīng)用于問題是教學的主要目的,本章通過大量的例題解釋說明循環(huán)語句的應(yīng)用,并提出解決問題的各種方案。要想靈活掌握知識點,首先要從問題上分析并分類。本章的例題根據(jù)問題的類型分為以下三類:
(1)遍歷類:用循環(huán)語句遍歷每一種可能的數(shù)值,然后判斷查找滿足要求的數(shù)據(jù)。經(jīng)典例題:打印水仙花數(shù)。用for語句在100-999之間遍歷輸出滿足條件的數(shù)。遍歷類問題是循環(huán)的基本問題,也是最常用的問題,在現(xiàn)實中有很廣泛的應(yīng)用。
(2)有序序列累加類:一組有一定序列關(guān)系的數(shù)累加求和。經(jīng)典例題:1+2+3+…+99+100。累加問題一般用于計算數(shù)據(jù)。
(3)循環(huán)中斷類:在一定條件中循環(huán)并判斷,滿足條件則跳出循環(huán)語句,根據(jù)判斷循環(huán)語句的結(jié)束形式,判斷分析結(jié)果。經(jīng)典例題:求100以內(nèi)的素數(shù),遍歷2-100以內(nèi)的數(shù),每一個數(shù)判斷是否能夠被除開,一旦能除開,則跳出循環(huán)。根據(jù)循環(huán)的結(jié)束形式,判斷所求數(shù)是否除開,不能被除開的數(shù)即為素數(shù)。循環(huán)中斷類問題比較難理解,但是在現(xiàn)實問題中應(yīng)用非常廣泛。
每一種題型都采用舉例—>擴展—>分析—>解決問題,幾個步驟分析教學:
4.1 實例的選擇
為了更好的引入內(nèi)容,選擇有代表性的、容易理解的、以往學習中有接觸過的例子來介紹問題。例如:累加類題目的1+2+3+...+99+100,該問題曾在第一章算法的講解中有提及;遍歷類題目打印100以內(nèi)的3的倍數(shù),可以用for語句中包含if語句簡單的實現(xiàn),非常適合初學者的入門。
4.2 擴展分析
當掌握一種問題的第一個實例后,如立刻介紹該類型問題的新實例,很容易讓同學發(fā)生混淆,進而很難找到問題的核心點和關(guān)鍵點。為了讓知識點一步一步的被同學們掌握并促發(fā)同學們?nèi)ブ鲃铀伎己屠斫?,我們采用延展原例題的方式,對知識點進行擴展分析。
例如:在累加問題中求1~100之和,可以用while語句實現(xiàn),程序如圖2所示。
圖2 求1~100之和
文中用“序列標記”來稱呼在有有序序列中的關(guān)鍵序列,一般為等比序列或者等差序列,例如該例題為步長值為1的等差序列,在累加問題中,序列標記一般作為while的循環(huán)條件,包括循環(huán)結(jié)束條件,和變量步長值的變化。文中“累加元素”來記錄累加序列中最終被sum相加的值,在該例題中,序列標記與累加元素一直,均為從1到100步長值為1的等差序列。
修改程序的第一步程序 1~100的元素求和可擴展為求1~100之內(nèi)的偶數(shù)之和,即求 10098...642 +++++ ,由于“序列標記”變?yōu)椴介L值為2的等差序列,“累加元素”與序列標記一直,所以只需要在圖1程序的基礎(chǔ)上,將i++修改成i=i+2即可,如圖3所示:
圖3 求1~100之間偶數(shù)和
圖4 求1~100之間偶數(shù)的倒數(shù)和
圖5 求1~100之間偶數(shù)的加減運算
在這個逐步延展深入的過程中,同學們能夠一步一步的去解決,盡管每一次改動很小,但是潛移默化的幫助同學們理解并實現(xiàn)了復雜的累加計算。
4.3 分類總結(jié)
隨著程序需求的細微的變化,可以讓學生在原有模型的基礎(chǔ)上,慢慢的改動并領(lǐng)會新程序。為了使知識點更清晰的被同學們掌握,需要教師引導同學們分析幾種程序的編寫方法。例如前面的有序序列累加問題的特點如下:
(1)求和序列一般存在某種基礎(chǔ)序列關(guān)系,上文中稱之為“序列標記”,例如等比序列或等差序列,一次作為while循環(huán)開始和結(jié)束的依據(jù),并作為循環(huán)變化的依據(jù),如 i++等操作。
(2)每次相加的元素,上文中稱之為“累加元素”,是在“序列標記”基礎(chǔ)上進行的一系列的變化,可能是倒數(shù)、正負、相加、相減等操作。
一般解決這類問題,要觀察序列的變化規(guī)律,然后按照如下步驟:
(1)初始定義必須要變量,其中包括 sum求和“序列標記”變量 i;以及根據(jù)程序需要定義的特殊變量,例如在正負值的變換中,定義整型變量flag存儲符號變化。
(2)使用“序列標記”變量實現(xiàn)循環(huán)的起點和終點;
(3)次循環(huán)用sum加本次循環(huán)的“累加元素”;
(4)改變存儲有序序列值的 “序列標記”變量,使其通過累加或者乘法等操作滿足下一次循環(huán)的需要。
通過這種引領(lǐng)式的分析分類,可以將這類問題的特征和解決方法一一展現(xiàn),讓同學們可以在遇到此類問題時,擺脫無處下手的困境。
4.4 問題擴展
學習 C語言的最終目的是用程序語言解決現(xiàn)實中的問題,這就需要授課的內(nèi)容在原有問題基礎(chǔ)上向現(xiàn)實問題擴展。例如,在循環(huán)中斷問題中,實例是打印100以的內(nèi)素數(shù),該例題盡管能良好的說明這類問題的特征,但是求素數(shù)本身在現(xiàn)實生活中并沒有實際意義,這就需要教師提供更現(xiàn)實的問題來補充說明,以加深和擴展該類問題的理解和應(yīng)用。
在實例的選擇上,一般選擇比較常見,且比較容易實現(xiàn)的問題。例如生活中經(jīng)常會遇到密碼登陸的問題,就是循環(huán)中斷方法在生活中的經(jīng)典應(yīng)用。一般在登錄一些軟件或者網(wǎng)頁中,需要輸入用戶密碼,三次以內(nèi)輸入正確則可以正確登陸,一旦三次密碼輸入錯誤,則登錄失敗。
我們可以設(shè)置三層循環(huán),用count計數(shù)器來實現(xiàn)循環(huán)次數(shù),每次循環(huán)都判斷輸入密碼是否正確,一旦正確則跳出循環(huán),否則繼續(xù)循環(huán),直到計數(shù)器滿3跳出循環(huán)。在循環(huán)結(jié)束后判斷計數(shù)器的值來判斷是否在三次以內(nèi)輸入正確的密碼。
這種問題的提出和解決,更能激發(fā)同學的學習興趣,并能在解決問題的過程中舉一反三,在以后遇到類似的問題,可以獨立去解決。從而達到教學的根本目的。
教學是一門藝術(shù),它是教師綜合素質(zhì)的體現(xiàn)。為了讓 C語言的教學以實踐為方法和目的,要求教師從問題本身出發(fā),引導同學們理論聯(lián)系實踐,掌握歸納問題、分析問題、解決問題的方法。以分析解決問題為手段,以激發(fā)同學們面對知識學習的獨立性,積極性,潛能為目的,讓同學們接納并掌握這門語言,必能取得良好的教學成果。
[1] 譚浩強.C程序設(shè)計[M].北京:清華大學出版社,2002,6.
[2] (美)Stephen Prata. C Primer Plus(第五版)[M] .北京:人民郵電出版社,2005,2
[3] 李靜雯.關(guān)于提高 C 語言教學質(zhì)量的探討[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-),女,內(nèi)蒙古人,安徽機電職業(yè)技術(shù)學院信息工程系助教。