c程序設(shè)計(jì)實(shí)踐教材_第1頁
c程序設(shè)計(jì)實(shí)踐教材_第2頁
c程序設(shè)計(jì)實(shí)踐教材_第3頁
c程序設(shè)計(jì)實(shí)踐教材_第4頁
c程序設(shè)計(jì)實(shí)踐教材_第5頁
已閱讀5頁,還剩130頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、C程序設(shè)計(jì)實(shí)踐通選課講義山東輕工業(yè)學(xué)院信息學(xué)院目 錄C程序設(shè)計(jì)實(shí)踐I通選課講義I山東輕工業(yè)學(xué)院I信息學(xué)院目 錄I目 錄II第一章 程序設(shè)計(jì)概述11.1 學(xué)習(xí)要點(diǎn)11.2 Visual C+ 6.0 集成開發(fā)環(huán)境11.2.1 Visual C+ 6.0 開發(fā)環(huán)境介紹11.2.2 創(chuàng)建一個(gè)C源程序81.2.3 C源程序的編譯、連接和運(yùn)行131.2.4 C程序的單步調(diào)試命令151.2.5 C程序的調(diào)試窗口201.2.6創(chuàng)建一個(gè)項(xiàng)目文件(工程)311.3 實(shí)驗(yàn) 認(rèn)識(shí)Visual C+ 6.0 的開發(fā)環(huán)境351.4 常見錯(cuò)誤及解決方法36第二章 C語言基礎(chǔ)知識(shí)382.1 學(xué)習(xí)要點(diǎn)382.2 實(shí)驗(yàn)內(nèi)容40

2、2.2.1 實(shí)驗(yàn)1 變量的使用與賦值運(yùn)算402.2.2 實(shí)驗(yàn)2 格式化輸入、輸出函數(shù)的應(yīng)用412.2.3 實(shí)驗(yàn)3 宏定義、條件編譯編程432.3 常見錯(cuò)誤及解決方法43第三章 程序的控制結(jié)構(gòu)483.1 學(xué)習(xí)要點(diǎn)483.2 實(shí)驗(yàn)內(nèi)容503.2.1 實(shí)驗(yàn)1 if語句編程503.2.2 實(shí)驗(yàn)2 switch語句編程513.2.3 實(shí)驗(yàn)3 循環(huán)結(jié)構(gòu)編程523.3 常見錯(cuò)誤及解決方法53第四章 數(shù)組604.1 學(xué)習(xí)要點(diǎn)604.2 實(shí)驗(yàn)內(nèi)容634.2.1 實(shí)驗(yàn)1 一維數(shù)組編程634.2.2 實(shí)驗(yàn)2 二維數(shù)組編程654.2.3 實(shí)驗(yàn)3 字符數(shù)組編程664.3 常見錯(cuò)誤及解決方法66第五章 函數(shù)705.1 學(xué)

3、習(xí)要點(diǎn)705.2 實(shí)驗(yàn)內(nèi)容715.2.1 實(shí)驗(yàn)1 簡單函數(shù)編程715.2.2 實(shí)驗(yàn)2 綜合運(yùn)用一維數(shù)組和函數(shù)編程725.2.3 實(shí)驗(yàn)3 綜合運(yùn)用二維數(shù)組和函數(shù)編程745.3 常見錯(cuò)誤及解決方法76第六章 指針836.1 學(xué)習(xí)要點(diǎn)836.2 實(shí)驗(yàn)內(nèi)容856.2.1 實(shí)驗(yàn)1 指向變量的指針變量編程856.2.2 實(shí)驗(yàn)2 字符指針編程866.2.3 實(shí)驗(yàn)3 指向一維數(shù)組的指針變量編程876.2.4 實(shí)驗(yàn)4 指向二維數(shù)組的指針變量編程886.3 常見錯(cuò)誤及解決方法90第七章 結(jié)構(gòu)體與鏈表937.1 學(xué)習(xí)要點(diǎn)937.2 實(shí)驗(yàn)內(nèi)容947.2.1 實(shí)驗(yàn)1 結(jié)構(gòu)體變量與結(jié)構(gòu)體數(shù)組編程947.2.2 實(shí)驗(yàn)2 鏈

4、表基本操作編程967.2.3 實(shí)驗(yàn)3 鏈表復(fù)雜應(yīng)用編程987.3 常見錯(cuò)誤及解決方法98第八章 文件1028.1 學(xué)習(xí)要點(diǎn)1028.2 實(shí)驗(yàn)內(nèi)容1038.2.1 實(shí)驗(yàn)1 文件順序讀寫編程1038.2.2 實(shí)驗(yàn)2 文件隨機(jī)讀寫編程1048.3 常見錯(cuò)誤及解決方法105第九章 綜合程序設(shè)計(jì)1099.1 學(xué)習(xí)要點(diǎn)1099.2 實(shí)驗(yàn)內(nèi)容1099.2.1 實(shí)驗(yàn)1常用通訊錄管理系統(tǒng)1099.2.2 實(shí)驗(yàn)2 學(xué)生成績管理系統(tǒng)1109.2.3 實(shí)驗(yàn)3學(xué)校教師人事管理系統(tǒng)1109.2.4 實(shí)驗(yàn)4 倉庫物資管理系統(tǒng)1119.2.5 實(shí)驗(yàn)5 手機(jī)銷售管理系統(tǒng)1129.2.6 實(shí)驗(yàn)6 停車場管理系統(tǒng)1139.2.7

5、實(shí)驗(yàn)7 火車訂票管理系統(tǒng)115附錄A 常見編譯錯(cuò)誤和警告117附錄B 常用標(biāo)準(zhǔn)庫函數(shù)119一. stdio.h中包括的常用函數(shù)119二. math.h中包括的常用函數(shù)122三. stdlib.h中包括的常用函數(shù)124四. string.h中包括的常用函數(shù)126五. time.h中包括的常用函數(shù)128六. ctype.h中包括的常用函數(shù)129七. conio.h中包括的常用函數(shù)130參 考 文 獻(xiàn)132第一章 程序設(shè)計(jì)概述 1.1 學(xué)習(xí)要點(diǎn)1. 計(jì)算機(jī)程序設(shè)計(jì)語言的基本成分有:數(shù)據(jù)成分、運(yùn)算成分、控制成分、傳輸成分。按照語言與硬件的關(guān)聯(lián)程度不同,有低級(jí)語言和高級(jí)語言之分。2. 程序設(shè)計(jì)是指設(shè)計(jì)、

6、編制、調(diào)試程序的方法和過程。程序設(shè)計(jì)的具體步驟如下: 方案確定, 算法描述, 數(shù)據(jù)結(jié)構(gòu), 編寫程序, 程序測試。3. 數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)存儲(chǔ)、組織數(shù)據(jù)的方式。數(shù)據(jù)結(jié)構(gòu)一般包括以下三方面內(nèi)容: 數(shù)據(jù)的邏輯結(jié)構(gòu), 數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu), 數(shù)據(jù)的運(yùn)算。4. 算法是為解決問題而采取的方法和步驟。在程序設(shè)計(jì)中,算法是一系列解決問題的清晰指令,一個(gè)算法的優(yōu)劣可以用空間復(fù)雜度與時(shí)間復(fù)雜度來衡量。5. 一個(gè)算法應(yīng)該具有以下五個(gè)重要的特征: 有窮性; 確切性;可行性;有0個(gè)或多個(gè)輸入; 有一個(gè)或多個(gè)輸出。6. 算法的表示方法,一般有傳統(tǒng)流程圖,結(jié)構(gòu)化流程圖(N-S流程圖),偽代碼等。7. 程序設(shè)計(jì)方法: 結(jié)構(gòu)化程序設(shè)計(jì)

