華東理工大學C程序設計(2014).ppt_第1頁
華東理工大學C程序設計(2014).ppt_第2頁
華東理工大學C程序設計(2014).ppt_第3頁
華東理工大學C程序設計(2014).ppt_第4頁
華東理工大學C程序設計(2014).ppt_第5頁
已閱讀5頁,還剩418頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

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

溫馨提示

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

評論

0/150

提交評論