周燕艷 海深
摘要:從C語言課程和非計算機專業學生的特點出發,分析了目前該課程在教學過程中存在的一些現狀及需要解決的問題;并針對如何培養學生的學習能力、提高學生的學習興趣、發揮學生的創造性等問題,作者從教學及實踐方法上有針對性進行教學改革實踐,收到了比較明顯的教學效果。
關鍵詞:非計算機專業;C語言;改革
中圖分類號:G64 文獻標識碼:A 文章編號:1009-3044(2019)06-0114-03
A Probe into the Teaching Reform of C Language Course for Non-computer Majors in Colleges and Universities
ZHOU Yan-yuan, HAI Shen
(School of Mathematics and Computer Science, Tongling University, Tongling 244000, China)
Abstract: Starting from the characteristics of C language course and non-computer majors, this paper analyses the current situation and problems that need to be solved in the course of teaching, and aiming at how to cultivate students' learning ability, improve students' interest in learning and bring students' creativity into full play, the author aims at teaching and practical methods. Sex teaching reform practice, has received a more obvious teaching effect.
Key words: Non-Computer Major; C Language; Reform
C語言程序設計課程是計算機及其相關專業的專業基礎課,在許多高校一般作為大學生的第一門計算機編程語言課程學習。在計算機專業課程學習中,多是作為數據結構、算法分析與設計等其他專業核心課程的先導課。因而有著非常重要意義的一門課程。同時,C語言課程在許多學校又是作為非計算機專業的一門僅有的程序設計語言課程來安排,學習簡單的編程知識,對于提高非計算機專業學生的計算思維能力、利用計算機解決實際問題的能力也有著重要的作用。
可是,因為畢竟教學的對象為非計算機專業的學生,在具體的授課和實踐過程中,針對非計算機專業的C語言課程和計算機專業學生還是有著不同的著力點和考慮。
1 非計算機專業C語言課程教學的現狀
對于很多高校的非計算機專業來說,C語言程序設計課程主要是作為理工科的一門計算機課開設,大體安排在大一的第二學期,把該課程作為第一學期計算機文化基礎課程的延續。但是C語言課程和計算機基礎課程的內容聯系不強。如果在上大學前沒有學習過編程知識而學習C語言,對于許多學生來說,特別是開始階段,相關知識點的學習還是存在著較大的難度。
另外,程序設計語言的課程中,實踐又是一個重要的環節,有一定理論的基礎,再通過相應的實踐才更進一步理解和掌握理論,而實踐環節恰恰也是非計算機專業學生薄弱的一環。所以從實踐上來說,又影響了學生學習的效果。
如何提高C語言程序設計課程的理論教學效果和學生的編程水平,是每個授課教師需要必須面對的問題。
2 課程實施過程中的教學改革措施
2.1理論教學方面
計算機程序設計課程首先要解決的問題就是用計算機的方法解決問題,其實就是計算思維問題。由于思維慣性,在C語言課程的開始階段,如何盡早接受這一點就決定了學習效果的好壞。有時必須要對教學內容進行補充和調整,采用類比或其他更容易接受的講解方式以利于學生的學習。
在教學活動過程中針對一個個的知識點,進行了如下的解釋和說明。
1)數據類型
C語言中提供了多種數據類型,僅僅表示純粹數這一對象的就有int,float,double等多種類型,還有unsigned、signed和short和long的分別,學生剛開始就難以接受,同樣的數為什么還區分這么多種類,既然double類型表示數的范圍那么大,為什么不就是用這一種類型就簡便多了?
為此,首先要解釋不同數據類型表示的意義,其次,需要對數據的二進制表示中無符號、有符號,有符號數據的原碼、反碼和補碼的表示,內存中數據存儲方式,定點、浮點數的表示,不同數據類型數據轉換等一系列的知識點進行講解。并輔以適當的例子。
如short int型數-1是一個有符號整數,補碼表示的,在內存中其實就是16位二進制1,如果把它賦給一個無符號的unsiged short int變量,還是16位二進制1,可是,由于是無符號數,則就是十進制數65535(=216-1),如果把它賦給一個long long型的變量,由于long long型為有符號數,符號位進行擴展,則該變量的內容為64位1,還是-1,同樣如果把它賦值給unsiged long long型的變量,其值就是18446744073709551615(=264-1)。而無符號短整型unsigned short int數65535,轉換成二進制數也是16位二進制1,如果把它賦給一個long long型的變量,該值還是65535,原因在于對無符號數擴展時就是加0,與有符號數擴展不同。通過對這些知識點的說明和操作演示,相關數據類型的區別和轉換機制就比較清晰。
2)常量和變量
在C語言中,常量是指其值不會發生也不能發生改變的量,常量不占用系統的內存,所以其值不會改變。而變量則是其值可以改變的量,在系統中需要分配空間給它。如下列語句:
int a=4;
對于該語句的理解是,定義一個整形變量,變量名為a,同時給該變量賦值4,所以此時如果對a訪問,其值為4。這里,學生常見的困惑有兩個:一是a的值就是此時賦值的值,如果不賦值,其值的大小是不確定的;二是對賦值號的理解,賦值其實是一個運算,把右邊的值賦給左邊的變量,容易把賦值符號當作等號,好像也是對的,a的值此時就是等于4。但是當后面如果對變量a的值進行重新賦其他值后,a的值就不等于4了,這時等號的理解就無法成立。
在教學過程中,對變量的說明,就把變量當作房間,不同數據類型的變量就對應于面積大小不一的房間,而變量的值就類比于房間中存放的物品,給變量賦值就是調換物品。
3)函數
對于一個較大的問題,通常把它分成若干個較小的問題來解決。在C語言設計中,也采用類似的方法,把較大的程序分為若干個較小的程序模塊,而每個模塊用來完成一個特定的功能,一個模塊就可以定義一個函數,定義好的函數可以被多次的調用。理解函數的作用對于理解結構化程序設計方法有直接的關系。
C語言中有系統自帶的函數,用戶也可以自己定義功能函數。以max()函數為例,只要提供給它符合要求的參數,通過它的運算,就可以得出若干個數據中最大的那個數。一個函數就是一個加工廠,有的工廠是別人建的,自己也可以建設所需要的加工廠。對于一個豆腐加工廠來說,提供給它符合要求的大豆,它就可以加工出你所需要的豆腐,這兒,大豆等原料就類似于實際參數,而豆腐就是加工廠的輸出值。把豆腐加工廠建好后,以后在任何需要豆腐的時候,就不需要自己來一步步制作豆腐,直接把大豆送到豆腐加工廠就可以了。各種功能不同的工廠的存在,就可以讓社會這個復雜系統協調運轉。
4)指針
指針是C語言的重要數據類型,也是C語言的精華。靈活的使用指針,可以動態分配內存,方便使用字符串,還可以使程序簡潔和高效。但是,指針又是C語言中的難點,特別對于初學者來說,很難理解和用好指針。
要理解指針,必須要搞清楚,C語言中哪些對象需要占用內存,也即它們都有地址這一屬性,如變量、數組、函數等等。變量和數組有地址屬性好理解,而函數有地址的屬性,需要對“程序存儲”這一思想進行介紹,在內存中不但存放著大量的數據,還存放了代碼,而一個個函數作為模塊存放在內存中,函數名就是各個模塊的起始地址。
在理解一級指針的基礎上,引入多級指針,一般僅僅學習到二級指針為止,這樣也降低了對指針理解的難度。由于學習對象為非計算機專業學生,適當的調整知識點的難度也是適宜的。
5)結構體
實際中,一個對象通常有多個屬性,往往需要一組不同數據類型的數據進行綜合性的描述,在使用時,把這些不同類型的組合當作一個整體對待。結構體就是解決這一問題的手段。它可以把系統提供的基本類型和先前已經定義的數據類型合在一起使用,邏輯上又存在一定的內在關系。
簡單數據類型和結構體類型非常類似于生物學上的單細胞和多細胞之間的關系。單細胞生物是由一個細胞組成一個個體,其生命活動由單個細胞器承擔,而多細胞生物是由多個單細胞組成的個體,其中不同形態的細胞組成不同的器官組織,他們共同完成個體的生命活動。生命從單細胞過渡到多細胞體也是生命進化的體現,類似地,通過結構體,極大地豐富了C語言對數據的描述能力,也是對現實問題的數據描述能力提升的必然發展。
6)文件
文件,是指存放在外存上的數據的集合,是存在邏輯上關聯的數據的結合,當然,系統把設備也當成文件對待。C語言中,對文件的訪問不是直接的,而是通過緩存機制來實現,程序訪問文件時,首先要把文件在緩沖區中打開,程序就可以對之進行訪問,訪問結束,如果文件在此過程中進行了修改,再把緩沖區中的文件輸出到外存中,進行更新。
為了便于學生的理解,在講解時把外存當作圖書館,而文件就是圖書館中的藏書,用戶需要看書必須要到圖書館把所需要的書借到自己面前,類似于把文件存放到本地的緩存,閱讀時對圖書進行批注(注:假定現實允許)等修改,最后又還回圖書館。
同樣,在學習其他C語言知識點的時候,如何把抽象的理論通過比喻、類比甚至表演等多種形式展現,極大地降低知識點的難度,也激發學生學習的興趣。
2.2實踐教學方面
C語言課程是一門實踐性極強的課程,在課時安排上,實驗占據了大量的課時。對于非計算機專業學生來說,上機實驗也是一個不容易克服的困難。具體的難點在以下幾個方面:
1)難以用計算機的思維解決具體問題。
2)代碼輸入不仔細,容易丟三落四。
3)當系統編譯時出現多處錯誤而束手無策。
4)編譯成功卻運行結果不正確。
應該說,上面的問題對于編程初學者來說都會遇到,但是,非計算機專業學生可能解決起來更困難些。在實踐中,針對出現的問題,從以下幾點進行嘗試解決。
1)學習使用畫流程圖的方法來模仿計算機的思維方式解決具體問題。流程圖可以讓解決問題的思路十分清晰,也是學習計算思維的一個有效途徑。剛開始畫圖力求細致,后期熟練時可以把流程圖畫得粗一點。
2)學習編程有利于學生養成嚴謹的習慣。當由于自己的大意而使得代碼編譯無法通過時,此時盡量鼓勵學生自己來發現問題,一方面讀懂系統提示的問題描述,另一方面則是訓練耐心尋找問題的解決方法,可以嘗試包括通過網絡等多種手段來解決。這也是編程者必經的階段。
3)編譯成功而結果錯誤的情況需要老師的幫助,因為此類情況主要是解決方案中邏輯上出現了錯誤。需要老師和學生一道分析,尤其是對流程圖進行詳細地查找,找出解決方案。
上機實驗剛開始,還是以學習成熟的代碼為主,后期多嘗試自己動手。通過這些環節的實施,學生真正掌握了如何編程,收效還是比較明顯。
在這門課程接近結束的時候,以4-6人為一組,布置一個大一點的作業,其中一個同學為隊長,把每個人任務進行分工,進行一個簡單系統的實現。通過這個作業的實施,培養同學之間的合作精神和團隊意識,也是對該門課程很好的總結。
2.3多媒體等其他教學手段的適當運用
多媒體作為教學手段的意義已經為大家所共識。可以借助于圖片、視頻或動畫等手段把C語言抽象的理論以十分具體形象的方式展現出來,同時也極大地節約了時間。
在介紹冒泡排序算法時,多個數據隨機地存放在一個個方格中,隨著每一條語句的執行,以動畫的形式數據進行移動,非常直觀、形象,比純粹地進行解釋的方法效果好很多。
在通過第三個變量實現兩個變量交換的時候,讓甲、乙、丙三個同學在講臺上,甲手里放著一盒白色粉筆,乙手持一盒彩色粉筆,在借助于丙同學的情況下實現了甲、乙而人粉筆的交換,演示內容并不復雜,但是對于幫助學生理解借助第三個變量實現兩個變量數據的交換這一本質可以起到事半功倍的作用。
3 結束語
C語言程序設計是一門重要的計算機課程,也是一種提升計算思維能力的課程。它是以C語言為工具,解決具體的問題。可是由于非計算機專業相對計算機專業有著相對的不足,在學習過程中存在具體的困難。怎樣讓學生更好地接受相關知識,提高學生的學習興趣,需要從多個角度入手。在掌握好基礎知識的基礎上,由理論到實踐,再由實踐到理論,相互影響,相互促進,才可以更好地達到最終的學習目標。為培養出既具備扎實理論基礎,又具有較好的實踐能力的新型人才,必須積極進行教學改革,學習和掌握多種教學手段,在教學實踐中不斷提高自己的業務素質,使教學水平、教學質量躍上一個新的臺階。
參考文獻:
[1] 鄭璐璐. “C語言程序設計”課程改革的幾點措施[J]. 科教文匯,2018(441):57-58.
[2] 劉滿君. 《C 語言程序設計》課程考核方式改革初探[J]. 福建電腦,2018(11):181.
[3] 彭秀萍. C語言程序設計課程教學改革探討[J]. 電腦知識與技術,2018,14(26):94-96.
[4] 申炳昕. C語言程序設計實驗教學方法與考核模式的改革探討[J]. 電腦知識與技術,2018,14(30):102-104.
[5] 葉振. 本科院校數學專業《C語言程序設計》課程教學探討[J]. 福建電腦,2018(10):172-173.
[6] 郭芳. 高校非計算機專業C語言課程教學的改革研究[J].湖南工程學院學報,2018,28(3):110-112
[7] 聶轟. 錯誤案例教學法在 C 語言教學中的應用[J]. 現代信息科技, 2018,2(10):90-91
【通聯編輯:王力】