7、方法,其核心是模塊化; 面向?qū)ο蟮某绦蛟O(shè)計(jì)方法,其立意于創(chuàng)建軟件重用代碼; 面向服務(wù)的程序設(shè)計(jì)方法。1.2 Visual C+ 6.0 集成開發(fā)環(huán)境Visual C+(簡稱VC+)是微軟公司開發(fā)的基于Windows平臺(tái)的C和C+語言的集成開發(fā)環(huán)境。在這個(gè)集成環(huán)境下,可以編輯、編譯、連接、運(yùn)行和調(diào)試C語言程序,而且提供了程序開發(fā)的有關(guān)工具,并具有項(xiàng)目的自動(dòng)管理、窗口管理和聯(lián)機(jī)幫助等功能?,F(xiàn)在常用的是VC+ 6.0版本,本書以此版本為背景介紹VC+的基本操作。1.2.1 Visual C+ 6.0 開發(fā)環(huán)境介紹1. 啟動(dòng)Visual C+ 6.0若桌面上建立了VC+ 6.0的圖標(biāo), 則可通過鼠標(biāo)雙

8、擊圖標(biāo)啟動(dòng)VC+ 6.0。若桌面上沒有圖標(biāo),則可通過菜單方式啟動(dòng)VC+ 6.0。選擇“開始”“程序”“Microsoft Visual C+ 6.0”“Microsoft Visual C+ 6.0”,即可啟動(dòng)VC+ 6.0,啟動(dòng)后的開發(fā)環(huán)境見圖1.1。2. VC+ 6.0的標(biāo)題欄標(biāo)題欄主要用于顯示當(dāng)前應(yīng)用程序的程序名和打開的文件名。圖1.1中標(biāo)題欄顯示“Microsoft Visual C+”,是因?yàn)槟壳皼]有打開任何文件。如果新建一個(gè)“Hello,World”程序,標(biāo)題欄則會(huì)顯示“hello - Microsoft Visual C+ -hello.cpp”,其中最前面的“hello”是當(dāng)前

9、應(yīng)用程序的程序名,而后面方括號(hào)中的“hello.cpp”就是打開的文件名,如圖1.2所示。3. VC+ 6.0的菜單欄菜單欄位于VC+6.0開發(fā)環(huán)境的上方,它包含了開發(fā)環(huán)境中幾乎所有的命令,如圖1.3所示。用鼠標(biāo)單擊菜單項(xiàng),會(huì)彈出相應(yīng)的下拉菜單,下面簡要介紹每個(gè)菜單。(1) 文件菜單。菜單中的命令主要用來對(duì)文件和項(xiàng)目進(jìn)行操作,圖1.4為文件菜單和菜單命令對(duì)應(yīng)的功能。注意:VC+ 6.0中文版對(duì)菜單命令的翻譯與本書中的用詞并不完全一致,本書中的“項(xiàng)目”一詞與VC+ 6.0中文版菜單中的“工程”的含義是一樣的。(2) 編輯菜單。菜單中的命令主要用來編輯文件內(nèi)容,如進(jìn)行復(fù)制、粘貼、刪除等操作,及斷點(diǎn)

10、管理等功能,圖1.5為編輯菜單和菜單命令對(duì)應(yīng)的功能。(3) 查看菜單。菜單中的命令主要用來改變屏幕的各窗口的顯示方式,以及調(diào)出Class Wizard等,圖1.6為查看菜單和菜單命令對(duì)應(yīng)的功能。(4) 插入菜單。菜單中的命令主要用來實(shí)現(xiàn)添加類、資源、文件等,圖1.7為插入菜單和菜單命令對(duì)應(yīng)的功能。(5) 工程菜單。菜單中的命令主要用來進(jìn)行項(xiàng)目管理,圖1.8為工程菜單和菜單命令對(duì)應(yīng)的功能。 (6) 組建菜單。菜單中的命令主要用來進(jìn)行程序的編譯、連接、調(diào)試及運(yùn)行,圖1.9為組建菜單和菜單命令對(duì)應(yīng)的功能。注:組建菜單中倒數(shù)第3項(xiàng)寫的是“移除工程配置”,這里很可能是軟件漢化過程中出現(xiàn)了翻譯錯(cuò)誤,因?yàn)檫@

11、條命令在VC+6.0英文版中是“set active configutions”,該命令應(yīng)該是“設(shè)置活動(dòng)的工程配置”。(7) 工具菜單。菜單中的命令主要用來調(diào)用IDE集成開發(fā)環(huán)境之外的一些實(shí)用工具,圖1.10為工具菜單和菜單命令對(duì)應(yīng)的功能。(8) 窗口菜單。菜單中的命令主要用于窗口的管理及切換操作,圖1.11為窗口菜單和菜單命令對(duì)應(yīng)的功能。(9) 幫助菜單。菜單中的命令主要用來提供幫助。注意:必須在安裝MSDN(Microsoft公司為使用微軟工具、產(chǎn)品和技術(shù)的開發(fā)人員提供的技術(shù)資源庫)后,才能使用幫助。圖1.12為幫助菜單和菜單命令對(duì)應(yīng)的功能。4. VC+ 6.0的工具欄VC+ 6.0中大部

12、分的菜單命令都有對(duì)應(yīng)的工具欄按鈕,這些按鈕按作用組織成一些小的工具欄,可以分別設(shè)置為顯示或不顯示方式,并且可以被拖放工具欄的某一位置。常用的3個(gè)工具欄是:標(biāo)準(zhǔn)工具欄、向?qū)l工具欄和編譯微型條工具欄,如圖1.13所示。 當(dāng)鼠標(biāo)停留在工具欄上,單擊鼠標(biāo)右鍵,將會(huì)出現(xiàn)如圖1.14所示的快捷菜單,在選項(xiàng)前打勾,則對(duì)應(yīng)的工具欄出現(xiàn)在屏幕上,若去掉選項(xiàng)前的勾號(hào),則對(duì)應(yīng)的工具欄從屏幕上消失。5. VC+ 6.0的窗口區(qū)(1) 工作區(qū)窗口。通過該窗口對(duì)項(xiàng)目進(jìn)行管理,工作區(qū)窗口包含2個(gè)頁面:ClassView頁和FileView頁。ClassView頁用于顯示和瀏覽項(xiàng)目的總體信息,展開頁面中的“+”,可以看到項(xiàng)

13、目內(nèi)所有的類及其成員、所有全局函數(shù)及其全局變量等信息。FileView頁用來分類顯示項(xiàng)目內(nèi)的所有文件的信息,在頁面中雙擊文件名,則會(huì)在編輯窗口顯示相應(yīng)文件的內(nèi)容。(2) 編輯窗口。該窗口是源代碼和資源文件的顯示、編輯的地方,可以同時(shí)顯示多個(gè)子窗口以同時(shí)編輯多個(gè)文件, 窗口菜單中的命令可以用于這些子窗口的排列、切換等工作。(3) 輸出窗口。該窗口主要用于顯示編輯、連接信息和錯(cuò)誤信息等。在窗口中雙擊額錯(cuò)誤提示行,可快速將光標(biāo)定位在錯(cuò)誤行上。圖1.15中工作區(qū)窗口目前是FileView頁面,在該頁面中雙擊“hello.cpp”,于是在編輯窗口顯示了“hello.cpp”的內(nèi)容,輸出窗口顯示了對(duì)“he

