這是一本面向計算機科學與技術類專業及其他專業,全面介紹“高級語言程序設計(含C語言程序設計或Pascal語言程序設計)”實驗課程教學要求、教學內容、實驗環境及其實施的教材。
本書基于計算機科學與技術一級學科人才培養科學理論,按照計算機科學與技術學科教材系列一體化設計綱要的要求,配合“高級語言程序設計”理論課程的教學,全面介紹了“高級語言程序設計”實驗課程的基本實驗內容、課程設計及其實驗環境——Visual C++ 6.0和Delphi 7.0。本書最大特色是結合一些典型實例,系統地介紹了C/C++、Pascal/Delphi的主要程序調試技術,使學生調試程序從經驗走向理性,為大程序的調試奠定了堅實的基礎。另外,本書還對Visual C++ 6.0和Delphi 7.0集成開發環境的配置、使用、程序發布和編譯錯誤信息,以及C/C++、Pascal/Delphi程序編碼規范等內容做了詳盡介紹,體現了本書所具有的“工具書”的特點。
程序調試工具書。結合典型實例,系統地介紹了C/C++、Pascal/Delphi的主要程序調試技術。
趙占芳,石家莊經濟學院信息管理學院副教授,研究生學歷,教學骨干,一直負責計算機教學和研究工作。2009年獲得河北省教學名師稱號,已出版多部教材。
第1章 引 言1
1.1 高級語言程序設計實驗教學在計算機科學與技術專業教學中的地位1
1.2 高級語言程序設計實驗教學的基本指導思想和理念1
1.3 高級語言程序設計實驗教學的內容組織與安排2
1.4 高級語言程序設計實驗教學的目的和要求2
1.5 高級語言程序設計實驗的分類3
1.6 高級語言程序設計實驗文檔3
第2章 程序調試簡介4 第1章 引 言1
1.1 高級語言程序設計實驗教學在計算機科學與技術專業教學中的地位1
1.2 高級語言程序設計實驗教學的基本指導思想和理念1
1.3 高級語言程序設計實驗教學的內容組織與安排2
1.4 高級語言程序設計實驗教學的目的和要求2
1.5 高級語言程序設計實驗的分類3
1.6 高級語言程序設計實驗文檔3
第2章 程序調試簡介4
2.1 計算的正確性問題4
2.2 程序測試與程序調試的關系4
2.3 程序調試的概念及其技術概述4
2.3.1 程序調試定義5
2.3.2 程序調試基本過程5
2.3.3 程序調試分類5
2.3.4 程序調試技術概覽6
2.4 程序錯誤的分類7
2.5 程序錯誤定位的方法8
2.5.1 增量調試法8
2.5.2 流程觀察的程序插裝法8
2.5.3 數據透視法8
2.5.4 分離法8
2.5.5 屏蔽法9
2.5.6 回溯法9
2.5.7 二分法9
2.6 學習程序調試技術的意義9
第3章 Visual C++ 6.0集成開發環境及調試器介紹10
3.1 Visual C++ 6.0集成開發環境10
3.1.1 Visual C++ 6.0開發環境10
3.1.2 主窗口10
3.2 控制臺應用程序16
3.2.1 創建控制臺應用程序16
3.2.2 編輯并保存文件19
3.2.3 編譯并運行項目19
3.2.4 控制臺應用程序項目的組成20
3.3 定制控制臺應用程序的開發環境20
3.3.1 菜單與工具欄的定制20
3.3.2 項目配置21
3.3.3 開發環境定制25
3.4 Visual C++ 6.0的使用技巧26
3.4.1 Visual C++ 6.0的一些實用技巧26
3.4.2 Visual C++ 6.0開發環境設置技巧27
3.4.3 使用Visual C++ 6.0的MSDN28
3.5 程序的編譯、鏈接和運行28
3.6 調試環境的配置29
3.7 使用集成調試器進行程序調試30
3.7.1 控制程序的執行31
3.7.2 斷點的使用32
3.7.3 使用調試窗口查看或修改變量的值47
3.8 其他的調試手段51
3.8.1 使用函數或宏進行程序調試51
3.8.2 遠程調試52
3.8.3 實時調試52
3.8.4 編輯并繼續調試52
3.8.5 其他的調試功能52
3.9 程序的調試版本和發布版本52
3.9.1 生成調試版本和發布版本53
3.9.2 調試版本與發布版本的區別53
3.9.3 調試發布版本54
3.10 小結56
第4章 C語言程序調試實例57
4.1 基礎知識程序調試實例57
4.2 三種基本結構程序調試實例63
4.3 基于數組的程序調試實例73
4.4 函數的程序調試實例80
4.5 結構體的程序調試實例88
4.6 基于指針的程序調試實例92
第5章 Delphi 7.0集成開發環境及調試器介紹105
5.1 Delphi 7.0集成開發環境105
5.1.1 Delphi 7.0的開發環境105
5.1.2 主窗口106
5.2 控制臺應用程序109
5.2.1 創建控制臺應用程序109
5.2.2 編輯并保存工程文件110
5.2.3 編譯并運行工程111
5.2.4 控制臺應用程序工程的組成111
5.3 定制控制臺應用程序的開發環境112
5.3.1 窗口和工具欄的定制112
5.3.2 編程環境的定制113
5.3.3 代碼編輯器環境的定制114
5.4 Delphi 7.0的使用技巧116
5.4.1 代碼編輯器使用技巧116
5.4.2 調試環境配置技巧117
5.4.3 幫助的使用117
5.5 程序的編譯117
5.6 Delphi 7.0調試環境的配置118
5.7 使用集成調試器進行程序調試121
5.7.1 控制程序的執行121
5.7.2 斷點的使用121
5.7.3 查看變量的值124
5.7.4 其他調試方法126
5.8 其他的調試工具127
5.9 程序的發布127
第6章 Pascal語言程序調試實例129
6.1 第一單元—順序程序設計和分支程序設計129
6.1.1 簡單Pascal程序的上機過程129
6.1.2 順序程序設計135
6.1.3 分支程序設計143
6.2 第二單元—循環程序設計155
6.3 第三單元—構造類型166
6.3.1 枚舉、子界與數組166
6.3.2 集合與記錄179
6.4 第四單元—分程序189
6.5 第五單元—遞歸技術208
6.6 第六單元—指針與動態數據類型215
6.7 第七單元—文件233
第7章 綜合課程設計247
7.1 模塊化軟件開發方法247
7.1.1 模塊化設計方法247
7.1.2 程序的分塊開發248
`7.1.3 工程文件250
7.2 軟件測試的步驟250
7.2.1 單元測試251
7.2.2 集成測試252
7.2.3 確認測試252
7.2.4 系統測試252
7.2.5 驗收測試253
7.3 軟件測試技術253
7.4 測試用例設計技術253
7.4.1 邏輯覆蓋法254
7.4.2 等價劃分法254
7.4.3 邊值分析法255
7.4.4 錯誤猜測法255
7.5 課程設計255
7.5.1 課程設計實施要求255
7.5.2 課程設計的功能設計要求256
7.5.3 課程設計的總體設計要求258
7.5.4 課程設計報告文檔要求258
附錄1 Delphi 7.0集成開發環境配置260
附錄2 Delphi編譯錯誤信息一覽表262
附錄3 Pascal/Delphi程序編碼規范268
附錄4 Visual C++編譯、鏈接錯誤信息280
附錄5 C/C++程序編碼規范287
參考文獻297
前 言
為計算機科學與技術專業的學生創作一本有特別實用價值的《高級語言程序設計實驗教程》一書,是多年來想做但一直沒有做好的事情。原因是目前高等學校教師的工作業績評價中,編寫教材遠遠比不上搞科研重要。于是,在高等學校中,放下科研,專心于教材創作的教師實屬鳳毛麟角,盡管教材的創作工作對于人才培養來說是一件非常重要的基礎性工作。就這樣,我們的編寫工作一推再推,直到2010年9月我們對計算機科學與技術專業進行綜合教學改革之時。
其實,在我校計算機科學與技術專業綜合教學改革啟動之前,我們曾多次討論“高級語言程序設計實驗”課程教學改革的問題。在多年的教學實踐中我們發現,相當一部分學生并沒有通過該實驗課程的教學,真正掌握該門課程的基本實驗技能,為后續課程的學習打下堅實的基礎,致使一部分學生難以順利學習后續課程,甚至失去了對專業的學習興趣,放棄了本專業的學習,其教訓十分慘痛!因此,如何大幅度地提高該門實驗課程的教學質量,是一個值得探討的大問題。那么,“高級語言程序設計實驗”課程的基本實驗技能是什么?究竟如何來開展該門課程的教學呢?
認真分析,仔細想來,從“授人以魚不如授人以漁”的古訓中使我們認識到:由于高級語言的程序調試技術是這門課程的最基本的實驗技術,而對這一技術的熟練掌握是計算機科學與技術專業學生必須練就的基本功之一。因此應該把它作為這門實驗課程教學的重點。很遺憾,由于高等學校從事計算機科學與技術專業教學的教師中,系統而熟練掌握這一技術的人并不多,加上國內外已經出版的有關教材對程序調試技術的介紹基本上回避或輕描淡寫,相應地,在該門課程的教學中學生基本上還是憑著經驗調試程序,根本不知道還有一套程序調試技術。因此,計算機科學與技術專業的絕大多數學生普遍沒有系統而熟練地掌握程序調試技術,已是一個不爭的事實。面對這一現實,為了改變現狀,我們提出了“高級語言程序設計實驗”課程的教學改革,要圍繞著系統介紹主要程序調試技術而展開的思想,并付于實施。經過三年來的教學改革實踐,檢驗了這一改革思想的正確性。
為了順利實施“高級語言程序設計實驗”課程教學改革的思想,我們將主要程序調試技術融入到教材中,利用一年的時間完成了這本教材的初稿(內部講義),后經三年的使用和修改,形成了如下內容體系。
第1章是引言,介紹課程在(學科)專業教育中的地位,課程教學的基本指導思想和理念,課程的內容組織與安排,課程的教學目的和要求,課程實驗的分類和文檔要求;
第2章是程序調試簡介,主要介紹程序測試與調試的基本概念,程序調試技術概述,程序錯誤分類,程序錯誤定位的方法和學習程序調試技術的意義;
第3章是Visual C++ 6.0集成開發環境及調試器介紹,主要介紹Visual C++ 6.0集成開發環境和調試器的使用;
第4章是C語言程序調試實例。主要介紹在Visual C++ 6.0集成開發環境下,結合一些C語言的典型實例,如何使用有關的調試技術來調試C語言程序。它們是全書的核心部分之一;
第5章是Delphi 7.0集成開發環境及調試器介紹,主要介紹Delphi 7.0集成開發環境和調試器的使用;
第6章是Pascal語言程序調試實例。主要介紹Pascal語言的實驗內容,以及在Delphi 7.0集成開發環境下,結合一些Pascal語言的典型實例,如何使用有關的調試技術來調試Pascal語言程序。它們也是全書的核心部分之一;
第7章是綜合課程設計,主要介紹模塊化軟件開發方法,軟件測試的步驟及技術測試用例設計技術和課程設計的內容和要求。
通過三年來的教學試用和總結,我們提出以下幾點意見供使用者參考:
(1)為了順利通過“熟練掌握高級語言程序設計的基本技術和主要程序調試技術”這道坎,必須在教學課時上給予保障。寧可犧牲一些沒必要的專業課學時,也要保證基礎課和專業基礎課的學時的做法是完全正確的。值得說明的是,本課程的課內學時為48學時是最基本的,實現教學目標學生還需要付出更多的課外時間,至于時間的長短則取決于每一個學生學習的具體情況。課程設計應放在課外時間完成。另外,必須加強實驗課程的輔導,要求任課教師每節課必須到場。我們認為,讓研究生作為實驗課程的教師的做法是不妥的,原因在于絕大多數學生還不具備作為實驗課程的教師的基本素質。
(2)為了培養學生獨立解決問題的能力,在程序調試的教學中,一定以介紹調試技術和解決問題的思想方法為主,切不可更多地代替學生調試程序。另外,實驗教師在教學中必須貫徹“因材施教”的原則,對于動手能力較強的學生,在回答他們提出的問題時要以引導和啟發為主,而對于動手能力較差的學生,在回答他們提出的問題時則要回答得具體些,而且鼓勵他們在解決了具體問題后要自覺進行總結。當然,我們不贊成將程序調試技術講得詳之又詳,面面俱到,不給學生留下任何思考的余地和懸念,試圖在課堂上解決“所有”問題,生怕學生有學不會的內容的做法。而應該鼓勵學生面對待解決的問題,獨立思考,勇于探索,通過查閱文獻,大膽試驗,最終解決問題。只有這樣,才能使學生在啟發式教育下,積極、主動地思考問題,通過艱苦的查閱文獻、閱讀文獻、思考、試驗、歸納、總結,才能真正培養學生的自學和動手能力,獨立解決問題的能力,探索精神、創新意識和能力。而這種意識和能力的培養正是中國大學實驗教學改革所要努力的方向。
盡管本書是“高級語言程序設計”課程的配套教材,專門為其實驗課程的教學而編寫的,供學生一學期使用,但是由于書中的內容極為豐富,其中包含了計算機科學與技術專業后續軟件實驗類課程要用到的最基礎的內容,因此本書可供學生學習所有軟件類實驗課程時參考,它也是每一個學生今后走向工作崗位后從事軟件開發的一個實驗手冊,是每個學生調試程序時應該經常翻閱的一本參考書。
在教材即將付梓之際,我們不應該忘記為了本書的寫作、修改付出過辛勞的所有老師、學生和友人。非常感謝廈門大學計算機科學與技術系教授趙致琢博士,盡管他沒有直接參與本書的創作,但從本書講義的編寫到今天的公開出版,始終得到了他的關心和指導。趙致琢教授對計算機科學與技術教育事業傾注了大量心血,提出了“科學辦學,內涵發展”的高等教育辦學思想和計算機科學與技術一級學科人才培養的科學理論體系,親自指導了我校計算機科學與技術專業的綜合教學改革,對我國計算機科學與技術教育事業的發展可謂貢獻良多。他對教育的摯愛,矢志不移、勇往直前、追求真理的精神尤為作者感動,這種可貴精神必將化為對我們的永遠激勵。
我們還要感謝石家莊經濟學院2010級、2011級和2012級計算機科學與技術專業教學改革試點班上的所有學生和參與課程教學改革的年輕教師,是他們在我們邊創作、邊講授,邊修改、邊使用的情況下,積極踴躍地提出問題,發現并更正了講義中的錯誤,使講義得以完善,課程的教學質量逐年提高。而我們從師生的共同討論中對“教學相長”這一成語的內涵有了最直接的感受,同時也體會到作為傳道者因師生共同成長而帶來的愉悅。
感謝貴州民族大學的楊承中教授和仰恩大學的陳發強教授,正是他們對我們的信任,在講義尚未公開出版的情況下,依然將我們的內部講義作為其各自2012級計算機科學與技術專業教學改革試點班的實驗教材,并在使用中提出了許多寶貴意見,為講義的進一步修改做出了貢獻。兩位教授給予我們的信任和建議,為本書的編寫提供了重要參考,也使拙作增色不少,感激之情,溢于言表。
令人欣慰的是,作者受趙致琢教授之邀,以本書的內部講義為教材,在剛剛結束的“暑期全國計算機科學與技術科學辦學與師資培訓高級研討班(貴陽花溪)”上,為來自全國幾十所高等學校的幾十名教師主講了20學時的“程序調試技術”課程。我們從這些同行的認真、積極而熱烈的課堂討論中深受啟發,促使我們對本教材出版前做了最后一次大的修訂,使本教材的適用面進一步拓寬—它不僅適用于“Pascal語言程序設計”實驗課程的教學,而且也同樣適用于“C語言程序設計”實驗課程的教學。謝謝這些來自全國幾十所高等學校的老師們!
當學生們打開此書時,從其極為豐富的內容和大量細致的工作中不難看出其寫作背后作者所付出的辛勤勞動。四年來,作者在沒有鮮花和掌聲,也沒有物質上的獎勵和金錢的誘惑下,幾乎犧牲了所有課余閑暇,一心撲在教材的寫作上,只是真誠地希望學生們通過該課程的學習,能夠打下程序設計的堅實基礎和培養出強大的調試程序的能力,使學生們順利踏上學習計算機科學與技術專業之路。如果這本書能夠伴隨著學生們的學習,使他們能夠感受到程序設計與調試程序的魅力,激發他們學習計算機科學與技術專業的興趣和熱情,那將是作者最高興的事情,也是對作者艱辛勞動的最好回報。
盡管本書的創作歷時四載,但是由于我們業務水平的限制和工作中的疏忽,書中仍有許多地方需要進一步推敲、修改和完善,懇請讀者把對這本書的意見和建議反饋給我們,幫助我們改進工作,完善這本實驗教程。第一作者的電子郵件是:zzf_sjz@126.com。
作 者
2014年8月25日