徐曉
[摘 要]二本院校計算機專業學生普遍感覺C語言難學,學習效果差,不能為后續語言學習奠定基礎。本文從數據類型角度分析這種狀況產生的原因,提出C語言的數據類型存在的缺陷,其中字符串部分尤其突出,并提出相關解決方案,旨在為相關研究提供借鑒。
[關鍵詞]C語言;字符串缺陷;二本院校
doi:10.3969/j.issn.1673 - 0194.2019.10.088
[中圖分類號]TP312 [文獻標識碼]A [文章編號]1673-0194(2019)10-0-02
1 二本院校計算機專業選擇C語言作為入門語言的原因
大學計算機專業編程教學的入門語言多年來一直以C語言為主,不過近年來一些學校開始選擇Java或Python作為入門語言。但是對于二本院校計算機專業來說,大多數還是選擇C語言作為入門語言,原因如下。第一,如果選擇Python作為入門語言,雖然入門容易,也很容易學會,但是二本計算機專業學生畢業后很多還是從事前端、后端、客戶端等方面的開發工作,其主要語言是Java、C#、Javascript、php等,其基礎語法都是基于C語言的語法,而Python的語法則與這些語言完全不同。同時,二本學生的學習能力和應用能力不如一本學生,學習Python后轉到Java、C#等語言的難度大。第二,如果選擇Java語言作為入門語言,雖然可以一步到位,但是零編程基礎的二本學生一開始就要接觸大量編程知識,學習難度很大。
2 C語言數據類型的缺陷
2.1 數據類型應具備最低要求
在軟件編程過程中,最長的數據類型有兩大類:①數值類型,包括整數與浮點數,用于表示多少或大小,如工資、價格、產量等;②字符串類型,用于表示是什么內容,如姓名、品牌、部門、地點等。其中,字符串在數據庫中出現的頻率甚至超過了數值類型。雖然在C#、Java等語言中沒有把字符串作為最基本的類型,但是都提供了string類,讓開發者把字符串作為基本類型。對于一個有經驗的程序員來說,在編程時認為以下兩個語句都很基礎,通常并不區分其中哪個更加基礎。
int num=10;
string name="phone";
由此可見,一門語言至少要提供數值類型和字符串類型,才能構建完整的數據類型。但是C語言只提供數值類型,沒有提供字符串類型。
2.2 C語言的數據類型缺陷及影響
仔細研究C語言中的各種數據類型可以發現,C語言在數據類型方面存在很多問題,幾乎所有的數據類型都是數值類型。例如:char與int可以通用;沒有邏輯類型,邏輯值用0和1表示;沒有字符串類型,存放字符串需要用數組,而數組名本質上是指針,而指針就是地址,實際也是一個長整型數。教師可以在教學中給學生強調char和int的不同,但是從標準C提供的庫函數編譯系統并沒有嚴格區分char和int。例如下面的庫函數無論是形參還是返回值均應該是char類型,但在標準C中都聲明為int類型。
int toupper(int ch)
這樣會導致學生在編寫函數時很難正確理解和使用數據類型,也給教師講解函數編寫帶來困難。例如編寫一個返回字符的函數和返回整數的函數時,學生用如下形式都是行得通的。
int fun(....){......}
另外,變量在賦值時應該賦同一類型的值,這是基本編程訓練中被反復強調的知識點,但是在標準C中,明顯不一致的語句卻能暢通無阻運行,導致學生對知識點產生困惑。C語言這種數據類型的設計最初是為了讓C語言具備最大的靈活性,充分發揮C語言作為中級語言的特長。但是這種數據類型的單一性和靈活性對二本學生學習編程帶來了很大的問題。
(1)無法培養學生數據類型的意識。作為編程人員,看到一個變量會很自然地去想其屬于什么類型。C語言這種類型的單一性使學生很難培養對類型的敏感性,尤其是在編寫函數以及后續語言中的類時,對數據類型的感覺顯得尤其重要。
(2)編程教學及練習題目單一,題型大多局限于數論或數值分析問題,如素數問題、位數問題、圓周率問題等,類似一門數值分析的課程,而目前的應用軟件大多數是數據處理功能,在這種情況下,學習C語言很難為學生開發后續軟件奠定良好的基礎。
3 C語言中字符串存在的問題
數據類型應該包括數值和字符串兩大類,但C語言幾乎所有類型都歸結為數值類型。C語言沒有專門的字符串類型,字符串是通過數組來存放,這樣的處理方式對二本學生來說存在諸多問題。
3.1 C語言與后續語言關于字符串的差異性
以目前常用的Java和C#為例,與C語言進行關于字符串的用法對比,結果如表1所示。
從上述比較可以看出,Java、C#等語言關于字符串的用法與C語言完全不同。換句話說,學習了C語言中的字符串方面的知識在后續語言中幾乎用不上。二本院校的學生學習能力稍弱,沒有必要花大力氣去學習后面幾乎用不上的字符串的
知識。
3.2 學習C語言字符串難度大
二本學生普遍感覺C語言中的字符串難學。因為C語言沒有字符串類型,而是使用數組存放字符串,在編程時需要考慮存儲問題。例如,下面兩個語句前面的是正確的,后面的是錯誤的。
char x[5]="ok"; //正確
char y[5]="hello" //錯誤,數組存放不下字符串
此外,學生常常搞不清楚將上述語句中的x理解為數組還是理解為字符串,在概念上的困惑會直接影響編程。
3.3 學習指針的難度大
二本學生普遍感覺指針難學。由于C語言用數組存放字符串,而數組名其實是指針,當字符串作為函數參數時通常要寫成指針形式。這樣一來,學生為了學習C語言的字符串,需要先搞明白數組和指針,這樣就抬高了學生使用字符串的門檻。尤其是難學的指針攔在字符串的前面,導致二本學生覺得指針難學,不能完全掌握并應用自如。
4 學習C語言字符串數的簡單描述
(1)C語言數據類型單一,各種類型幾乎都歸結為數值類型,急需一種完全不同的類型(如字符串類型)來培養學生對數據類型的感覺。
(2)C語言提供的字符串處理是通過數組、指針來實現,對學生難度大,而且指針本身也是數值,不僅沒有起到豐富數據類型的作用,而且還十分難學。
雖然學生學習C語言比較困難、學習效果差,但是目前尚未看到二本院校從上述角度去解決問題,更多只是針對學生情況修改教學方案,但實際上,基于標準C的語法框架限制,這種修改沒有多少可以變動的空間,往往是降低難度的同時降低了對學生的要求。對于一本學生而言,較強的自學能力和學習自主性能夠彌補C語言的缺陷;但是對于二本院校學生,這些缺陷卻能讓學生在學習過程中不知不覺地把主要精力陷入C語言語法知識中,疲于概念理解,不能掌握基本編程能力。一般而言,二本學生的及格率并不是很低,但這不表示學生已經奠定了編程基礎,只是教師降低了課程要求。換句話說,教師對此現狀沒有制定相應對策,導致教師教得痛苦、學生學得痛苦,難以培養學生對專業的興趣。
5 結 語
對于二本學生來說,C語言在數據類型尤其是字符串上存在缺陷,導致二本學生學習C語言的效果不佳。因此,學校應彌補這個缺陷,讓學生理解C語言,為后續課程的學習奠定扎實的基礎。
主要參考文獻
[1]王宇哲.C語言與Java對比下的優點[J].電子世界,2018(2).
[2]馬乾頡.程序設計語言C與Java之探討[J].信息技術,2010(10).
[3]車萬翔,蘇小紅,袁永峰,等.計算機專業高級語言程序設計課程改革探索[J].計算機教育,2014(13).
[4]胡國柱.基礎課程C語言與Java語言的優劣漫談[J].福建電腦,2011(11).
[5]蔣曉明,徐啟振.用C語言字符串實現多位整數的高精度計算[J].福建電腦,2004(6).
[6]申定保.C語言考試中的語法結構和算法分析[J].電腦知識與技術,2004(2).
[7]周建儒.C語言與C++語言幾點差異的應用實例分析[J].河北軟件職業技術學院學報,2016(1).
[8]白春霞,張維寶.基于C語言中字符串長度計算問題的探討[J].電腦知識與技術,2010(29).
[9]倪瑞曉.C語言編程技術的分析研究[J].計算機技術與發展,2009(12).
[10]張盼盼.C語言之如何判斷回文串[J].現代計算機,2016(31).
[11]雷金,彭秋生.淺談C語言字符串格式化[J].湖南生態科學學報,2012(1).