14、llo.cpp”進(jìn)行編譯、連接后的信息,最后一行的“hello.exe - 0 error(s),0 warning(s)” ,表示“hello.exe”文件沒有錯(cuò)誤。1.2.2 創(chuàng)建一個(gè)C源程序由于VC+ 6.0是將一個(gè)程序作為一個(gè)項(xiàng)目來進(jìn)行管理,除了“ .cpp”源程序文件外,在程序編譯、連接的過程中還會(huì)產(chǎn)生一些其他的文件,與程序有關(guān)的所有文件都應(yīng)該存放在一個(gè)文件夾里。通常情況下,我們會(huì)在硬盤上創(chuàng)建一個(gè)工作文件夾,用來存放自己編寫的C程序。例如:在D盤上建立文件夾“D:VC程序”,以后創(chuàng)建的C程序都保存在該文件夾下。創(chuàng)建一個(gè)C源程序有多種方法,以下介紹2種方法。1創(chuàng)建一個(gè)控制臺(tái)應(yīng)用程序所謂

15、“控制臺(tái)應(yīng)用程序”是指那些需要與傳統(tǒng)DOS系統(tǒng)保持程序的某種兼容,同時(shí)又不需要為用戶提供完善界面的程序。簡單地講,就是指在Windows環(huán)境下運(yùn)行的DOS程序,它沒有windows圖形接口,使用標(biāo)準(zhǔn)的命令窗口。Visual C+ 6.0中用AppWizard創(chuàng)建一個(gè)控制臺(tái)應(yīng)用程序步驟如下:(1) 選擇“文件”“新建”菜單命令,將顯示“新建”對(duì)話框,在對(duì)話框的“工程”標(biāo)簽頁中選擇“Win32 Console Application”,點(diǎn)擊“位置”右側(cè)的按鈕,選擇文件夾“D:VC程序”,然后在右側(cè)上方的“工程名稱”編輯框中輸入程序名稱“hello”,見圖1.16。 (2) 在“新建”對(duì)話框中按“確

16、定”按鈕,將出現(xiàn)“Win32 Console Application”對(duì)話框,見圖1.17。 (3) 在圖1.17對(duì)話框中選擇第3項(xiàng)“一個(gè)”Hello World!”程序”,單擊“完成”按鈕,系統(tǒng)將顯示“新建工程信息”對(duì)話框,見圖1.18。 (4) 在圖1.18對(duì)話框中單擊“確定”按鈕,將創(chuàng)建一個(gè)hello程序,見圖1.19。圖1.19 hello 應(yīng)用程序界面1(5) 在工作區(qū)窗口雙擊“hello classes”,或單擊左側(cè)的“+”號(hào),將出現(xiàn)“Globals”,再雙擊它,將出現(xiàn)“main(int agrgc, char *argv)”,雙擊它則在編輯窗口將出現(xiàn)“hello.cpp”的源代碼

17、,見圖1.20。圖1.20 hello 應(yīng)用程序界面2這個(gè)程序進(jìn)行編譯、連接后將生成“hello.exe”可執(zhí)行文件,該文件運(yùn)行后,將在屏幕上輸出信息“Hello World!”。我們也可以在main函數(shù)中刪去原有的printf(“Hello World!n”); 輸入自己編寫的程序代碼。另外,在上述第(3)步操作中,還可以選擇第2項(xiàng)“一個(gè)簡單的程序”,單擊“完成”按鈕,系統(tǒng)也會(huì)顯示圖1.18所示的“新建工程信息”對(duì)話框,在此對(duì)話框中單擊“確定”按鈕,將自動(dòng)創(chuàng)建一個(gè)程序。這種方式創(chuàng)建的程序與圖1.20所示的程序類似,只是main函數(shù)中沒有printf函數(shù)調(diào)用語句。2. 新建一個(gè)文本文件(1)

18、單擊標(biāo)準(zhǔn)工具欄最左側(cè)的新建文本文件按鈕“”,打開一個(gè)新的文檔窗口,在該窗口內(nèi)輸入我們自己編寫的C程序代碼,見圖1.21。圖1.21 新建文本文檔Text1(2) 輸入完代碼后,必須將程序保存下來,單擊標(biāo)準(zhǔn)工具欄的保存按鈕“”,此時(shí)將彈出一個(gè)“保存為”文件對(duì)話框,見圖1.22。圖1.22 “保存為”對(duì)話框(3) 在“保存為”對(duì)話框中單擊“”按鈕,會(huì)彈出下拉菜單,見圖1.23。圖1.23 在“保存為”對(duì)話框中選擇D盤在下拉菜單中選擇“本地磁盤 (D:)”,會(huì)出現(xiàn)圖1.24(a)所示的界面,再選中“VC程序”文件夾,然后按“打開”按鈕,則會(huì)出現(xiàn)圖1.24(b)所示的界面,再單擊“創(chuàng)建新文件夾”按鈕,

19、則在“D:VC程序”文件夾下新建一個(gè)文件夾,然后輸入“program1” ,如圖1.24(c)所示,然后雙擊打開該文件夾,在下方的編輯框中輸入程序名,如“ex1.cpp”(或“ex1.c”,也可以起別的名字,但文件名的后綴必須是“.cpp”或“.c”),見圖1.24(d),最后按“保存”按鈕,將輸入的程序保存下來了。 (4) 程序保存下來后,標(biāo)題欄中的文件名由“Text1 * ”變?yōu)椤癳x1.cpp”,而在最下面的狀態(tài)欄會(huì)顯示信息“D:VC程序program1ex1.cpp已保存”,見圖1.25,然后可以對(duì)程序進(jìn)行編譯、連接,最后生成“ex1.exe”可執(zhí)行文件。3. 打開已有的源程序文件打開

20、已經(jīng)保存在磁盤上的源程序文件(如:D:VC程序program1ex1.cpp),有兩種方法:(1) 按源程序文件的存放位置找到已有文件名“ex1.cpp”,即:我的電腦D盤VC程序program1ex1.cpp,然后雙擊文件名“ex1.cpp”,則會(huì)自動(dòng)進(jìn)入VC+的集成環(huán)境,并打開該文件。(2) 先進(jìn)入VC+的集成環(huán)境,然后選擇菜單“文件”“打開”,或直接單擊工具欄中打開按鈕“”,則會(huì)出現(xiàn)打開對(duì)話框,再從中選擇要打開的文件。 另外,如果要打開的文件是不久前打開過的,可以選擇菜單“文件”“最近文件”,會(huì)出現(xiàn)最近用過的源文件列表,從中選擇要打開的文件即可。1.2.3 C源程序的編譯、連接和運(yùn)行一個(gè)

