華東理工大學(xué)C程序設(shè)計(jì)(2014).ppt_第1頁
華東理工大學(xué)C程序設(shè)計(jì)(2014).ppt_第2頁
華東理工大學(xué)C程序設(shè)計(jì)(2014).ppt_第3頁
華東理工大學(xué)C程序設(shè)計(jì)(2014).ppt_第4頁
華東理工大學(xué)C程序設(shè)計(jì)(2014).ppt_第5頁
已閱讀5頁,還剩418頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

C程序設(shè)計(jì) 計(jì)算機(jī)基礎(chǔ)教研室高建良 2 關(guān)于本課程的學(xué)習(xí) 為什么要學(xué)本課程怎么來學(xué)習(xí)本課程 3 關(guān)于本課程的學(xué)習(xí) 為什么要學(xué)程序設(shè)計(jì) 4 關(guān)于本課程的學(xué)習(xí) 為什么要學(xué)C C不實(shí)用 C落后了 C難學(xué) 5 關(guān)于本課程的學(xué)習(xí) 怎么來學(xué)習(xí)本課程 6 C程序設(shè)計(jì) 第一章C語言概述第二章數(shù)據(jù)類型及基本運(yùn)算第三章順序結(jié)構(gòu)程序設(shè)計(jì)第四章選擇結(jié)構(gòu)程序設(shè)計(jì)第五章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第六章數(shù)組第七章函數(shù)第八章指針第九章結(jié)構(gòu)與其他自定義類型第十章文件 7 第一章C語言概述 概述C程序簡介 8 概述 程序設(shè)計(jì)與高級語言C語言的產(chǎn)生與發(fā)展C語言的特點(diǎn) 9 程序設(shè)計(jì)與高級語言 機(jī)器指令指令系統(tǒng)機(jī)器語言機(jī)器程序 10 程序設(shè)計(jì)與高級語言 匯編指令匯編語言匯編語言源程序匯編程序 例 11 程序設(shè)計(jì)與高級語言 程序設(shè)計(jì)語言低級語言和高級語言高級語言源程序 編譯程序集成環(huán)境例 TC VC等 12 C語言的產(chǎn)生與發(fā)展 C語言發(fā)明于1972年C 發(fā)明于1980年 13 C語言的特點(diǎn) 語言描述簡潔 靈活 高效有豐富的數(shù)據(jù)類型和運(yùn)算符提供了功能齊全的函數(shù)庫具有結(jié)構(gòu)化程序設(shè)計(jì)風(fēng)格具有匯編語言特征具有良好的通用性和程序的可移埴性 14 C程序簡介 C程序設(shè)計(jì)規(guī)則C程序的編譯與運(yùn)行 簡單的C程序 一 簡單的C程序 二 簡單的C程序 三 15 C程序設(shè)計(jì)規(guī)則 程序中使用到的一切數(shù)據(jù)都必須在使用之前對其類型和存儲屬性加以定義和說明函數(shù)是C程序的基本模塊 它應(yīng)該包括函數(shù)名 參數(shù)說明表和函數(shù)體三個(gè)部分 16 C程序設(shè)計(jì)規(guī)則 一行上允許寫多個(gè)語句 或一句語句分寫在多行上 但語句結(jié)束前必須加分號允許在程序中插入注釋 注釋行必須以規(guī)定的符號 開頭 以符號 結(jié)束書寫格式自由 為提高程序的可讀性 可采用 縮進(jìn) 方式書寫 17 C程序的編譯與運(yùn)行 CC TCVC 18 第1章作業(yè) 利用printf函數(shù)打印自己的姓名 將源文件hw1 1 c上傳 19 第二章數(shù)據(jù)類型及基本運(yùn)算 數(shù)據(jù)的表示基本數(shù)據(jù)類型及其表示算術(shù)運(yùn)算符和算術(shù)表達(dá)式 20 數(shù)據(jù)的表示 信息與數(shù)據(jù)的特征數(shù)據(jù)類型 21 信息與數(shù)據(jù)的特征 信息數(shù)據(jù)數(shù)據(jù)處理 22 數(shù)據(jù)類型 在C語言中 數(shù)據(jù)總體上可分為基本類型構(gòu)造類型指針類型 23 基本數(shù)據(jù)類型及其表示 標(biāo)識符 常量與變量整型數(shù)據(jù)實(shí)型數(shù)據(jù)字符型數(shù)據(jù) 24 標(biāo)識符 常量與變量 標(biāo)識符常量變量 25 標(biāo)識符必須滿足以下定義規(guī)則 必須由字母或下劃線開始 由字母 數(shù)字和下劃線組成的長度不超過32的字符串大 小寫字母表示不同意義不能與C關(guān)鍵字同名 標(biāo)識符 常量與變量 有關(guān)標(biāo)識符練習(xí) 26 常量可分為 數(shù)值常量符號常量 標(biāo)識符 常量與變量 27 符號常量符號常量的定義 define例 definePI3 1415926 defineN50 標(biāo)識符 常量與變量 28 變量規(guī)定變量在使用前必須說明變量的說明 例 inta b x 標(biāo)識符 常量與變量 29 在程序中 一個(gè)變量占據(jù)著一個(gè)實(shí)際的存儲單元 變量名實(shí)際上是存儲單元的標(biāo)志 存儲單元中的內(nèi)容是變量的值 允許在定義變量的同時(shí)對其賦初值 標(biāo)識符 常量與變量 30 整型數(shù)據(jù) inta b shortc d longm 6 longn j 8 unsignedlongk a 123 b 045 c d 0 x3d8 k 0773L 簡單的C程序 二 31 實(shí)型數(shù)據(jù) floata b doublex sum a 29 56 b 6 8e 07 x 33 sum 55 錯(cuò)誤的數(shù)據(jù)表示 簡單的C程序 三 32 字符型數(shù)據(jù) 字符型常量字符型常量中字母區(qū)分大小寫轉(zhuǎn)義字符以 開頭來標(biāo)記 33 字符型數(shù)據(jù) charc1 c2 c3 A c1 98inta b 49 c2 b a c1 34 基本運(yùn)算符和表達(dá)式 算術(shù)運(yùn)算符和算術(shù)表達(dá)式賦值運(yùn)算符和賦值表達(dá)式逗號運(yùn)算符和逗號表達(dá)式關(guān)系運(yùn)算符和關(guān)系表達(dá)式邏輯運(yùn)算符和邏輯表達(dá)式位運(yùn)算符和位表達(dá)式 35 算術(shù)運(yùn)算符和算術(shù)表達(dá)式 算術(shù)運(yùn)算符 簡單的C程序 四 36 算術(shù)運(yùn)算符和算術(shù)表達(dá)式 算術(shù)運(yùn)算符的運(yùn)算優(yōu)先級和結(jié)合性 37 算術(shù)運(yùn)算符和算術(shù)表達(dá)式 算術(shù)表達(dá)式說明 在算術(shù)表達(dá)式中沒有上標(biāo)和下標(biāo)乘號必須用 表示 不能省略括號一律使用圓括號 38 算術(shù)運(yùn)算符和算術(shù)表達(dá)式 寫出下列代數(shù)式的C表達(dá)式 x是個(gè)三位數(shù) 寫出取其各位數(shù)的表達(dá)式 39 算術(shù)運(yùn)算符和算術(shù)表達(dá)式 自動(dòng)類型轉(zhuǎn)換 main floaty z 242 5 unsignedx 2 shorts 4 y 10 b 5 7 x z a s 12 5 printf y f y 40 算術(shù)運(yùn)算符和算術(shù)表達(dá)式 強(qiáng)制類型轉(zhuǎn)換 main floatx 4 55 printf int x d x f int x x x 8 int 1 2 5 float 2 41 算術(shù)運(yùn)算符和算術(shù)表達(dá)式 例 設(shè)floatx y z x 6 4 y 6 4 z 6 8 4結(jié)果 x的值為1 0 y的值為1 5 42 算術(shù)運(yùn)算符和算術(shù)表達(dá)式 自增1 自減1運(yùn)算符為單目運(yùn)算符其有兩種運(yùn)算形式 前綴形式和后綴形式 功能不同前綴形式的自增 自減1運(yùn)算的優(yōu)先級高于算術(shù)運(yùn)算符中的所有雙目運(yùn)算符其運(yùn)算對象只能是變量 可以是實(shí)數(shù) 43 算術(shù)運(yùn)算符和算術(shù)表達(dá)式 例 設(shè)intx 5 則 y x 結(jié)果 y 6 x 6y x 結(jié)果 y 5 x 6x 結(jié)果 x 6y x x結(jié)果 44 賦值運(yùn)算符和賦值表達(dá)式 基本賦值運(yùn)算符形式 功能 將賦值運(yùn)算符右邊的表達(dá)式的值賦給其左邊的變量 45 賦值運(yùn)算符和賦值表達(dá)式 注意 賦值號左邊只能是變量如果右邊表達(dá)式類型與左邊變量的類型不一致 則先將右邊表達(dá)式的值自動(dòng)轉(zhuǎn)換成與左邊變量相同的類型 再進(jìn)行賦值 46 賦值運(yùn)算符和賦值表達(dá)式 復(fù)合賦值運(yùn)算符形式 功能 對賦值運(yùn)算符左 右兩邊的運(yùn)算對象進(jìn)行指定的算術(shù)運(yùn)算符的運(yùn)算 再將運(yùn)算結(jié)果賦予左邊的變量 47 賦值運(yùn)算符和賦值表達(dá)式 a b 等價(jià)于a a b a b 等價(jià)于a a b a b 1 等價(jià)于a a b 1 x 3 x 3 設(shè)x 11 48 賦值運(yùn)算符和賦值表達(dá)式 賦值表達(dá)式k j 1 intk a 1 j 5 a j a 20 j 7 a j 9 k 7 49 逗號運(yùn)算符和逗號表達(dá)式 逗號的用法有兩種 分隔符 運(yùn)算符 C允許用逗號連接表達(dá)式 雙目運(yùn)算符 運(yùn)算優(yōu)先級最低 a 2 6 a 4 a 15 50 逗號運(yùn)算符和逗號表達(dá)式 逗號表達(dá)式t a a b b t t a a b b t x 5 5 10 10 x intj 5 a a j 1 a 2 a 3 a 51 關(guān)系運(yùn)算符和關(guān)系表達(dá)式 關(guān)系運(yùn)算符6種關(guān)系運(yùn)算符 優(yōu)先級高 優(yōu)先級低 關(guān)系運(yùn)算符優(yōu)先級低于算術(shù)運(yùn)算符 高于賦值運(yùn)算符 52 關(guān)系運(yùn)算符和關(guān)系表達(dá)式 關(guān)系表達(dá)式fabs x y y xx y z 2x y z 1若關(guān)系表達(dá)式成立 其值為非零 否則為零 53 邏輯運(yùn)算符和邏輯表達(dá)式 邏輯運(yùn)算符3種邏輯運(yùn)算符 運(yùn)算規(guī)則優(yōu)先級 54 邏輯運(yùn)算符和邏輯表達(dá)式 邏輯表達(dá)式例 設(shè)a 1 b 2 c 3 a b c 0 a a b 0 c a a b c b a a 1 b 1 4 a b c c 55 邏輯運(yùn)算符和邏輯表達(dá)式 注意 代數(shù)中的不等式0 x 5的寫法C語言允許直接對數(shù)或字符進(jìn)行邏輯運(yùn)算 56 位運(yùn)算符和位表達(dá)式 位運(yùn)算6種位運(yùn)算符 除了 為單目運(yùn)算符 其余均為雙目運(yùn)算符位運(yùn)算對象只能是整型或字符型數(shù)據(jù) 57 位運(yùn)算符和位表達(dá)式 注意 右移運(yùn)算按 邏輯右移 還是 算術(shù)右移 視不同的計(jì)算機(jī)系統(tǒng)而定可以進(jìn)行位復(fù)合賦值運(yùn)算符的運(yùn)算優(yōu)先級 58 位運(yùn)算符和位表達(dá)式 例 1 3 311 2 2 15 811 33 21 3 3 位運(yùn)算實(shí)例 59 運(yùn)算符的優(yōu)先級 60 第2章作業(yè) 完成教材中第2章的全部習(xí)題 答案寫在文本文件hw2 txt中上傳 61 第三章順序結(jié)構(gòu)程序設(shè)計(jì) 順序結(jié)構(gòu)的基本特點(diǎn)是構(gòu)成程序的語句都是按照其出現(xiàn)的順序逐條執(zhí)行的 62 第三章順序結(jié)構(gòu)程序設(shè)計(jì) 語句概述表達(dá)式語句數(shù)據(jù)的輸出數(shù)據(jù)的輸入順序結(jié)構(gòu)程序設(shè)計(jì)舉例 63 語句概述 說明 每個(gè)語句都要用分號結(jié)尾 分號是語句間的分隔符聲明部分的內(nèi)容不是語句 64 基本語句 包括表達(dá)式語句 復(fù)合語句和空語句 65 選擇控制語句 可以根據(jù)某個(gè)條件來控制和改變程序流向 66 重復(fù)控制語句 這類語句可以根據(jù)某種條件控制一段程序被重復(fù)執(zhí)行多次 67 轉(zhuǎn)移語句 這類語句可以無條件地改變程序的流向 68 表達(dá)式語句 x y z x y i printf d x a b c 2 i 5 j 69 表達(dá)式語句 注意 表達(dá)式語句和賦值語句 賦值表達(dá)式的關(guān)系賦值表達(dá)式可以出現(xiàn)在任何表達(dá)式允許出現(xiàn)的地方聲明變量時(shí)不能采用多重賦值形式 70 數(shù)據(jù)的輸出 C語言有輸入 輸出函數(shù) 而沒有輸入 輸出語句 include命令的格式 include或 include stdio h 71 putchar函數(shù) 形式 putchar 功能 在顯示器上輸出一個(gè)字符參數(shù) 可以是字符型變量 整型變量或相應(yīng)的常量 72 putchar函數(shù) 例 使用庫函數(shù)putchar 輸出各種字符 main charch1 ch2 inti ch1 C ch2 h i 105 putchar ch1 putchar ch2 putchar i putchar n putchar 141 putchar n 73 printf函數(shù) 形式 printf 74 printf函數(shù) 功能 將各輸出項(xiàng)的值按指定的格式顯示在屏幕上 printf函數(shù)示例 75 printf函數(shù) 參數(shù) 輸出項(xiàng)可以是變量 常量和表達(dá)式格式控制字符串中允許包含格式編輯符和原樣輸出的字符串格式編輯符形式 格式修飾包括 標(biāo)志 類型修飾 輸出最小寬度和精度等 76 printf函數(shù) 標(biāo)志 標(biāo)志字符主要有 等 77 printf函數(shù) 輸出寬度 可以用十進(jìn)制數(shù)限定輸出數(shù)據(jù)的位數(shù) 78 printf函數(shù) 精度 對于float或double類型的實(shí)型數(shù) 可以用 m n 的形式指定數(shù)據(jù)的輸出寬度和小數(shù)位數(shù) 79 printf函數(shù) 類型修飾 類型修飾符有h和l兩種 l表示輸出項(xiàng)是長整型 無符號長整型或雙精度實(shí)型 80 printf函數(shù) 特殊字符的輸出 可以用 輸出一個(gè) 用 輸出一個(gè) 81 printf函數(shù) 注意 格式控制字符串中的格式說明與輸出項(xiàng)必須保持類型相同和個(gè)數(shù)一致 82 數(shù)據(jù)的輸入 83 getchar函數(shù) 形式 getchar 功能 從鍵盤上讀取一個(gè)字符參數(shù) 不帶任何參數(shù) 函數(shù)的返回值是輸入字符的ASCII碼 84 getchar函數(shù) main charc c getchar printf c d n c c 85 scanf函數(shù) 形式 scanf 輸入項(xiàng)1 輸入項(xiàng)2 86 scanf函數(shù) 功能 按指定的格式接收由鍵盤輸入的數(shù)據(jù) 并存入輸入項(xiàng)變量所在的內(nèi)存單元中 87 scanf函數(shù) 參數(shù) 格式控制字符串與printf函數(shù)類似 包含格式編輯符和原樣輸入字符輸入項(xiàng)必須為地址引用 通常由 后面跟變量名組成 88 scanf函數(shù) 參數(shù)格式編輯符的形式 89 scanf函數(shù) 常用的格式控制格式字符 用于規(guī)定相應(yīng)輸入項(xiàng)的輸入格式輸入數(shù)據(jù)寬度 scanf函數(shù)允許用十進(jìn)制整數(shù)設(shè)定輸入數(shù)據(jù)的寬度 系統(tǒng)自動(dòng)按此寬度截取所需數(shù)據(jù)類型修飾符 類型修飾符為h和l 分別表示輸入短整型和長整型數(shù)據(jù) 或雙精度實(shí)型 scanf函數(shù)示例 90 scanf函數(shù) 注意 對于基本類型變量 scanf函數(shù)要求在輸入項(xiàng)中給出變量地址 但使用s格式輸入字符串時(shí)除外輸入數(shù)據(jù)時(shí) 不允許規(guī)定精度輸入數(shù)據(jù)時(shí) 數(shù)據(jù)與數(shù)據(jù)之間應(yīng)使用分隔符 91 scanf函數(shù) 注意 按原樣輸入的字符在鍵入時(shí)不能遺漏 否則將導(dǎo)致數(shù)據(jù)項(xiàng)與對應(yīng)讀入數(shù)據(jù)錯(cuò)位鍵入數(shù)據(jù)的類型 寬度應(yīng)該與格式控制中給定的相一致 92 順序結(jié)構(gòu)程序設(shè)計(jì)舉例 將鍵盤輸入的兩個(gè)整數(shù)相互交換并輸出交換前后的值將鍵盤輸入的三位整數(shù)逆序并輸出 93 第3章作業(yè) 完成教材中第3章習(xí)題3 1 1 答案寫在文本文件中上傳 完成教材中第3章習(xí)題3 4 3 7 3 8 上傳源文件 94 第四章選擇結(jié)構(gòu)程序設(shè)計(jì) C語言提供的選擇結(jié)構(gòu)語句有if語句和switch語句由這類選擇語句構(gòu)成的程序稱為選擇結(jié)構(gòu)程序 95 第四章選擇結(jié)構(gòu)程序設(shè)計(jì) 條件if語句switch語句應(yīng)用舉例 96 條件 條件就是一個(gè)表達(dá)式 若以非零作為表達(dá)式成立 以零作為表達(dá)式不成立 就會得到兩種可能 即 真 或 假 這就是條件判斷 真 與 假 又稱為邏輯值 97 關(guān)系運(yùn)算 關(guān)系運(yùn)算符6種關(guān)系運(yùn)算符 優(yōu)先級高 優(yōu)先級低 關(guān)系運(yùn)算符優(yōu)先級低于算術(shù)運(yùn)算符 高于賦值運(yùn)算符 98 邏輯運(yùn)算 邏輯運(yùn)算符3種邏輯運(yùn)算符 運(yùn)算規(guī)則優(yōu)先級 99 條件運(yùn)算 條件運(yùn)算符1個(gè)條件運(yùn)算符 優(yōu)先級 100 條件運(yùn)算 條件表達(dá)式形式 101 條件運(yùn)算 語義 先計(jì)算表達(dá)式1的值 若結(jié)果為非0 則以表達(dá)式2的值作為整個(gè)條件表達(dá)式的值 若為0 則以表達(dá)式3的值作為整個(gè)表達(dá)式的值 102 條件運(yùn)算 例 x 0 1 1x 0 1 xy x y 103 條件運(yùn)算 說明 條件表達(dá)式中的表達(dá)式2和表達(dá)式3應(yīng)該有確定的值 二者通常為同類型表達(dá)式2和表達(dá)式3中有一個(gè)表達(dá)式不會被計(jì)算 104 if語句 if語句是用于選擇結(jié)構(gòu)的控制語句 根據(jù)給定條件進(jìn)行判斷 以決定所要執(zhí)行的操作 105 單邊形式if語句 形式 if 語義 先計(jì)算 表達(dá)式 的值 若結(jié)果為非0 就執(zhí)行 語句 否則直接執(zhí)行if語句的后續(xù)語句 106 單邊形式if語句 注意 if是C語言的關(guān)鍵字 表達(dá)式 允許是任何表達(dá)式 其兩側(cè)的圓括號不可少 語句 為if的執(zhí)行塊 如果其中包含多個(gè)語句 必須用 將其括成復(fù)合語句 107 雙邊形式if語句 形式 if else 語義 先計(jì)算 表達(dá)式 的值 若結(jié)果為非0 則執(zhí)行 語句1 若為0 則執(zhí)行 語句2 108 雙邊形式if語句 說明 else必須與if語句配對使用else前面的語句必須用分號結(jié)束雖然條件表達(dá)式和if語句都能構(gòu)成選擇結(jié)構(gòu) 但條件表達(dá)式不能取代所有的if語句 109 if語句的嵌套 當(dāng)if語句或else語句的執(zhí)行塊中又出現(xiàn)if語句時(shí) 就形成了if語句的嵌套 110 if語句的嵌套 說明 在多層嵌套中 C語句規(guī)定 else總是與前面最近的沒有配過對的if配對 與程序書寫格式無關(guān) 111 應(yīng)用舉例 編寫程序 從鍵盤輸入三個(gè)數(shù) 按從小到大的順序依次輸出 編寫程序 從鍵盤輸入一個(gè)成績 輸出其成績等級 112 switch語句 形式 switch case break case break case break default switch語句示例 113 switch語句 語義 先計(jì)算switch右邊 表達(dá)式 的值 并將其逐個(gè)與case行中的 常量表達(dá)式 的值相比較 若相等 則執(zhí)行該case行給出的語句 然后跳出switch語句 若 表達(dá)式 的值不等于任何case行給出的 常量表達(dá)式 的值 則轉(zhuǎn)向并執(zhí)行default行指引的語句 若沒有default行 則直接跳出switch結(jié)構(gòu) 轉(zhuǎn)去執(zhí)行后續(xù)語句 114 switch語句 說明 switch是關(guān)鍵字 其后面用 括起來的部分是其語句體case也是關(guān)鍵字 其后跟的 常量表達(dá)式 與冒號一起構(gòu)成語句標(biāo)號 case與 常量表達(dá)式 之間必須有空格 115 switch語句 說明 在同一個(gè)switch語句中 常量表達(dá)式 的值必須唯一switch后面的 表達(dá)式 可以是整型 字符型和枚舉型 但不能是實(shí)型 表達(dá)式 的值與 常量表達(dá)式 的值應(yīng)保持類型一致 116 switch語句 說明 default行可以出現(xiàn)在switch語句體的任何位置 也可以省略case標(biāo)號后面跟的語句允許是多個(gè)語句 可以不加語句括號 一個(gè)語句也可以被多個(gè)case行共用break也是關(guān)鍵字 其可以中止switch語句繼續(xù)往下執(zhí)行 117 應(yīng)用舉例 編寫程序 從鍵盤輸入1到7之間的一個(gè)整數(shù) 要求 輸入正確則輸出相應(yīng)的星期名稱 否則輸出錯(cuò)誤提示 118 第4章作業(yè) 作業(yè)上傳系統(tǒng)中N4 doc中的習(xí)題 完成教材中第4章習(xí)題4 2 4 4 4 7 4 9 上傳源文件 119 第五章循環(huán)結(jié)構(gòu)程序設(shè)計(jì) 循環(huán)結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計(jì)的三種基本結(jié)構(gòu)之一 它與順序結(jié)構(gòu) 選擇結(jié)構(gòu)一起 構(gòu)成各種復(fù)雜的程序 在C語言中 用于循環(huán)結(jié)構(gòu)程序設(shè)計(jì)的語句有 while語句 do while語句和for語句 120 第五章循環(huán)結(jié)構(gòu)程序設(shè)計(jì) while語句do while語句for語句循環(huán)結(jié)構(gòu)中的轉(zhuǎn)移語句循環(huán)結(jié)構(gòu)的嵌套應(yīng)用舉例 121 while語句 形式 while 122 while語句 語義 先計(jì)算圓括號中表達(dá)式的值 判斷其是否為0 若為非0 表示循環(huán)條件滿足 執(zhí)行循環(huán)體 如此重復(fù) 直至表達(dá)式的值為0 退出while循環(huán) 執(zhí)行后續(xù)語句 123 while語句 k 4 while k 2 printf k k 1 printf k d k 124 while語句 說明 while是C關(guān)鍵字 圓括號內(nèi)的 表達(dá)式 可以是任意合法的表達(dá)式循環(huán)體只包含一句語句注意if語句和while語句的差別循環(huán)體要有使循環(huán)結(jié)束的語句 125 while語句 實(shí)例 求正整數(shù)n的階乘用字符打印圖形 126 do while語句 形式 do while 127 do while語句 語義 先執(zhí)行循環(huán)體一次 然后判斷表達(dá)式是否成立 若為非0 表示成立 就繼續(xù)執(zhí)行循環(huán)體 否則結(jié)束循環(huán) 執(zhí)行do while語句的后續(xù)語句 128 do while語句 intsum 0 i 1 do sum sum i i while i 5 129 do while語句 說明 do和while是C關(guān)鍵字 圓括號內(nèi)的 表達(dá)式 可以是任意合法的表達(dá)式循環(huán)體至少被執(zhí)行一次循環(huán)體只包含一句語句循環(huán)體要有使循環(huán)結(jié)束的語句 130 do while語句 實(shí)例 求正整數(shù)n的階乘求 或 的值 131 for語句 形式 for 等價(jià)于 while 132 for語句 語義 先計(jì)算表達(dá)式1的值 再計(jì)算表達(dá)式2的值 并判斷其是否為0 若為0 則跳出循環(huán) 執(zhí)行for語句的后續(xù)語句 表達(dá)式2的值若為非0 則執(zhí)行循環(huán)體一次 再計(jì)算表達(dá)式3的值 轉(zhuǎn)到步驟2重復(fù)執(zhí)行 133 for語句 product 1for i 1 i 5 i product product i 134 for語句 說明 for是C關(guān)鍵字 圓括號內(nèi)的三個(gè) 表達(dá)式 可以是任意合法的表達(dá)式循環(huán)體只包含一句語句循環(huán)體要有使循環(huán)結(jié)束的語句 135 for語句 說明 for語句中的各表達(dá)式都可以省略 但分號間隔符不能少若表達(dá)式2省略 則循環(huán)體中必須有控制循環(huán)結(jié)束的break語句 否則將造成死循環(huán)循環(huán)體可以是空語句 136 for語句 實(shí)例 求正整數(shù)n的階乘求 或 的值 137 循環(huán)結(jié)構(gòu)中的轉(zhuǎn)移語句 break語句形式 break break語句只能用在switch語句或循環(huán)語句中 當(dāng)用在循環(huán)中時(shí) 其功能是終止當(dāng)前的循環(huán) 轉(zhuǎn)向后續(xù)語句執(zhí)行 138 循環(huán)結(jié)構(gòu)中的轉(zhuǎn)移語句 例 for x 1 y 0 x5 break printf y d n y 實(shí)例 判斷一個(gè)整數(shù)是否為素?cái)?shù) 139 循環(huán)結(jié)構(gòu)中的轉(zhuǎn)移語句 continue語句形式 continue 該語句只能用在循環(huán)中 其功能是結(jié)束本次循環(huán) 即跳過循環(huán)體中位于continue語句后面的語句 轉(zhuǎn)入下一次循環(huán)條件的判斷與執(zhí)行 并不結(jié)束循環(huán) 140 循環(huán)結(jié)構(gòu)的嵌套 當(dāng)一個(gè)循環(huán)語句的循環(huán)體中又出現(xiàn)另一個(gè)循環(huán)語句時(shí) 就構(gòu)成了循環(huán)的嵌套 141 循環(huán)結(jié)構(gòu)的嵌套 注意 內(nèi)循環(huán)是外循環(huán)的循環(huán)體 外循環(huán)每執(zhí)行一遍 內(nèi)循環(huán)就執(zhí)行一周 142 應(yīng)用舉例 用字符打印圖形 楊輝三角形 求解百雞問題輸出2到200之間的所有素?cái)?shù)求兩個(gè)整數(shù)的最大公約數(shù)和最小公倍數(shù) 143 第5章作業(yè) 作業(yè)上傳系統(tǒng)中N5 doc中的習(xí)題 完成教材中第5章習(xí)題5 1 5 9 上傳源文件 144 第六章數(shù)組 例 求一個(gè)班級50個(gè)學(xué)生的平均成績 如果還要找出高于平均成績的學(xué)生名單 如何實(shí)現(xiàn) 145 第六章數(shù)組 C語言支持兩種構(gòu)造數(shù)據(jù)類型 數(shù)組類型和結(jié)構(gòu)類型構(gòu)造類型的數(shù)據(jù)可分解為多個(gè)元素 其中每一個(gè)元素可以是基本類型或又是一個(gè)構(gòu)造類型 作為構(gòu)造類型的最低層元素只能是基本類型 146 第六章數(shù)組 數(shù)組概念的引入數(shù)組的說明數(shù)組的引用數(shù)組的存儲結(jié)構(gòu)數(shù)組的賦初值數(shù)組應(yīng)用舉例字符數(shù)組與字符串處理 147 數(shù)組概念的引入 數(shù)組是個(gè)多值變量 一個(gè)數(shù)組變量由一組同名但不同下標(biāo)的元素構(gòu)成用數(shù)組來存儲邏輯相關(guān)的數(shù)據(jù)實(shí)體 程序可方便地按下標(biāo)組織循環(huán) 148 數(shù)組概念的引入 數(shù)組包含的所有元素都具有相同名字和相同的數(shù)據(jù)類型用數(shù)組名和元素在數(shù)組中的序號可唯一地確定某個(gè)數(shù)組元素多維數(shù)組 149 數(shù)組的說明 形式 例 inta 5 b 4 5 floatx 4 150 數(shù)組的說明 數(shù)組說明的作用是為數(shù)組預(yù)留空間數(shù)據(jù)類型為數(shù)組的 基類型 整數(shù)表達(dá)式定義了數(shù)組中所含元素的個(gè)數(shù) 運(yùn)算符的個(gè)數(shù)決定了數(shù)組的維數(shù) 151 數(shù)組的說明 注意 在C語言中 數(shù)組元素的下標(biāo)起始值為0而不是1下標(biāo)運(yùn)算符中的整數(shù)表達(dá)式代表數(shù)組每一維的長度下標(biāo)運(yùn)算符中不允許使用變量定義數(shù)組長度 允許包含常量和sizeof表達(dá)式 152 數(shù)組的說明 defineN50inta 3 2 charc N floatd sizeof double doublef sizeof a 153 數(shù)組的引用 形式 其中 下標(biāo)1 下標(biāo)2 等為整型表達(dá)式 代表了該元素在內(nèi)存中的排列位置 154 數(shù)組的引用 說明 引用下標(biāo)變量時(shí) 所給出的下標(biāo)個(gè)數(shù)必須與所定義的數(shù)組維數(shù)相一致 而且每一個(gè)下標(biāo)表達(dá)式的值不得超界凡是數(shù)組基類型變量能使用的運(yùn)算 數(shù)組元素也能使用 155 一維數(shù)組遍歷 for i 0 i n i a i 156 二維數(shù)組遍歷 for i 0 i n i for j 0 j m j a i j 157 數(shù)組的賦初值 形式 158 數(shù)組的賦初值 floatx 4 1 0 0 0 2 7 5 2E 8 inty 3 2 0 1 2 3 4 5 intz 3 2 0 1 2 3 4 5 chars 6 H e l l o 或 chars 6 hello chars 5 hello chars 4 hello 159 數(shù)組的賦初值 注意 對數(shù)組賦初值時(shí) 若初值表中常數(shù)個(gè)數(shù)少于數(shù)組元素的個(gè)數(shù) 這表示僅對數(shù)組中排列靠前的元素賦初值 后面元素的值自動(dòng)賦0 若初值表中給定的初值多于下標(biāo)變量的個(gè)數(shù) 將出現(xiàn)編譯錯(cuò)誤 160 數(shù)組的賦初值 注意 C語言允許使用一維數(shù)組賦初值的方法對多維數(shù)組賦初值C語言允許在數(shù)組定義時(shí)不指定維的長度 只能是第一維 由初值表中初值的個(gè)數(shù)來間接決定長度 161 數(shù)組的賦初值 floatx 1 0 0 0 2 7 5 2E 8 inty 2 0 1 2 3 4 5 intz 2 0 1 2 3 4 5 chars hello 162 數(shù)組應(yīng)用舉例 閱讀程序?qū)懗鼋Y(jié)果 冒泡排序 選擇排序 打印楊輝三角形 數(shù)組應(yīng)用 163 數(shù)組的存儲結(jié)構(gòu) 一維數(shù)組的存儲結(jié)構(gòu)二維數(shù)組的存儲結(jié)構(gòu) 164 數(shù)組的存儲結(jié)構(gòu) 數(shù)組第一個(gè)元素的存儲地址就是整個(gè)數(shù)組的存儲首地址 該地址放在數(shù)組名中一維數(shù)組的存儲結(jié)構(gòu) 165 數(shù)組的存儲結(jié)構(gòu) 二維數(shù)組的存儲結(jié)構(gòu)為 按行線性展開 順序存放 即按 a 0 0 a 0 1 a 0 2 a 1 0 a 1 1 a 1 2 二維數(shù)組的存儲結(jié)構(gòu) 166 數(shù)組的存儲結(jié)構(gòu) 比較兩組程序段 fori 0to3forj 0to4a i j i 10 j和 forj 0to4fori 0to3a i j i 10 j 167 字符數(shù)組與字符串處理 在C語言中 沒有標(biāo)準(zhǔn)的字符串定義類型 字符串被當(dāng)作字符數(shù)組來處理 168 字符數(shù)組的定義 形式 char 169 字符數(shù)組的定義 說明字符數(shù)組中的元素只能存放一個(gè)字符型數(shù)據(jù)與普通數(shù)組一樣 字符數(shù)組也可以在定義時(shí)賦初值 170 字符數(shù)組的定義 charstring 100 cblock 20 20 string 0 T cblock 2 5 h charchr 6 C h i n a charline1 100 Shanghai 或charline1 100 Shanghai line1 Shanghai 171 字符串的結(jié)束標(biāo)記 為了便于識別一個(gè)字符串的結(jié)尾 C語言約定 字符串的末尾以轉(zhuǎn)義字符 0 作為結(jié)束標(biāo)記 172 字符串的輸入與輸出 使用scanf和printf函數(shù)輸入與輸出main charstr 80 scnaf s str printf s str 173 字符串的輸入與輸出 注意 用 s格式輸入輸出字符串時(shí) 輸出項(xiàng)應(yīng)該為字符數(shù)組名 不能是數(shù)組元素名數(shù)組名是個(gè)不占實(shí)際內(nèi)存的地址常量 它代表整個(gè)字符數(shù)組的存儲首地址 本身已經(jīng)是地址 不能再對它加地址運(yùn)算符 174 字符串的輸入與輸出 注意 s格式輸入字符串時(shí) 遇空格字符 Tab鍵和回車符將自動(dòng)結(jié)束輸入 s格式輸出字符串 遇 0 就結(jié)束輸出若輸入字符串長度超過字符數(shù)組所定義的長度時(shí) 將造成數(shù)組下標(biāo)越界 但系統(tǒng)對此不報(bào)錯(cuò) 175 字符串的輸入與輸出 使用gets和puts函數(shù)輸入與輸出 gets函數(shù)調(diào)用形式 gets 其中 str adr為字符數(shù)組名或字符指針名 代表輸入字符串的存儲起始地址 176 字符串的輸入與輸出 功能 接受由鍵盤輸入的字符串 包括空格符 并將它原樣存儲到由str adr所指向的內(nèi)存段中 系統(tǒng)并不保存字符串末尾的換行符 而是自動(dòng)將 0 作為字符串的內(nèi)容存放在串尾 177 字符串的輸入與輸出 使用gets和puts函數(shù)輸入與輸出 puts函數(shù)調(diào)用形式 puts 其中 str adr為字符數(shù)組名或字符指針名 代表輸出字符串的存儲起始地址 178 字符串的輸入與輸出 功能 由str adr所指向的地址開始 依次輸出存儲單元中的字符 直到遇到第一個(gè) 0 結(jié)束輸出 并自動(dòng)輸出一個(gè)回車換行 179 字符串的輸入與輸出 注意 gets和puts函數(shù)只能有一個(gè)輸出項(xiàng)和輸入項(xiàng)gets函數(shù)不識別字符串中的轉(zhuǎn)義字符 它原樣輸入 而puts函數(shù)能識別字符串中包含的轉(zhuǎn)義字符可以將二維字符數(shù)組看作一維字符串?dāng)?shù)組 180 字符串遍歷 使用字符數(shù)組 for i 0 s i i s i 已知字符串長度為n for i 0 i n i s i 使用字符指針 while p p p 使用字符指針 for p s p p p 181 字符數(shù)組應(yīng)用舉例 由鍵盤輸入長度不超過80的字符串 再原樣輸出 數(shù)組應(yīng)用 182 常用的字符串處理函數(shù) C語言沒有提供對字符串進(jìn)行整體操作的運(yùn)算符 但提供了許多有關(guān)字符串處理的庫函數(shù) 通過調(diào)用相應(yīng)的庫函數(shù)來實(shí)現(xiàn)各種功能 183 常用的字符串處理函數(shù) strlen函數(shù)形式 strlen 功能 計(jì)算并返回字符串str的長度 字符串結(jié)束標(biāo)志不計(jì)入內(nèi) 184 常用的字符串處理函數(shù) strcmp函數(shù)形式 strcmp 功能 比較str1和str2兩個(gè)字符串的大小注意 只比較結(jié)束標(biāo)記前內(nèi)容 185 常用的字符串處理函數(shù) strcpy函數(shù)形式 strcpy 功能 將字符串str2的內(nèi)容連同結(jié)束符 0 一起復(fù)制到str1中 注意 str1必須有足夠的長度以容納str2的內(nèi)容 charstr1 20 str2 China strcpy str1 str2 186 常用的字符串處理函數(shù) strcat函數(shù)形式 strcat 功能 將字符串str1與字符串str2尾首相接 生成的新串存于str1中 函數(shù)返回str1的首地址 注意 str1必須有足夠的長度以容納新增加的內(nèi)容 187 常用的字符串處理函數(shù) strcat函數(shù)main charstr1 80 str2 20 strcpy str1 Hello strcpy str2 Tom strcat str1 str2 printf s str1 188 字符數(shù)組應(yīng)用舉例 字符串的加密解密編寫程序 實(shí)現(xiàn)通訊錄查詢功能 189 第6章作業(yè) 作業(yè)上傳系統(tǒng)中N6 doc中的習(xí)題 完成教材中第6章習(xí)題6 4 6 5 上傳源文件 190 第七章函數(shù) 函數(shù)的概念函數(shù)的定義函數(shù)的調(diào)用函數(shù)的嵌套與遞歸變量的作用域變量的存儲類別 191 函數(shù)的概念 將具有特定功能 或者被重復(fù)多次使用的語句序列單獨(dú)設(shè)計(jì)成一個(gè)模塊 這個(gè)模塊就稱為函數(shù) 模塊化程序設(shè)計(jì) 方法 192 實(shí)例分析 求組合的值 求楊輝三角形 函數(shù) 一 函數(shù) 二 193 實(shí)例分析 說明 一個(gè)C程序可以僅由一個(gè)main函數(shù)組成 也可以由一個(gè) 只能一個(gè) main函數(shù)和一個(gè)或多個(gè)其他函數(shù)組成定義函數(shù)時(shí)出現(xiàn)的參數(shù)稱為形式參數(shù) 調(diào)用函數(shù)時(shí)出現(xiàn)的參數(shù)稱為實(shí)在參數(shù) 194 實(shí)例分析 說明 在C程序中 main函數(shù)能調(diào)用其他一切函數(shù) 反之不行 其他函數(shù)之間允許相互調(diào)用函數(shù)可以分為兩大類 標(biāo)準(zhǔn)函數(shù) 自定義函數(shù) 195 函數(shù)的定義 形式 函數(shù)體 實(shí)例1 求n的階乘 196 函數(shù)的定義 形式 197 函數(shù)的定義 參數(shù) 函數(shù)類型 代表該函數(shù)所返回的值的類型 可以是int float char等標(biāo)準(zhǔn)的預(yù)定義類型 也可以是用戶自己定義的類型 也可以是無值型void 若省略 將自動(dòng)賦予函數(shù)的類型為int 198 函數(shù)的定義 參數(shù) 函數(shù)名 用戶標(biāo)識符 命名規(guī)則與變量名相同 199 函數(shù)的定義 參數(shù) 形式參數(shù)表 代表函數(shù)的自變量 可有可無 若無 一對圓括號不能省略 各形式參數(shù)間用逗號分隔 如果在圓括號中說明形式參數(shù)的數(shù)據(jù)類型 則必須為每個(gè)形式參數(shù)指定類型 200 函數(shù)的定義 參數(shù) 函數(shù)體 在一對花括號之間 是實(shí)現(xiàn)函數(shù)功能的語句序列 201 函數(shù)的定義 說明 第一行函數(shù)頭的句末不能加分號函數(shù)要返回值 在函數(shù)體必須使用return語句實(shí)現(xiàn) 其作用除了將函數(shù)值返回給調(diào)用函數(shù) 并結(jié)束自身函數(shù)的運(yùn)行 202 函數(shù)的定義 說明 通常要求所返回的函數(shù)值類型與所定義的函數(shù)類型相一致 如果類型不一致 對于數(shù)值型數(shù)據(jù) 系統(tǒng)將自動(dòng)進(jìn)行類型轉(zhuǎn)換 203 函數(shù)的調(diào)用 形式 204 函數(shù)的調(diào)用 說明 在實(shí)在參數(shù)列表中 參數(shù)與參數(shù)之間用逗號分隔若被調(diào)用的函數(shù)無參數(shù) 一對圓括號不能省略必須保證實(shí)在參數(shù)與形式參數(shù)個(gè)數(shù)相同 類型一致 位置對應(yīng) 205 函數(shù)的調(diào)用 函數(shù)調(diào)用方式函數(shù)的調(diào)用出現(xiàn)在表達(dá)式中以獨(dú)立的函數(shù)語句調(diào)用 實(shí)例2 判別素?cái)?shù) 206 函數(shù)的調(diào)用 參數(shù)的傳遞 傳值 調(diào)用 傳地址 調(diào)用 指針 的概念 函數(shù)傳值調(diào)用 函數(shù)傳地址調(diào)用 實(shí)例3 百分第2套 207 函數(shù)的調(diào)用 函數(shù)調(diào)用聲明自定義函數(shù)調(diào)用聲明庫函數(shù)調(diào)用聲明 208 函數(shù)調(diào)用聲明 自定義函數(shù)調(diào)用聲明 或 函數(shù)調(diào)用聲明 209 函數(shù)調(diào)用聲明 庫函數(shù)調(diào)用聲明 include 或 include 210 函數(shù)的嵌套與遞歸 嵌套 調(diào)用 遞歸 調(diào)用 求階乘 求最大公約數(shù) 排序 練習(xí) 211 函數(shù)的嵌套與遞歸 注意 一個(gè)正確的遞歸函數(shù)必須保證遞推過程是有限制的遞歸函數(shù)的主要優(yōu)點(diǎn)是算法設(shè)計(jì)容易 用于迭代 級數(shù) 鏈表等方面的算法有特殊效果 但遞歸函數(shù)對存儲空間的使用非常大 時(shí)間效率也偏低 212 變量的作用域 變量的作用域局部變量全局變量 兩數(shù)交換 213 變量的存儲類別 變量具有三大屬性 類型 確定變量的存儲長度和運(yùn)算方式作用域 確定變量存在的空間存儲類別 確定變量存在的時(shí)間 214 變量的存儲類別 TC支持四種存儲類別 auto 動(dòng)態(tài)存儲 static 靜態(tài)存儲 register 寄存器型存儲 extern 外部存儲 215 動(dòng)態(tài)存儲 動(dòng)態(tài)存儲的特點(diǎn)是指變量的存儲單元隨函數(shù)的調(diào)用而取得 隨函數(shù)調(diào)用的結(jié)束而釋放 216 動(dòng)態(tài)存儲 動(dòng)態(tài)存儲類別的聲明形式 auto數(shù)據(jù)類型變量名列表 217 動(dòng)態(tài)存儲 說明 在函數(shù)內(nèi)部 包括主函數(shù) 定義的沒有經(jīng)過特殊聲明的一切局部變量 包括形式參數(shù) 均為動(dòng)態(tài)變量 它們自動(dòng)服從動(dòng)態(tài)存儲規(guī)則 并存儲在稱為 棧 的動(dòng)態(tài)內(nèi)存區(qū)域中局部變量默認(rèn)的存儲類別為動(dòng)態(tài)存儲引用一個(gè)從未被賦過值的動(dòng)態(tài)變量 其初值是不確定的 218 靜態(tài)存儲 靜態(tài)存儲的特點(diǎn)是在程序執(zhí)行的全過程中 變量始終占據(jù)著大小固定的存儲單元直至程序運(yùn)行結(jié)束才予以釋放 219 靜態(tài)存儲 靜態(tài)存儲類別的聲明形式 static數(shù)據(jù)類型變量名列表 220 靜態(tài)存儲 說明 函數(shù)調(diào)用結(jié)束后 變量的值需要保存到下一次調(diào)用時(shí)使用 可以使用靜態(tài)存儲類別靜態(tài)局部變量的生命周期與全局變量相同 其作用域仍局限于說明其自身的函數(shù)或復(fù)合語句內(nèi) 221 靜態(tài)存儲 說明 靜態(tài)局部變量若在定義時(shí)被賦初值 它僅在程序開始執(zhí)行時(shí)賦值一次 以后調(diào)用時(shí)不再重新賦值若定義靜態(tài)變量時(shí)未指定初值 則系統(tǒng)自動(dòng)對算術(shù)型變量賦0值 對字符型變量賦空值 對指針型變量賦NULL值 222 靜態(tài)存儲 說明 若對全局變量加上static說明 該全局變量只能在自身定義的文件中使用 其他程序無法引用或修改它 若希望全局變量不受外界程序和數(shù)據(jù)的影響 將其定義為靜態(tài)全局變量能直到良好的隱藏作用 223 寄存器型存儲 寄存器型存儲就是將變量的存儲單元分配在CPU的寄存器中 而不是常規(guī)的內(nèi)存中 由于數(shù)據(jù)直接從CPU中存取 因此訪問變量的時(shí)間初縮短 程序運(yùn)行的速度被加快 224 寄存器型存儲 寄存器型存儲類別的聲明形式 register數(shù)據(jù)類型變量名列表 225 寄存器型存儲 說明 一個(gè)計(jì)算機(jī)的寄存器數(shù)量是有限的 而且通用寄存器都是16位的 所以寄存器型存儲類別僅適用于int型和char型 而且每個(gè)函數(shù)只能定義極少量的寄存器變量寄存器存儲只能用于局部動(dòng)態(tài)變量和函數(shù)的形式參數(shù) 226 寄存器型存儲 說明 不同的計(jì)算機(jī)系統(tǒng)允許使用的寄存器變量數(shù)目不盡相同 通常 TC允許一個(gè)函數(shù)中同時(shí)定義兩個(gè)寄存器變量如果定義的寄存器變量數(shù)目超過系統(tǒng)可以提供的數(shù)目 則C會自動(dòng)將超限的寄存器變量當(dāng)作普通的動(dòng)態(tài)變量處理 227 外部存儲 如果一個(gè)全局變量要被同一個(gè)程序中的位于其前的函數(shù)引用或被另一個(gè)源程序文件引用 就必須在引用之前對該全局變量作外部存儲聲明 228 外部存儲 外部存儲類別的聲明形式 extern數(shù)據(jù)類型變量名列表 229 外部存儲 說明 外部存儲類別主要是為多文件共享而設(shè)置的 230 第7章作業(yè) 作業(yè)上傳系統(tǒng)中N7 doc中的習(xí)題 完成教材中第6章習(xí)題7 2 7 3 7 7 上傳源文件 231 第八章編譯預(yù)處理 所謂 編譯預(yù)處理 是指對源程序編譯之前先調(diào)用C的預(yù)處理程序?qū)σ?開頭的命令行進(jìn)行解釋 替換 產(chǎn)生一個(gè)新的源程序 然后才對源程序進(jìn)行通常意義下的編譯 232 第八章編譯預(yù)處理 宏定義文件包含處理?xiàng)l件編譯應(yīng)用舉例 233 宏定義 無參數(shù)宏定義有參數(shù)宏定義宏調(diào)用宏調(diào)用與函數(shù)調(diào)用的區(qū)別 234 無參數(shù)宏定義 形式 define例 defineN50 definePI3 1415926 235 無參數(shù)宏定義 所謂無參數(shù)宏定義是指用一個(gè)指定的標(biāo)識符來代表一個(gè)字符串 該標(biāo)識符也稱為 宏名 預(yù)處理時(shí) 宏名 被替換成字符串 這一過程稱為 宏展開 236 無參數(shù)宏定義 說明 宏名一般用大寫字母表示在宏展開時(shí) 系統(tǒng)不作任何正確性檢查 僅作原形替換 undef命令可用來終止宏定義的作用范圍宏定義可以嵌套 237 無參數(shù)宏定義 說明 宏定義中的字符串不加引號 結(jié)束處不加分號 若加了 系統(tǒng)將認(rèn)為引號 分號也是置換內(nèi)容 define命令一般出現(xiàn)在源文件的開頭處 238 有參數(shù)宏定義 形式 define 例 defineS a b a b a b 239 有參數(shù)宏定義 有參數(shù)宏定義是指用一個(gè)帶參數(shù)表的宏名代表一個(gè)字符串 預(yù)處理時(shí)不僅作字符串替換 還要進(jìn)行參數(shù)替換 240 有參數(shù)宏定義 說明 宏名與其右邊的圓括號之間不能有空格當(dāng)參數(shù)為表達(dá)式時(shí) 對參數(shù)表達(dá)式加括號可防止二義性 有參數(shù)宏 241 有參數(shù)宏定義 說明 應(yīng)盡量避免用自增變量作為宏替換的實(shí)參 242 宏調(diào)用 求園面積 243 宏調(diào)用與函數(shù)調(diào)用的區(qū)別 在程序控制上 調(diào)用帶參數(shù)宏時(shí) 宏實(shí)參只是簡單地對宏形參進(jìn)行原形替換 調(diào)用函數(shù)時(shí) 則是先求出實(shí)參表達(dá)式的值 再代入形參變量中 楊輝三角形 有參數(shù)宏 244 宏調(diào)用與函數(shù)調(diào)用的區(qū)別 與函數(shù)的參數(shù)不同 宏參數(shù)沒有固定的數(shù)據(jù)類型 因此宏定義時(shí)不涉及類型 宏名和宏參數(shù)均無類型 245 宏調(diào)用與函數(shù)調(diào)用的區(qū)別 函數(shù)調(diào)用是在程序運(yùn)行時(shí)發(fā)生的 并動(dòng)態(tài)分配所用的內(nèi)存單元 而宏調(diào)用是在編譯預(yù)處理時(shí)進(jìn)行的 而且不分配內(nèi)存單元 不進(jìn)行值傳送 也無返回值 246 宏調(diào)用與函數(shù)調(diào)用的區(qū)別 使用函數(shù)調(diào)用不增加運(yùn)行程序的長度 而每使用一次宏調(diào)用 都會使運(yùn)行程序篇幅有所增長 使編譯 鏈接后的執(zhí)行程序也增長 247 宏調(diào)用與函數(shù)調(diào)用的區(qū)別 宏定義主要用于需要少量參數(shù)的簡單表達(dá)式中 而且調(diào)用時(shí)不作數(shù)據(jù)類型檢查使用函數(shù)不會給程序帶來意想不到的副作用 而宏則可能給程序帶來意想不到的副作用 248 文件包含處理 文件包含處理是指將另一個(gè)源文件嵌入到當(dāng)前文件中 249 文件包含處理 形式 include 文件名 或 include 250 文件包含處理 說明一個(gè) include只能包含一個(gè)文件 除了預(yù)定義的標(biāo)準(zhǔn)頭文件外 還可包含用戶自己設(shè)計(jì)的文件文件包含命令中的一對尖括號和一對雙引號是有區(qū)別的 編譯系統(tǒng)會使用不同的方法搜索包含文件 251 文件包含處理 說明C語言提供了若干標(biāo)準(zhǔn)函數(shù)庫 每個(gè)標(biāo)準(zhǔn)函數(shù)庫都與某個(gè)預(yù)定義的頭文件相對應(yīng)允許使用嵌套包含 252 文件包含處理 說明當(dāng)用戶文件由多個(gè)源程序文件組成時(shí) 為了避免重復(fù)的說明和定義 提高工作效率 提高程序的可靠性和可維護(hù)性 可以把各個(gè)源文件共同使用的函數(shù)類型說明以及符號常量的宏定義等組建為單獨(dú)的用戶包含文件 253 條件編譯 條件編譯預(yù)處理可以使源程序有選擇性地編譯 使用條件編譯有利于程序的調(diào)試 能增強(qiáng)程序的通用性 可以將程序方便地定制成不同的版本 254 條件編譯 形式1 if else endif功能 當(dāng)表達(dá)式的值為非0時(shí) 編譯語句1 否則編譯語句段2 255 條件編譯 形式2 ifdef else endif功能 當(dāng)指定的宏名已經(jīng)在 define預(yù)處理行中被定義時(shí) 編譯語句段1 否則編譯語句段2 256 條件編譯 形式3 ifndef else endif功能 當(dāng)指定的宏名未在 define預(yù)處理行中被定義時(shí) 編譯語句段1 否則編譯語句段2 257 條件編譯 注意 if命令行中的表達(dá)式只能是常量表達(dá)式 else命令行是任選的 若缺省 條件不成立時(shí)直接跳出 endif命令行要使用嵌套條件編譯 需要使用 elif命令 258 第八章指針 指針的概念指針與數(shù)組指針與函數(shù)指針與字符串多級指針命令行參數(shù) 259 指針的概念 指針變量當(dāng)變量a存儲了變量b的地址 就稱變量a指向了變量b 260 指針變量的定義 形式 261 指針變量的定義 例 intm n p1 q 4 doubley z p2 262 指針變量的運(yùn)算符 取緊跟在其后面的變量的存儲地址 從緊跟在其后面的地址開始取值指針變量 或 一個(gè)整形常量 指針變量 263 指針變量的引用 注意 p若出現(xiàn)在變量定義語句中 表示定義指針變量p 若出現(xiàn)在表達(dá)式中 則表示取p所指對象的內(nèi)容指針變量只能接收 存儲與基類型相容的變量地址 不能對指針變量賦非地址值或與基類型不相容變量的地址 264 指針與數(shù)組 程序中凡是用數(shù)組處理的算法都可以通過指針實(shí)現(xiàn) 而且速度要比數(shù)組快得多 265 指針與一維數(shù)組 在C語言中 數(shù)組名是個(gè)地址常量 它代表整個(gè)數(shù)組的存儲首地址 因此賦值語句p a與p a 0 等價(jià) 266 指針與一維數(shù)組 由于數(shù)組的存儲是連續(xù)的 因此a i就是a i 的存儲地址 a i a i 表示取a i地址中的內(nèi)容 即a i 的值 一維數(shù)組的存儲結(jié)構(gòu) 267 通過數(shù)組名引用數(shù)組元素 a a i a 0 a i a a 0 a i a i a 0 aa i a i 268 指針與一維數(shù)組 若p a 則 p i 或者p i 就代表a i 注意 p是變量 其值可以改變 a是常量 其值不可改變 269 指針與一維數(shù)組 當(dāng)指針p指向了一維數(shù)組中的某個(gè)分量時(shí) 執(zhí)行p 或p 變表示使指針p后移或前移一個(gè)存儲單元 其位移的字節(jié)數(shù)等于所指數(shù)據(jù)類型的長度 p p p p 等的含義 270 指針與二維數(shù)組 二維數(shù)組的兩種編譯結(jié)構(gòu)把二維數(shù)組看作一個(gè)大的一維數(shù)組 整個(gè)數(shù)組是一個(gè)整體 數(shù)組名代表整個(gè)數(shù)組的存儲首地址 把一個(gè)二維數(shù)組看成是由若干個(gè)一維數(shù)組組成的數(shù)組 即數(shù)組的元素也是數(shù)組 二維數(shù)組的存儲結(jié)構(gòu) 271 通過數(shù)組名引用數(shù)組元素 a a 0 a i a i a 0 a 0 0 a i a i 0 a i j a i j a a i a 0 a i a i j 272 通過數(shù)組名引用數(shù)組元素 a a 0 a i a i a i j a i j 273 通過指針變量引用二維數(shù)組元素 一維數(shù)組名為一級指針常量 直接指向變量 二維組名為二級指針常量 指向一個(gè)一維數(shù)組 即指向行數(shù)組指針 指向一維數(shù)組的指針變量 274 通過指針變量引用二維數(shù)組元素 定義形式 N 其中 N代表指針變量所指向的一維數(shù)組的長度 例 int p 5 275 通過指針變量引用二維數(shù)組元素 注意 指針名外面的一對圓括號不能漏寫 否則就定義了指針數(shù)組而不是數(shù)組指針了 指針定義 276 通過指針變量引用二維數(shù)組元素 例 inta 4 3 b 3 5 int pa 3 pb 5 b 277 通過指針變量引用二維數(shù)組元素 說明 p是行指針 p i p 或p 均表示指針移動(dòng)的單位為 行 p只能指向二維數(shù)組中的行 而不能指向一行中的某個(gè)元素指針名p與二維數(shù)組名雖然都代表 行指針 但p為變量 所以它可以被賦值 而二維數(shù)組名為常量 不能被賦值 278 指針與函數(shù) 一 指針變量可以作為函數(shù)的參數(shù) 當(dāng)函數(shù)的參數(shù)為指針變量時(shí) 函數(shù)就能方便地通過形式參數(shù)將函數(shù)值帶出函數(shù)體反傳給主調(diào)函數(shù) 指針作為參數(shù) 279 指針與函數(shù) 二 函數(shù)名雖然不是變量 但它與數(shù)組名一樣在內(nèi)存中有確切的物理地址 是個(gè)地址常量 函數(shù)名存儲了函數(shù)目標(biāo)碼的入口地址 280 指針與函數(shù) 二 可以定義一個(gè)指向函數(shù)的指針 借助于該指針能使函數(shù)如同普通變量一樣被復(fù)制 存儲 使函數(shù)的通用性得以提高 指向函數(shù)的指針變量稱為 函數(shù)指針 281 函數(shù)指針 形式 其中 數(shù)據(jù)類型代表被指向函數(shù)的類型 282 函數(shù)指針 注意 指針名 必須包含在一對圓括號之中指針名后面的一對空括號不能漏寫 283 函數(shù)指針 例 double f 指針定義 284 函數(shù)指針 形式 函數(shù)指針 285 函數(shù)指針 注意 實(shí)參表所包含的實(shí)參個(gè)數(shù) 類型必須與被指向的函數(shù)的形式參數(shù)一致調(diào)用之前函數(shù)指針必須已經(jīng)指向某個(gè)實(shí)際函數(shù) 286 指針與函數(shù) 二 函數(shù)指針應(yīng)用舉例 求下列分段函數(shù)的函數(shù)值 287 指針與函數(shù) 三 函數(shù)的返回值類型為指針類型鏈表 函數(shù)指針 288 指針與字符串 單個(gè)字符串的表示多字符串的表示 289 指針與字符串 單個(gè)字符串的表示 單字符串 字符串操作1 字符串操作2 字符串操作3 290 指針與字符串 多字符串的表示 字符串排序 多字符串 291 多級指針 多級指針就是 指向指針的指針 292 二級指針的定義 形式 例 int p 或 charx p 293 二級指針與指針數(shù)組的聯(lián)系 字符串?dāng)?shù)組 294 命令行參數(shù) 在C語言中 main函數(shù)與其他函數(shù)一樣可以帶形式參數(shù) 295 命令行參數(shù) 形式 main int char 或者 main int char 296 命令行參數(shù) 說明 兩個(gè)形式參數(shù)的名字可以隨

溫馨提示

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

最新文檔

評論

0/150

提交評論