高級語言程序設計教學體會-孫志崗_第1頁
已閱讀1頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、C語言程序設計教學體會,孫志崗的“個人體會”,代碼風格,代碼風格就是程序員的書法比書法好學得多,基本不需要特別練習但是壞習慣一旦養(yǎng)成,就像書法一樣難以改變是最易獲得和實踐的軟件工程規(guī)則對設計程序結構、培養(yǎng)團隊精神都大有幫助不給學生看到任何一個風格糟糕的例子,代碼風格,標識符命名宏全部大寫Windows風格和Unix風格VariableNamevariable_name縮進“{”位置的兩種風格用4格tab還是用空

2、格,空格增強單行清晰度每行代碼長不要超過80空行自然段,表達式盡量簡單,下面程序在不同編譯器可能產(chǎn)生不同結果,而且可讀性差a = i++ + i++ + i++;printf("%d, %d, %d", i++, i++, i++);for (i = 0; i != 0 && i++; );很多教科書自作聰明地創(chuàng)造了很多復雜的題目來難為學生,就算它們的用法正確,實踐中也未必用

3、得到,全局變量要避免使用嗎?,全局變量增大了模塊之間的耦合度,而且不利于排錯,罪大惡極這罪惡不能怪全局變量,只能怪無限制的對全局變量的改寫不要讓全局變量有復雜的數(shù)據(jù)結構一旦數(shù)據(jù)結構變了,真的大禍臨頭了最好利用static特性用函數(shù)對其進行封裝,不要把goto判處死刑,問題不是出在goto,而是出在對標號的濫用結構化程序設計中一個被忽視的原則單入口,單出口只要符合此原則,什么都可以用goto在處理異常流程問題時,非常好用

4、退出多重循環(huán)統(tǒng)一的錯誤處理,嚇死人的指針,“指針”出現(xiàn),“難”字當頭老師嚇學生,學生再嚇學生的學生……從原理上了解指針,它是那么簡單一個普通變量,其值是一個內(nèi)存地址格守下列原則,指針使用永不出錯永遠要清楚每個指針指向了哪里永遠要清楚指針指向的位置是什么,指針的兄弟:數(shù)組,不要把數(shù)組和指針分開,它們是緊密相連的數(shù)組最簡單數(shù)組名是指針,數(shù)組成員是變量多維數(shù)組麻煩些關鍵要知道它在內(nèi)存中是怎么分布的,腦細胞可貴,千萬別用來

5、背,算符優(yōu)先級知道先算括號足以這樣方便自己,也方便他人庫函數(shù)用法會查聯(lián)機幫助、手冊最重要,變量占用的字節(jié)數(shù),不同平臺,不同編譯器,可能會迥然不同struct占字節(jié)數(shù)由編譯參數(shù)決定凡是需要字節(jié)數(shù)的地方,一律用sizeof獲得,沒有“真”“假”,邏輯運算的結果只有整型數(shù)“0”和“非0”很多編譯器給出的非0結果是1,但這是特例if (0)printf(“永遠不會被執(zhí)行”);while (1){/* 死循環(huán) */}

6、,下列問題,要上升到階級斗爭的高度,指針指向不明數(shù)組下標越界數(shù)值運算溢出除數(shù)為0不檢查函數(shù)的返回值變量不初始化就使用,比較相等時用=,沒用==用==比較兩個浮點數(shù)是否相等返回局部變量的指針malloc不freeopen不close,它們編譯不出錯,運行很可能也不出錯,但一旦出錯,就讓人焦頭爛額,危險的scanf,scanf簡便好用不做參數(shù)類型匹配檢查不限制用戶輸入字符串長度很多黑客攻擊都是從這里開始的,\0給字符

7、串處理帶來的,危險假如\0不存在,printf、strcpy、strcmp等都將越界訪存n族函數(shù)可以解決此問題處理字符串時,時刻要警惕\0是否在其該出現(xiàn)的位置,C語言三大定律,表達式定律任何能產(chǎn)生數(shù)值結果的運算、操作都可以作為表達式,并可以放到任何需要數(shù)值結果的地方,只要數(shù)值類型能夠匹配常見的可以產(chǎn)生數(shù)值結果的運算和操作算術、邏輯、位運算等? :、&、*等有返回值的函數(shù)賦值常見的需要數(shù)值的地方有:賦值條件

8、判斷函數(shù)調(diào)用,C語言三大定律,類型定律任何類型都可以在任何需要類型的地方使用;用任何類型定義的變量都要占用內(nèi)存已知特例函數(shù)返回值不能定義為數(shù)組類型函數(shù)參數(shù)定義為數(shù)組類型,此時該參數(shù)不占用內(nèi)存,而是共享函數(shù)調(diào)用者傳入的數(shù)組空間常用類型基本數(shù)據(jù)類型、指針、數(shù)組、結構……常見的需要類型的地方定義變量定義指針、數(shù)組和結構函數(shù)參數(shù)和返回值sizeof,C語言三大定律,參數(shù)傳遞定律函數(shù)調(diào)用時的參數(shù)傳遞永遠都是傳值調(diào)用,把實

9、參的值拷貝給形參實參:調(diào)用者提供的參數(shù)形參:函數(shù)定義的參數(shù)基本數(shù)據(jù)類型無容置疑struct也無容置疑指針作為參數(shù)時,把指針變量的內(nèi)容(就是其指向的內(nèi)存地址)做了拷貝數(shù)組名作為參數(shù)時,把它等同于指針看待了,要點,簡單為美宣揚“簡單為美”的科學思想,摒棄刻意的復雜原理為綱C語言復雜的表面都是簡單的原理的外在表現(xiàn)人性為本計算機是人設計的,具有人性面向應用避免“學是一回事,使用是另一回事”無需背誦該記的,用著就記住

10、了;用不著的,背下來也會忘沒有絕對Match is best!,為什么追求“簡單為美”?,C語言沒有權威,什么都不可信書當然不可信,任何書都是背書更可悲編譯器也不可信,它只是一種實現(xiàn)而已不同編譯器、不同平臺,表現(xiàn)往往會大相徑庭C語言誕生的主要目標之一就是讓UNIX可以跨平臺。我們書寫的C程序也應該極力爭取跨平臺有些本來就是錯誤的用法,在某些平臺上卻還可以正確運行ANSI C也不可信這個標準本身并不完備,而且并不是所有

11、編譯器都對它100%支持,為什么追求“簡單為美”?,那我們還能信什么?相信“簡單”?。?!最簡單的用法,是被編譯器支持得最好的“簡單”易于理解、交流,便于維護,非計算機專業(yè)需要了解深入的“原理”嗎?,只要使用C語言,就必須知道“原理”浮于表面的使用,是無法發(fā)揮C語言的優(yōu)勢的如果他不需要知道“原理”,肯定他不用C語言,那么就不該讓他學C語言“原理”涉及到計算機原理編譯原理操作系統(tǒng)算法與數(shù)據(jù)結構軟件工程,原理為綱,計算

12、機原理馮·諾依曼機二進制、八進制、十六進制和十進制b、B、KB、MB、GB、TB寄存器、內(nèi)存、外存的基本原理流編譯原理編譯、鏈接過程預處理指令、外部變量函數(shù)的參數(shù)傳遞和局部變量定義棧,原理為綱,操作系統(tǒng)內(nèi)存保護數(shù)組下標越界、野指針內(nèi)存管理動態(tài)內(nèi)存分配(堆)和棧文件管理、進程互斥,算法與數(shù)據(jù)結構棧結構體軟件工程分析、設計、程序結構結構體協(xié)作,原理為綱,C語言自身的原理指針的原理數(shù)組的

13、原理函數(shù)調(diào)用的原理內(nèi)存分配的原理棧和堆了解原理,就能從根上分析出一些紛繁復雜的語法規(guī)則的合理性。此外,還需要一點點人性,人性為本,在原理基礎上,C語言為了讓人使用方便,有很多人性化的設計比如:char sz[] = “A String”;+ - * /if-else邏輯運算不要讓學生“記住”這些,而要讓他們知道這些有多么地順乎自然,面向應用,C語言是用來實踐的。能應用,比掌握一些生僻的用法更重要應用中最信奉的就是“

14、簡單為美”軟件工程思想在應用中也非常重要結果正確不能說明程序好,無需背誦,記憶力經(jīng)過漫長的12年中小學應試教育,已經(jīng)鍛煉到極致了如果教學中指明要學生機械背誦什么,那么這個教學是失敗的如果考卷中有需要機械背誦才能做答的題,那么這個考卷是失敗的通過作業(yè)、上機,把知識自然而然地變成學生身體的一部分鍛煉學生查資料、聯(lián)機幫助和手冊等的能力,沒有絕對,科學沒有金科玉律,計算機科學更是如此在不同的環(huán)境下,相同的觀點會產(chǎn)生不同的效果簡單

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論