21、C源程序必須經(jīng)過編譯、連接,生成“.exe”可執(zhí)行文件后才能運(yùn)行?,F(xiàn)以圖1.20所示的hello程序?yàn)槔f明程序的編譯、連接、運(yùn)行過程:首先單擊編譯工具條上的組建按鈕“”,這時(shí)會(huì)彈出一個(gè)對(duì)話框,詢問用戶是否要?jiǎng)?chuàng)建一個(gè)默認(rèn)的工作區(qū),見圖1.26,單擊“是”按鈕后,系統(tǒng)會(huì)對(duì)hello程序進(jìn)行編譯、連接,并在輸出窗口顯示編譯的內(nèi)容,見圖1.27。圖1.26 創(chuàng)建默認(rèn)工作區(qū)選項(xiàng)圖1.27 程序編譯、連接后的界面當(dāng)出現(xiàn)信息:hello.exe - 0 error(s), 0 warning(s),表示hello.exe已經(jīng)正確地生成了,可以運(yùn)行該程序。單擊編譯工具條上的“”按鈕,執(zhí)行程序,運(yùn)行結(jié)果將顯示

22、在控制臺(tái)窗口中,見圖1.28。圖1.28 hello程序運(yùn)行結(jié)果在控制臺(tái)窗口中的第2行文字“Press any key to continue”是系統(tǒng)自動(dòng)加上的,表示hello程序運(yùn)行后,按任意鍵返回到VC+的開發(fā)環(huán)境。如果程序編譯時(shí)出現(xiàn)錯(cuò)誤,將在輸出窗口顯示錯(cuò)誤信息,例如:輸出函數(shù)printf少寫了一個(gè)字母f,編譯就會(huì)出錯(cuò),見圖1.29。 根據(jù)輸出窗口提示的錯(cuò)誤信息,我們對(duì)程序進(jìn)行修改,然后再按“”按鈕,若不再有錯(cuò)誤,則運(yùn)行程序,否則應(yīng)繼續(xù)修改錯(cuò)誤。1.2.4 C程序的單步調(diào)試命令源程序通過編譯連接,沒有錯(cuò)誤,但運(yùn)行結(jié)果卻與我們?cè)O(shè)想的不同,這說明程序還存在著邏輯錯(cuò)誤,如何修改邏輯錯(cuò)誤呢?唯一

23、的手段就是對(duì)程序進(jìn)行單步調(diào)試,從而確定問題出現(xiàn)在什么地方。啟動(dòng)調(diào)試有2種方法,一是在“組建”菜單中選擇“開始調(diào)試”命令,二是直接按F10鍵(最簡單的方法)。啟動(dòng)調(diào)試后將出現(xiàn)圖1.30所示的界面和控制臺(tái)窗口(出現(xiàn)后會(huì)自動(dòng)最小化)。 在源代碼中出現(xiàn)跟蹤箭頭表示Debugger正在運(yùn)行,需要注意的是,跟蹤箭頭并不跳過變量聲明部分,而箭頭所指向的語句是下一次將要執(zhí)行的代碼行。(1) 調(diào)試工具欄調(diào)試工具欄(圖1.31)第1行的按鈕是一些調(diào)試命令按鈕,這些調(diào)試命令也可以在調(diào)試菜單中找到,見圖1.32。圖1.31 調(diào)試工具欄圖1.32 調(diào)試菜單下面分別介紹這些調(diào)試命令:“”按鈕:GO命令,執(zhí)行程序直到遇到斷

24、點(diǎn)或程序結(jié)束?!啊卑粹o:Restart命令,重新從程序開始處進(jìn)行調(diào)試。“”按鈕:Stop Debugging命令,停止調(diào)試?!啊卑粹o:Break Execution命令,在當(dāng)前點(diǎn)上掛起程序的執(zhí)行。 “”按鈕:Apply Code Changes命令,在程序調(diào)試時(shí)修改源代碼。“”按鈕:Step Into命令,進(jìn)入函數(shù)內(nèi)部單步執(zhí)行?!啊卑粹o:Step Over命令,單步執(zhí)行下一條語句(不進(jìn)入函數(shù))。“”按鈕:Step Out命令,跳出當(dāng)前函數(shù)?!啊卑粹o:Run to Cursor命令,執(zhí)行到光標(biāo)所在的代碼行。 (2) Step Over命令與Step Into命令在沒有遇到函數(shù)調(diào)用語句時(shí),Step

25、 Over命令(F10)與Step Into命令(F11)完成的功能是相同的,當(dāng)遇到函數(shù)調(diào)用時(shí),Step Over命令將會(huì)全速執(zhí)行完被調(diào)用的函數(shù),跟蹤箭頭指向下一行代碼;而Step Into命令則會(huì)進(jìn)入到被調(diào)用的函數(shù)內(nèi)部,跟蹤箭頭指向函數(shù)內(nèi)的代碼行,這樣我們可以單步調(diào)試函數(shù)內(nèi)的語句。 Step Over和Step Into命令的區(qū)別:調(diào)試程序到圖1.33所示的狀態(tài),此時(shí)跟蹤箭頭指向“aver=average(sc);”,其中average(sc)是函數(shù)調(diào)用,這時(shí)執(zhí)行Step Over命令(即按F10鍵),將出現(xiàn)圖1.34所示的狀態(tài),跟蹤箭頭指向下一條輸出語句。在圖1.33所示的狀態(tài)下,如果執(zhí)行

26、Step Into命令(即按F11鍵),會(huì)出現(xiàn)如圖1.35所示的情況,跟蹤箭頭指向了average函數(shù)的開始處,這時(shí)繼續(xù)按F11(按F10也行),跟蹤箭頭會(huì)指向“sum=0;”語句,下面可以繼續(xù)進(jìn)行單步調(diào)試(按F10、F11均可),執(zhí)行到最后,跟蹤箭頭指向average函數(shù)末尾的“”,見圖1.36,此時(shí)再按一下F11鍵,跟蹤箭頭將重新指向main函數(shù)中的“aver=average(sc);”,即圖1.33的狀態(tài),再按一下F11,跟蹤箭頭指向下一條輸出語句,即出現(xiàn)圖1.34的狀態(tài)。說明: C語言中進(jìn)行輸入、輸出其實(shí)都是調(diào)用輸入、輸出函數(shù),所以在遇到scanf或printf時(shí)不要按F11鍵,應(yīng)按F

27、10鍵,即遇到系統(tǒng)定義的標(biāo)準(zhǔn)函數(shù)時(shí)按F10鍵。 按F11進(jìn)入函數(shù)內(nèi)部后,如果想跳出函數(shù)的話,可使用Step Out命令(同時(shí)按Shift+F11),這樣可以全速執(zhí)行完函數(shù),回到原來的調(diào)用語句位置。 在調(diào)試程序時(shí),如果只使用單步執(zhí)行(F10),有時(shí)會(huì)非常麻煩。例如,有一個(gè)程序有30行代碼,確定前20行代碼是正確,我們希望從第21行開始單步調(diào)試,而不是從第1行就開始單步執(zhí)行;此時(shí)可以使用Run to Cursor命令(同時(shí)按Ctrl+F10),執(zhí)行程序到光標(biāo)所在的代碼行,這樣可以加快調(diào)試的速度。(3) 設(shè)置斷點(diǎn)在對(duì)循環(huán)結(jié)構(gòu)進(jìn)行調(diào)試時(shí),如果我們不想一步一步地執(zhí)行循環(huán)體內(nèi)的所有語句,可以在適當(dāng)?shù)奈恢迷O(shè)

