孫麗娜
【摘 要】 C語言因其重要的地位,成為目前高校理工類的公共必修課之一。然而,實際的教學效果并不理想,因C語言數據類型豐富,靈活性強,比較抽象且實踐性很強,學生普遍認為C語言抽象難以理解,枯燥難以掌握,達不到預期效果。根據C語言的特點及學校教學改革的情況,本人提出一些C語言的學習方法。
【關鍵詞】 C語言
【中圖分類號】 G64.2 【文獻標識碼】 A 【文章編號】 2095-3089(2017)13-00-01
結合C語言的教學實踐,總結出在學習這門語言的過程中,高職學生感覺最難的是理解編程思想和形成良好的編程習慣。為幫助高職學生更深刻的學習C語言,整合了許多案例,編撰成教材。先把這些教學構思歸納如下,為學習C語言提供參考,同時也為更好地理解C程序設計的思想、編寫出優秀的C程序奠定基礎。
一、設計一個大案例,由淺入深貫穿C語言中主要知識點,讓學生對各知識點的運用有比較,有提高,理解透徹。
比如制作電子辭典。編寫一個C程序,實現電子辭典功能:要求用戶輸入某個縮略詞,系統查辭典后能給出該詞的完整形式,若辭典查無此詞,也給出相應的提示信息。
電子辭典這個案例首先使用數組、查詢兩個知識點,隨后擴展使用到指針、結構體、預處理、書寫規范、函數等知識點。
1、講解數組知識,建立一個簡易的辭典。存儲辭典使用兩個二維字符數組:a[5][5]——保存辭典中的全部縮寫詞(假設5個要查詢的縮略詞,均以a開頭);b[5][50]——保存辭典中的縮寫詞對應的完整形式(對應保存5個以a開頭的單詞的完整形式)。
2、講解查詢方法,實現查詢功能。
數據查找有直接引用和順序搜索兩種方式:通過下標直接定位數據為直接引用;而順序搜索至少有兩個并行數組(如:一個用于存儲記錄關鍵字建立一一對應關系的引用;另一個用于存儲對應數據,通過諸如項目編號、人員編號等關鍵字建立一一對應關系的兩個數組),順序搜索將輸入的關鍵字與關鍵字數組中的各個元素進行比較,直至找到匹配元素或者遇到數組結束標記為止。找到匹配元素時,程序使用關鍵字數組的下標訪問存儲于數據數組的對應元素。
3、講解預處理知識,提高維護性。
#define SIZE_DICT 5
#define MAX_LENGTH_INPUT 256
SIZE_DICT為5表示縮略詞、完整形式的個數,MAX_LENGTH_INPUT為縮略詞完整形式的個數。如果有增減會更方便。
4、引入指針知識,實現查詢功能。
const char * a[SIZE_DICT] = {"AGP","ALU","AM","API","ASF"};
const char * b[SIZE_DICT] = {"accelerated graphics port",…};
const char * b[SIZE_DICT]=這是從二維字符數組改成了字符指針的一維數組,通常的實現方法,常數字符串都在數據段,MAX_LENGTH_INPUT從50提高到256,適合用在你不需要修改這些字符串的情況。如果你不用指針,數組的寫法。
const char b[SIZE_DICT][ MAX_LENGTH_INPUT]={"accelerated graphics port",…};
使用數組的寫法,問題在:
①不同字符串長度不同,都制定相同的長度,必然設置最大值,浪費存儲空間。
②如果你要改變解釋,如果設置小了,你還需要手動改最大字符串長度。
5、講解結構體寫法,增強程序安全性。
更好的寫法可能是定義結構體struct
struct item{
char [MAX_LENGTH_INPUT] a;
char [MAX_LENGTH_INPUT] b;
};
然后item[size_dict]={ ... },把相關的東西放一起。
現在的寫法有可能造成a和b的個數不一樣,手動維護的時候,造成最后程序運行出現奇怪的問題。
6、加入書寫規范要求,養成良好編程習慣。
使用字符數組常量、加上更多的大括號提高可讀性。
7、拓展函數訓練,增加對程序的理解。
通過函數傳值,把a、b數組中的縮略詞傳入函數,為實現建立生成電子辭典,查詢電子辭典,更新電子辭典的功能分別聲明三個函數。
二、針對同一知識點設計多個不同的案例,注重知識點講授的重復性、增強性、連貫性,讓學生對知識點學習更扎實,能解決相似的實際問題同時,又不斷學習新的知識點。
比如講解排序方法,可以設計多個任務講解。
任務1練習一維數組排序。編寫一個C程序,隨機產生0~100之間的隨機數20個,作為學生成績,將批量數據由大到小排序,輸出前10名學生成績。
任務2練習字符數組排序,增加字符處理知識。編寫兩個C程序,對字符串分別實現的不同處理。子任1:任意輸入多個國家的名稱(比如五個),按字母順序排列輸出——選擇排序字符串。子任務3:任意輸入多個學生的姓名(比如五個),按字母順序排列輸出——交換排序字符串。
任務3練習查詢方法,要求在排序的基礎上,實現查詢的功能。比如電子辭典,可以更快的實現查詢,技能對比知識點,又能加深對C語言程序結構的理解。
三、C語言發展相對成熟,注重引入案例的多樣性、實用性、趣味性,讓學生學習更有興趣。
猜數游戲講循環、抽獎游戲講隨機數、大賽計分過程講一維數組、電子詞典講查詢,加密解密講函數、截取歌曲名講字符處理、魔方矩陣講二維數組,引入這些案例講解C語言更接近生活,讓學生們認可C語言有用,進而產生興趣深入學習。
四、給學生C++編寫風格的思想,注重書寫代碼的可讀性、可維護性、安全性、規范性,讓學生形成良好的編碼習慣。
1、習慣預定義常量,增強程序的可維護性。
2、習慣用指針定義字符數組,可節省時間,實際工作中應用廣泛,代碼書寫更規范。
3、習慣使用更安全的函數,增強程序的安全性。如:gets改用fgets函數,能避免找不到‘\0結束符的問題,更安全。
4、習慣使用結構體定義相關數據,增強程序的安全性。避免關聯數據出現問題。
5、習慣使用函數接口,方便適應大型軟件的合作研發,增強程序的可維護性。
6、習慣寫注釋,增強程序的可維護性。
7、習慣按照C語言格式書寫代碼,注意增加縮進。這樣可以增強程序的可讀性。