28、置斷點(diǎn)。如果我們想把斷點(diǎn)設(shè)在循環(huán)中的第3條語句“sum=sum+ai;”,先將光標(biāo)定位在該行,然后按編輯工具欄中的“”按鈕,則在該行的最前面出現(xiàn)一個(gè)深褐色的圓點(diǎn),見圖1.37,表明這里已經(jīng)設(shè)置了一個(gè)“斷點(diǎn)”,程序運(yùn)行到這里會(huì)暫停。然后按“”按鈕或按F5鍵(即執(zhí)行Go命令),程序?qū)?zhí)行到斷點(diǎn)所在的代碼行,跟蹤箭頭也指向該行(見圖1.38)。繼續(xù)按F5則程序繼續(xù)執(zhí)行,而且仍然會(huì)在斷點(diǎn)處暫停,每按一次F5就是執(zhí)行一次for循環(huán),當(dāng)i=9時(shí)為最后一次循環(huán),見圖1.39,這時(shí)如果再按F5,程序?qū)⑷繄?zhí)行完并退出調(diào)試狀態(tài)。圖1.38 程序執(zhí)行到斷點(diǎn)處暫停如果我們還想繼續(xù)調(diào)試循環(huán)后面的語句就不能按F5,應(yīng)該

29、按F10進(jìn)行單步調(diào)試?;蛘呶覀?cè)诤竺婺硞€(gè)位置設(shè)置第2個(gè)斷點(diǎn),見圖1.40,然后再按F5,這樣才能保證我們還處于調(diào)試狀態(tài)中。注意:在調(diào)試過程中可以隨時(shí)設(shè)置斷點(diǎn),也可以隨時(shí)取消斷點(diǎn)。取消斷點(diǎn)時(shí)將光標(biāo)定位于斷點(diǎn)所在的行,然后按“”按鈕,褐色圓點(diǎn)標(biāo)記就會(huì)消失了。1.2.5 C程序的調(diào)試窗口調(diào)試工具欄第2行的按鈕是用來控制打開對(duì)應(yīng)的調(diào)試窗口:“”按鈕:打開QuickWatch窗口,在該窗口中可以計(jì)算表達(dá)式的值。“”按鈕:打開Watch窗口,該窗口查看應(yīng)用程序的變量名及其當(dāng)前值?!啊卑粹o:打開Variables窗口,該窗口有3個(gè)標(biāo)簽,Auto標(biāo)簽顯示當(dāng)前和前一條語句中所使用的變量和返回值,Local標(biāo)簽顯

30、示當(dāng)前函數(shù)中的所有局部變量,This標(biāo)簽顯示This指針?biāo)赶驅(qū)ο蟮念愋?、名字及值?!啊卑粹o:打開Registers窗口,該窗口顯示CPU狀態(tài)寄存器的內(nèi)容。“”按鈕:打開Memory窗口,該窗口顯示該應(yīng)用程序所占的內(nèi)存內(nèi)容?!啊卑粹o:打開Call Stack窗口,該窗口顯示所有未返回的被調(diào)用的函數(shù)名?!啊卑粹o,打開Disassembly窗口,其中的匯編語言代碼來自編譯后程序的反匯編。1. Variables窗口以下是單步調(diào)試程序時(shí),Variables窗口中Auto標(biāo)簽顯示的內(nèi)容。圖1.41(a)是最初調(diào)試狀態(tài),跟蹤箭頭指向main函數(shù)的“”,此時(shí)Variables窗口中是空白的。再按F10,跟

31、蹤箭頭指向“sum=0.0;”,這時(shí)Variables窗口中列出了所有變量名及其值(見圖1.41(b)),但這些變量值都是隨機(jī)數(shù)。繼續(xù)按F10,跟蹤箭頭指向“i=1;”,見圖1.41(c),注意圖中sum的值顯示為紅色的0.,繼續(xù)按F10,跟蹤箭頭指向“scnaf(“%d”,&n);”,見圖1.41(d),這時(shí)Variables窗口只顯示了2個(gè)變量i和&n。由于目前跟蹤箭頭指向了scanf輸入函數(shù)語句,所以再按F10,會(huì)發(fā)現(xiàn)跟蹤箭頭沒有向下移動(dòng),此時(shí)我們需要轉(zhuǎn)到控制臺(tái)窗口輸入n的值(假設(shè)輸入3),按回車鍵后將回到調(diào)試窗口,且跟蹤箭頭指向while語句,見圖1.41(e),而Variables窗

32、口顯示了4個(gè)值,這是因?yàn)锳uto標(biāo)簽會(huì)顯示包含當(dāng)前和前一條語句中所使用的變量和返回值,i和n是屬于while語句的,&n和scanf returned是屬于scanf語句的。繼續(xù)按F10,跟蹤箭頭指向循環(huán)內(nèi)的輸入語句,見圖1.41(f),再按F10,跟蹤箭頭不動(dòng),說明此時(shí)又需要到控制臺(tái)窗口輸入數(shù)據(jù)(假設(shè)輸入數(shù)據(jù)為85)。輸入數(shù)據(jù)85后的情況見圖1.41(g),再按F10,見圖1.41(h)。繼續(xù)按F10,將重復(fù)執(zhí)行循環(huán)體內(nèi)的3條語句,直到循環(huán)結(jié)束。 循環(huán)結(jié)束后跟蹤箭頭指向“ave=sum/n;”,見圖1.41(i),再按2次F10,跟蹤箭頭指向“”,見圖1.41(j),此時(shí)控制臺(tái)窗口會(huì)顯示出程

33、序結(jié)果。跟蹤箭頭指向“”時(shí),程序就要結(jié)束了,按F10并不會(huì)立即結(jié)束,所以這時(shí)我們按F5,會(huì)馬上結(jié)束調(diào)試回到原來的編輯狀態(tài)。使用Auto標(biāo)簽觀察時(shí)有一個(gè)問題,它自動(dòng)跟蹤的變量范圍比較狹窄,所以我們有時(shí)使用Local標(biāo)簽來觀察當(dāng)前函數(shù)的所有變量(見圖1.42(a)至(d))。 圖1.42 Local標(biāo)簽2. Watch窗口和QuickWatch窗口(1) Watch窗口的使用通過前面的學(xué)習(xí),我們已經(jīng)學(xué)會(huì)在調(diào)試程序的過程使用Variables窗口來觀察變量,由于Variables窗口中的變量是動(dòng)態(tài)變化的,而有時(shí)我們需要在程序運(yùn)行期間一直觀察某些特定的變量,這就需要使用Watch窗口。 Watch窗口

34、有4個(gè)標(biāo)簽:Watch1至Watch4,這樣有利于我們把要觀察的變量分組放到不同的標(biāo)簽中。在Watch窗口中添加一個(gè)變量的方法如下:在程序代碼中拷貝一個(gè)變量名,然后將其復(fù)制到Watch窗口中的“名稱” 列中;或者在“名稱列”中直接輸入想要觀察的變量名,見圖1.43。圖1.43 Watch窗口Watch窗口還可以按不同的數(shù)據(jù)類型顯示變量的值,如圖1.44中,第1行按八進(jìn)制顯示變量a,第2行是按十六進(jìn)制顯示a,第3行是按十進(jìn)制顯示a。圖1.44 以不同的數(shù)據(jù)類型顯示變量以不同數(shù)據(jù)類型顯示變量的值,方法很簡單,在變量名后加上數(shù)據(jù)類型對(duì)應(yīng)的格式字符即可,見表1.1,變量名與格式字符之間用逗號(hào)分隔。表1

35、.1 格式字符格式字符含 義d輸出帶符號(hào)的十進(jìn)制整數(shù)u輸出無符號(hào)十進(jìn)制整數(shù)x輸出無符號(hào)十六進(jìn)制整數(shù)(輸出前導(dǎo)符0x)o輸出無符號(hào)八進(jìn)制整數(shù)(輸出前導(dǎo)符0)f輸出十進(jìn)制實(shí)數(shù)(隱含輸出6位小數(shù))e以指數(shù)形式輸出實(shí)數(shù)(隱含輸出6位小數(shù))g自動(dòng)選用f或e格式中輸出寬度較短的一種格式輸出實(shí)數(shù),不輸出無意義的0c輸出單個(gè)字符s輸出字符串 (2) QuickWatch窗口的使用使用QuickWatch可以快速檢查變量和參數(shù)的值,也可以通過QuickWatch將變量添加到Watch窗口中。打開QuickWatch窗口的方法:在調(diào)試狀態(tài)下單擊調(diào)試工具欄中的“”圖標(biāo),或在菜單欄中選擇“調(diào)試”,再選擇其下拉菜單的最

36、后一個(gè)命令“QuickWatch”,都可以打開QuickWatch窗口,見圖1.45。圖1.45 QuickWatch窗口沒有變量在“表達(dá)式”文本框中輸入或粘貼一個(gè)變量名,然后按“重置”按鈕,將會(huì)在“當(dāng)前值”文本框顯示該變量的名稱和當(dāng)前值,見圖1.46;如果按“添加監(jiān)視”按鈕,會(huì)將該變量添加到Watch窗口中。圖1.46 QuickWatch窗口輸入變量名(3) 快速觀察變量的方法在程序調(diào)試狀態(tài)下,將“”形狀的鼠標(biāo)指針懸浮于源代碼的某個(gè)變量上,就會(huì)出現(xiàn)變量的當(dāng)前值,見圖1.47。圖1.47 用鼠標(biāo)快速觀察變量3. Call Stack窗口打開Call Stack窗口的方法很簡單,在調(diào)試對(duì)話框中

37、單擊“”按鈕即可。Call Stack窗口用來顯示所有未返回的被調(diào)用的函數(shù)名,如圖1.48所示,當(dāng)前程序在main函數(shù)中運(yùn)行,Call Stack窗口的第一行顯示了“main( ) line 5”,同時(shí)還有一個(gè)黃色的箭頭指向它。圖1.48 Call Stack窗口1當(dāng)程序執(zhí)行到“aver=average(sc);”時(shí),按F11鍵進(jìn)入函數(shù)內(nèi)部,跟蹤箭頭指向average函數(shù)中第一行“ int i, sum=0;”,此時(shí)Call Stack窗口中的顯示內(nèi)容發(fā)生了變化,見圖1.49。圖1.49 Call Stack窗口2Call Stack窗口中第1、2行的信息如下:average(int * 0x

38、0012ff54) line 14main( ) line 9 + 9 bytes它們的格式是:先是函數(shù)的名字,然后是參數(shù)的類型和當(dāng)前值,再后面列出調(diào)用語句所在的行號(hào)和字節(jié)偏移量。注意,行號(hào)和字節(jié)偏移量這2個(gè)值是變化的。窗口中最后2行的信息對(duì)我們來說目前是基本一樣的,暫時(shí)可以不管它。另外,注意Call Stack窗口中的黃色箭頭始終指向當(dāng)前正在執(zhí)行的函數(shù)。當(dāng)average函數(shù)調(diào)用結(jié)束后,Call Stack窗口中不再顯示該函數(shù)的信息,見圖1.50。圖1.50 Call Stack窗口3Call Stack窗口對(duì)于調(diào)試遞歸函數(shù)很有幫助,我們可以通過Call Stack窗口清楚的看到當(dāng)前遞歸調(diào)用的

39、層次,以及本次遞歸調(diào)用中局部變量的值。下面以求階乘的遞歸函數(shù)為例,注意觀察Call Stack窗口和Variables窗口中的信息。圖1.51是還沒調(diào)用fac函數(shù)時(shí)的狀態(tài),在Variables窗口看到m值為4,Call Stack窗口中的黃色箭頭指向當(dāng)前正在執(zhí)行的main函數(shù)。圖1.51 main函數(shù)沒調(diào)用fac函數(shù)圖1.52顯示的是第1次調(diào)用fac函數(shù)的情況,因main函數(shù)中m為4,調(diào)用fac(m)即是調(diào)用fac(4),在Variables窗口中可以看到參數(shù)n的值為4,在Call Stack窗口中的黃色箭頭指向fac(int 4)。圖1.52第1次調(diào)用fac函數(shù)圖1.53顯示的第4次遞歸調(diào)用

40、,此時(shí)n為1,滿足遞歸的結(jié)束條件,此時(shí)跟蹤箭頭指向“return(1);”,在Call Stack窗口中的黃色箭頭指向fac(int 1)。圖1.53 第4次遞歸調(diào)用在圖1.53所示狀態(tài)下,繼續(xù)按F10鍵,程序?qū)⒎祷氐缴弦粚拥倪f歸調(diào)用,圖1.54顯示的就是從第4次遞歸調(diào)用返回到第3次遞歸調(diào)用,在Variables窗口中可以看到n的值為2,函數(shù)fac的返回值為1.00000;在Call Stack窗口中已經(jīng)沒有“fac(int 1) line 18”這一行信息了,此時(shí)黃色箭頭指向fac(int 2)。圖1.54 從第4次遞歸調(diào)用返回到第3次遞歸調(diào)用在圖1.54所示狀態(tài)下,繼續(xù)按F10鍵,將依次返

41、回到上一層的遞歸調(diào)用,圖1.55顯示的是程序返回到第1次遞歸調(diào)用,在Variables窗口中看到n的值為4,函數(shù)fac的返回值為6.00000;在Call Stack窗口中的黃色箭頭指向fac(int 4)。圖1.55 程序返回到第1次遞歸調(diào)用在圖1.55所示狀態(tài)下,繼續(xù)按F10鍵,程序?qū)⒎祷豰ain函數(shù)(見圖1.56),在Variables窗口中看到n的值為4,y的值為24.00000;在Call Stack窗口中的黃色箭頭指向main函數(shù)。圖1.56 遞歸調(diào)用結(jié)束回到main函數(shù) 在遞歸調(diào)用過程中Call Stack窗口中的內(nèi)容隨著函數(shù)的調(diào)用、返回不斷發(fā)生著變化,大家在自己調(diào)試遞歸程序時(shí)請(qǐng)

42、仔細(xì)觀察。1.2.6創(chuàng)建一個(gè)項(xiàng)目文件(工程)如果一個(gè)C程序包含多個(gè)源程序文件,則需要?jiǎng)?chuàng)建一個(gè)項(xiàng)目文件。一個(gè)項(xiàng)目文件中可以包含多個(gè)文件(包括.cpp源文件和.h頭文件)。在編譯時(shí),系統(tǒng)會(huì)分別對(duì)項(xiàng)目文件中的每個(gè)文件進(jìn)行編譯,然后將所得到的目標(biāo)文件連接成為一個(gè)整體,再與系統(tǒng)的有關(guān)資源連接,最后生成一個(gè)可執(zhí)行文件。下面介紹創(chuàng)建一個(gè)項(xiàng)目文件的步驟:(1) 創(chuàng)建一個(gè)項(xiàng)目文件在VC+主窗口中選擇“文件”“新建”菜單命令,將顯示“新建”對(duì)話框,在對(duì)話框的“工程”標(biāo)簽頁中選擇“Win32 Console Application”,在右側(cè)“工程名稱”下方的編輯框中輸入項(xiàng)目文件名稱,如圖1.57中輸入的是“proj

43、ect1”。圖1.57 新建工程project1在“新建”對(duì)話框中按“確定”按鈕,將出現(xiàn)“Win32 Console Application”對(duì)話框,見圖1.58。圖1.58 Win32 Console Application對(duì)話框在上圖所示的對(duì)話框中選擇第1項(xiàng)“一個(gè)空工程”,單擊“完成”按鈕,系統(tǒng)將顯示“新建工程信息”對(duì)話框,見圖1.59。圖1.59 “新建工程信息”對(duì)話框在“新建工程信息”對(duì)話框中單擊“確定”按鈕,將自動(dòng)創(chuàng)建一個(gè)project1工程,見圖1.60。圖1.60 創(chuàng)建project1(2) 在創(chuàng)建的project1項(xiàng)目文件中添加源程序文件選擇“文件”“新建”菜單命令,將顯示“新

44、建”對(duì)話框,在“文件”標(biāo)簽頁中選擇“C+ Source File”,在右側(cè)“文件名”下方的編輯框中輸入源程序文件的名稱,如圖1.61中輸入的是“file1.cpp”。 圖1.61 新建一個(gè)源程序文件在“新建”對(duì)話框中輸入文件名后按“確定”按鈕,在VC+主窗口的編輯窗口會(huì)出現(xiàn)一個(gè)標(biāo)題為“file1.cpp *”的空白窗口,見圖1.62。然后我們可以在此窗口中添加程序代碼,代碼輸入完成后記得要保存(保存后,標(biāo)題中就沒有那個(gè)“*”號(hào)了),見圖1.63。圖1.62 出現(xiàn)file1.cpp編輯窗口圖1.63 在file1.cpp編輯窗口內(nèi)輸入代碼 按照上述方法可以繼續(xù)添加源程序文件,例如,我們又添加了一

45、個(gè)文件“file2.cpp”,見圖1.64。圖1.64 file2.cpp編輯窗口 如果該項(xiàng)目文件只由“file1.cpp”和“file2.cpp”這兩個(gè)源程序文件組成,下面就可以對(duì)項(xiàng)目文件進(jìn)行編譯、連接了,在單擊“”按鈕后,將出現(xiàn)圖1.65所示的狀態(tài)。如果沒有錯(cuò)誤,則可按“”按鈕,運(yùn)行程序。圖1.65 編譯、連接project1如果打開一個(gè)已經(jīng)存在的項(xiàng)目文件(如:D:VC程序 project1 project1.dsw),有兩種方法: 按項(xiàng)目文件的存放位置找到已有文件“project1.dsw”,即:我的電腦D盤VC程序 project1 project1.dsw,然后雙擊文件名“proje

46、ct1.dsw”,則會(huì)自動(dòng)進(jìn)入VC+的集成環(huán)境,并打開該項(xiàng)目文件。 先進(jìn)入VC+的集成環(huán)境,然后選擇菜單“文件”“打開工作空間”,或直接單擊工具欄中打開按鈕“”,則會(huì)出現(xiàn)打開對(duì)話框,再從中選擇要打開的項(xiàng)目文件。 另外,如果要打開的項(xiàng)目文件是不久前打開過的,可選擇菜單“文件”“最近工作空間”,會(huì)出現(xiàn)最近用過的項(xiàng)目文件列表,從中選擇要打開的文件即可。1.3 實(shí)驗(yàn) 認(rèn)識(shí)Visual C+ 6.0 的開發(fā)環(huán)境一實(shí)驗(yàn)?zāi)康呐c要求1. 認(rèn)識(shí)Visual C+ 6.0 的開發(fā)環(huán)境。2. 學(xué)習(xí)在VC+ 6.0中編輯、編譯、連接和運(yùn)行一個(gè)C語言程序。3. 通過運(yùn)行簡單的C語言程序,初步了解C語言源程序的特點(diǎn)。二實(shí)

47、驗(yàn)題目1. 熟悉Visual C+ 6.0 的開發(fā)環(huán)境的使用。2. 采用新建“一個(gè)“Hello World!”程序的方法,創(chuàng)建一個(gè)C源程序文件,輸入以下代碼,然后編譯、連接、運(yùn)行程序,并查看結(jié)果,將程序中3個(gè)printf函數(shù)中最后的“n”去掉后,再編譯、連接、運(yùn)行程序,看看結(jié)果如何。#includeint main( ) printf(“* * * * * * * * * *n”); printf(“ Very good!n”);printf(“* * * * * * * * * *n”);return 0;3. 采用新建一個(gè)文本文件的方法,創(chuàng)建一個(gè)C源程序文件,輸入以下代碼,然后編譯、連接、

48、運(yùn)行程序,并查看結(jié)果。#includeint main( ) int x, y, z; x=1279; y=2548; z=x+y;printf(“z=%dn”, z);1.4 常見錯(cuò)誤及解決方法1采用“創(chuàng)建一個(gè)“hello world” 程序”方式建立一個(gè)新的源程序文件時(shí),將代碼中的文件包含命令#include “stdafx.h”刪除,導(dǎo)致程序編譯出現(xiàn)以下錯(cuò)誤:fatal error C1010: unexpected end of file while looking for precompiled header directive重大錯(cuò)誤 C1010:尋找預(yù)編譯頭文件路徑時(shí)遇到了不該遇

49、到的文件尾解決方法:不要?jiǎng)h除該文件包含命令,可以根據(jù)需要,添加其他的頭文件;輸入代碼時(shí)只要將main函數(shù)中不需要的語句刪除,再輸入自己的代碼即可。2. 采用“建立一個(gè)文本文件”方式創(chuàng)建一個(gè)源程序后,在程序運(yùn)行結(jié)束后,沒有關(guān)閉該程序,而是又新建一個(gè)文本文件,輸入第2個(gè)程序并保存,然后按組建按鈕“”,再按運(yùn)行按鈕“”,這時(shí)會(huì)發(fā)現(xiàn)系統(tǒng)運(yùn)行的還是第1個(gè)程序。 解決方法:選擇“文件”菜單中的“關(guān)閉工作空間”命令,先將第1個(gè)程序完全關(guān)閉,再創(chuàng)建第2個(gè)程序。3. 采用“建立一個(gè)文本文件”方式新建一個(gè)源程序后,保存文件時(shí)沒有建立一個(gè)文件夾,而是直接保存在桌面、我的文檔或某個(gè)本地磁盤上,這雖然不是很嚴(yán)重的錯(cuò)誤,

50、但也不是一個(gè)良好的編程習(xí)慣,所以建議大家一個(gè)C程序一定要存放在一個(gè)文件夾中。第二章 C語言基礎(chǔ)知識(shí)2.1 學(xué)習(xí)要點(diǎn)1. C語言的特點(diǎn), C語言是一種結(jié)構(gòu)化程序設(shè)計(jì)語言,提供了豐富的運(yùn)算符和數(shù)據(jù)類型,它允許直接訪問地址,能進(jìn)行位運(yùn)算,能實(shí)現(xiàn)匯編語言的大部分功能,可以直接對(duì)硬件進(jìn)行操作,C語言生成的代碼質(zhì)量高,適應(yīng)范圍廣,C語言程序本身不依賴于機(jī)器硬件系統(tǒng),適合于多種操作系統(tǒng)。2. C程序的編寫風(fēng)格:(1) 嚴(yán)格采用階梯層次組織程序代碼;(2) 對(duì)復(fù)雜的條件判斷,應(yīng)盡量使用括號(hào);(3) 變量的定義,盡量位于函數(shù)的開始位置;(4) 采用規(guī)范的格式定義、設(shè)計(jì)各種函數(shù);(5) 盡量不要用goto語句;(

51、6) 盡量減少全局變量的使用。3. C程序的編譯、鏈接過程是:C源程序(*.c)預(yù)編譯處理(*.c) 編譯、優(yōu)化程序(*.s、*.asm)匯編程序(*.obj、*.o、*.a) 鏈接程序(*.lib、*.exe、*.elf、*.axf)。4. C程序的編譯預(yù)處理,為了優(yōu)化代碼,提高目標(biāo)代碼和可執(zhí)行代碼的效率及適應(yīng)性,在編譯過程的初期,首先對(duì)預(yù)處理命令和特殊符號(hào)進(jìn)行處理,然后再進(jìn)行程序語句的編譯。預(yù)處理命令主要包括:宏定義、文件包含和條件編譯。5. C程序的編譯優(yōu)化,源程序在經(jīng)過編譯之后,還需要一個(gè)優(yōu)化環(huán)節(jié),優(yōu)化一般分為兩類,第一類是對(duì)中間代碼的優(yōu)化,這種優(yōu)化不依賴于具體的計(jì)算機(jī);另一類則主要是

52、針對(duì)目標(biāo)代碼的生成進(jìn)行優(yōu)化。6. C程序的匯編,對(duì)于被編譯系統(tǒng)處理過的每一個(gè)C語言源程序,都要經(jīng)過匯編過程才能得到相應(yīng)的目標(biāo)文件,目標(biāo)文件中存放的也就是與源程序?qū)?yīng)的機(jī)器語言代碼。這個(gè)過程可以是隱含的,特別是在集成開發(fā)環(huán)境中,一般不產(chǎn)生匯編代碼而是直接產(chǎn)生目標(biāo)代碼。7. C程序的鏈接,鏈接程序的主要工作就是將有關(guān)的目標(biāo)文件彼此相連接,使得所有的這些目標(biāo)文件成為一個(gè)能夠被操作系統(tǒng)裝入執(zhí)行的統(tǒng)一整體。根據(jù)開發(fā)人員指定的同庫函數(shù)鏈接方式的不同,鏈接處理可分為兩種:(1) 靜態(tài)鏈接,函數(shù)的代碼將從其所在的靜態(tài)鏈接庫中被拷貝到最終的可執(zhí)行程序中。靜態(tài)鏈接庫實(shí)際上是一個(gè)目標(biāo)文件的集合,其中的每個(gè)文件含有庫

53、中的一個(gè)或者一組相關(guān)函數(shù)的代碼。庫中所有的函數(shù)均在相應(yīng)的頭文件(*.h)中定義并在源程序中引用。(2) 動(dòng)態(tài)鏈接,動(dòng)態(tài)鏈接函數(shù)的代碼不被放到可執(zhí)行程序中,而是位于被稱為“動(dòng)態(tài)鏈接庫”的某個(gè)目標(biāo)文件(*.dll)中。鏈接程序此時(shí)所作的只是在最終的可執(zhí)行程序中記錄下共享對(duì)象的名字以及其它少量的登記信息。在可執(zhí)行文件被執(zhí)行時(shí),相應(yīng)動(dòng)態(tài)鏈接庫的內(nèi)容將被裝載到特定的虛擬地址空間,由動(dòng)態(tài)鏈接程序根據(jù)可執(zhí)行程序中記錄的信息找到該空間中相應(yīng)的函數(shù)代碼。8. C語言字符集由字母、數(shù)字、空白、標(biāo)點(diǎn)和特殊字符組成。9. C語言中的標(biāo)識(shí)符就是常量、變量、類型、語句、標(biāo)號(hào)及函數(shù)的名稱。語言中標(biāo)識(shí)符有三類,關(guān)鍵字、預(yù)定義

54、標(biāo)識(shí)符和用戶定義標(biāo)識(shí)符。用戶定義標(biāo)識(shí)符只能由字母、數(shù)字和下劃線三種字符組成,且第一個(gè)字符必須為字母或下劃線。10. C語言的表達(dá)式是由常量、變量、函數(shù)等通過運(yùn)算符連接起來而形成的一個(gè)有意義的算式。計(jì)算表達(dá)式時(shí),根據(jù)表達(dá)式中各個(gè)運(yùn)算符的優(yōu)先級(jí)和結(jié)合性,按照優(yōu)先級(jí)從高到低地進(jìn)行運(yùn)算,對(duì)優(yōu)先級(jí)相同的運(yùn)算符則按照該運(yùn)算符的結(jié)合方向按從左向右或從右向左的順序計(jì)算。11. C語言運(yùn)算符分為以下幾類:(1) 算術(shù)運(yùn)算符:+、-、*、/、%;(2)關(guān)系運(yùn)算符:、=、=、!=;(3) 邏輯運(yùn)算符:!、&、| ;(4)位運(yùn)算符:、|、&;(5)賦值運(yùn)算符:=、擴(kuò)展賦值運(yùn)算符;(6) 條件運(yùn)算符: ? : ;(7)

55、 逗號(hào)運(yùn)算符:, ; (8) 指針運(yùn)算符:*、& ;(9)求字節(jié)運(yùn)算符:sizeof;(10)分量運(yùn)算符:.、-;(11)下標(biāo)運(yùn)算符: ;(12)強(qiáng)制類型轉(zhuǎn)換運(yùn)算符:(類型); (13) 其他:如函數(shù)調(diào)用運(yùn)算符( ) 。12. C語言的數(shù)據(jù)類型分為:基本數(shù)據(jù)類型、構(gòu)造數(shù)據(jù)類型、指針類型和空類型4大類。其中基本數(shù)據(jù)類型又分為:整型、實(shí)型、字符型和枚舉類型。13. C語言程序的基本組成和形式如下:預(yù)處理命令全局變量的定義 函數(shù)聲明主函數(shù) main( ) 聲明部分 執(zhí)行部分 其他函數(shù)定義聲明部分 執(zhí)行部分14. C語言程序的執(zhí)行過程:編輯源程序文件(即輸入程序代碼)、編譯源程序,產(chǎn)生目標(biāo)代碼、連接目標(biāo)代碼和庫函

溫馨提示

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

評(píng)論

0/150

提交評(píng)論